목록코테 (40)
컴굥일지

문제 https://www.acmicpc.net/problem/15312 문제 내용 영어 이름 2개를 입력받아, 두 이름의 궁합을 출력하면 된다. 궁합은 알파벳의 획순을 두고, 인접한 것끼리 계속 더해나가면 되는 방식이다. (1의 자리만 나타낸다) 문제 풀이 먼저, 문제 힌트에 적힌 대로 각 알파벳 별로 획순을 배열에 미리 저장해둔다. 그리고 문자열 두 개를 입력받아, 알파벳을 번갈아가며 저장하면 된다. 이때 알파벳 자체를 저장하기보단, 알파벳의 획순을 저장한다. 그리고 반복문 안에서 양 옆의 숫자와 계속 더해나가면 된다. 원소가 2개만 남았을 때, 결과를 출력하고 반복문을 멈추면 된다. 코드 #include #include #include using namespace std; //획 int line[2..

문제 https://www.acmicpc.net/problem/9076 문제 내용 심판 5명의 점수가 주어진다. 이때 최고점과 최저점의 점수를 제외한 심판 3명의 점수 중, 최고점과 최저점의 차이가 4 이상이면 "KIN"을 출력한다. 그렇지 않으면 심판 3명의 점수의 합계를 출력하면 된다. 문제 풀이 심판 5명의 점수를 입력받은 뒤 정렬을 진행한다. 이후, 0번과 4번 인덱스는 각각 최저점과 최고점이니 배제하고 생각한다. 4번 인덱스와 1번 인덱스의 차가 4 이상이면 "KIN"을 출력하고 다음 테스트 케이스로 넘어간다. 그렇지 않다면 인덱스 1~3까지의 합을 더하고 출력하면 된다. 코드 #include #include #include using namespace std; int main() { //입력 ..

문제 https://www.acmicpc.net/problem/1337 문제 내용 올바른 배열을 만들기 위해 추가해야 하는 최소한의 원소의 개수를 구하면 된다. 올바른 배열은 배열 안의 원소 중 5개가 연속인 경우를 말한다. 문제 풀이 처음에는 어떻게 풀어야 할지 고민이 많았다. 일단 배열을 입력받아서 sort()로 정렬을 진행한다. 그 이후, 처음부터 끝까지 반복문을 돌아야 한다. 반복문 안에, 또 다른 반복문이 필요하다. 현재 원소를 포함하여 5개가 연속되는지를 판단하는 것이다. 매 반복문마다 연속되는 것의 개수를 파악하고, 결괏값을 max()로 판단해서 업데이트하면 된다. 결괏값이 만약 5 이상이라면, 한 번에 연속되는 것이 5개 이상이라는 의미이므로 추가해야 할 원소의 개수는 0개이다. 결괏값이 ..

문제 https://www.acmicpc.net/problem/1946 문제 내용 선발할 수 있는 신입사원의 최대 인원수를 출력하는 문제이다. 이때 선발 조건은 서류 또는 면접 심사 중 적어도 하나가 다른 지원자보다 떨어지지 않는 자만 선발한다는 것이다. 즉, 서류와 면접 심사가 남들보다 모두 뒤처진다면 탈락하게 된다. 문제 풀이 서류와 면접 점수를 pair로 입력받는다. 그리고 일단 서류 점수로 정렬을 한다. pair로 이뤄진 배열에 sort()를 쓰면 첫 번째 인자(서류 점수)의 순서대로 정렬이 된다. 이제 우리는 두번째 인자(면접 점수)를 비교하면 된다. 우리가 지금 판단하고자 하는 사람을 A라고 하면, A보다 서류 점수가 높은 면접자들보다 A의 면접 점수가 좋아야 한다. (면접 점수는 작을수록 좋..

문제 https://www.acmicpc.net/problem/24544 문제 내용 콘텐츠의 개수 n이 주어지고, 그다음 줄에 콘텐츠의 흥미도가 주어진다. 마지막 줄에 등록 여부가 주어지는데 1이면 이미 등록되어 있는 경우, 0이면 그렇지 않은 경우이다. 문제에서 원하는 것은, 등록되지 않은 경우들의 콘텐츠 흥미도의 합이다. 문제 풀이 콘텐츠의 흥미도를 입력받아 저장해두고, 등록 여부를 입력받으면서 값을 더하면 된다. 다만, 출력 시에 첫째 줄에는 전체 콘텐츠의 흥미도 합을, 둘째 줄에는 미등록 콘텐츠의 흥미도 합을 출력해야 한다. 따라서 tot 변수는 전체 콘텐츠의 흥미도 합을, ans 변수는 미등록 콘텐츠의 흥미도 합을 더해가면 되겠다. 코드 #include #include #include using..

문제 https://www.acmicpc.net/problem/2210 문제 내용 숫자판의 임의의 위치에서 시작하여, 5번 이동하면서 만들 수 있는 수의 개수를 출력하는 문제이다. 문제를 해결하기 위해 dfs를 사용했으며, 중복을 확인하기 위해 set을 사용했다. 문제 풀이 그렇게 어려운 문제는 아니다. 나는 dfs함수를 만들어서 재귀로 이 문제를 해결했다. 일단 5번을 이동하면 재귀를 끝낼 수 있도록 dfs()에 조건문을 넣어주었다. 다만, return을 하기 전에, set에 값을 집어넣어서 중복을 제거해주었다. 나중에 출력시 set.size() 해주면 된다. dfs()에서 탈출 조건을 넘어간다면, 상하좌우로 이동을 하도록 코드를 짰다. 이때 x,y좌표가 범위를 벗어나는 것을 방지하기 위해 체크를 해주..

문제 https://www.acmicpc.net/problem/2607 문제 내용 기준이 되는 단어와 비교했을 때, 비슷한 단어가 몇 개인지 출력하면 된다. 먼저 같은 구성을 갖는 기준은 아래와 같다. 1. 두 문자열이 같은 종류의 문자로 이루어져 있다. 2. 같은 문자는 같은 개수만큼 있다. => 즉, 문자열을 정렬했을 때 두 문자열이 일치해야 한다. 그럼 비슷한 단어의 기준을 알아보겠다. 1. 두 문자열이 서로 같은 구성일 경우 2. 한 문자열에서 한 글자를 삭제하거나, 추가하거나, 다른 문자로 바꾸었을 때, 다른 문자열과 같은 구성이 될 경우 문제 풀이 처음에는 문제가 약간 헷갈렸다. 문제를 풀 때 그냥 풀지 말고 생각하고 구현해야 하는 문제 같다. 일단, 기준 문자열과 비교 대상이 되는 문자열은 ..

문제 https://www.acmicpc.net/problem/1427 문제 내용 숫자를 입력받아서 각 자릿수를 내림차순으로 정렬하면 된다. 문제 풀이 문제는 함수 몇개만 알면 매우 쉽다. 먼저 입력받은 숫자를 문자열로 바꾸어준다. 이때, to_string() 함수를 사용한다. (string헤더) 그리고 각각의 문자를 vector에 집어넣고, 이를 sort()하면 된다. 출력 시에는 정렬한 vector를 역순으로 출력해주면 끝난다. 코드 #include #include #include #include using namespace std; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); //입력 int n; cin >> n; //문제..

문제 https://www.acmicpc.net/problem/2798 문제 내용 카드 n개를 입력받아 3장을 뽑는다. 뽑은 카드를 다 합했을 때, m보다는 작거나 같으면서 만들 수 있는 최대의 값을 만들면 된다. 문제 풀이 완전 탐색으로 문제를 풀면 된다. 3장의 합이 m보다 작을 때, mmax의 값을 계속 갱신해가면서 확인하면 된다. 코드 #include #include #include using namespace std; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); //입력 int n, m; cin >> n >> m; vectorarr(n); for (int i = 0; i > arr[i]; //..

문제 https://www.acmicpc.net/problem/10773 문제 내용 숫자를 입력받아 0이면 이전 숫자를 지우고, 그렇지 않다면 계속 추가해주면 되는 문제이다. 문제에서는 마지막에 남아있는 수들의 합을 구하기를 바란다. 문제 풀이 크게 어려울 것이 없다. 스택을 쓸 줄 아는지 묻는 문제라고 보면 될 것 같다. 입력으로 0이 들어오면 pop(), 다른 수가 들어오면 push()를 해준다. 입력이 전부 끝나면 스택에 남아있는 수를 전부 더해주면 끝이다. 코드 #include #include using namespace std; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); //입력 int n,num; cin >> n; ..