2024 KOI 1교시 중등부 풀이 정리
이 문서는 2024 - 중등부 기출문제를 바탕으로, 중학생 기준에서 읽기 쉽게 다시 정리한 학습용 풀이 노트입니다. 공식 해설의 핵심 아이디어는 살리고, 설명은 더 짧고 분명하게 바꿨습니다.
1. 두 개씩 곱하기
문제 한눈에 보기
에서 서로 다른 두 수를 골라 곱한 값을 모두 더하는 문제입니다.
답
핵심 개념
를 이용하면 두 수의 곱을 한꺼번에 계산할 수 있습니다.
왜 이 생각을 먼저 해야 하는지
쌍을 하나하나 세는 것보다 식 하나로 정리하는 편이 훨씬 빠릅니다.
단계별 풀이
- 전체 합은 이므로 입니다.
- 여기에는 각 제곱 도 들어 있습니다.
- 따라서 서로 다른 두 수의 곱이 두 번씩 들어간 합은 입니다.
- 원하는 값은 그 절반이므로 입니다.
헷갈리기 쉬운 점
ab와 ba가 둘 다 들어 있으니 마지막에 꼭 로 나누어야 합니다.
2. 덧셈과 뺄셈
문제 한눈에 보기
주어진 식에 +, -를 넣어 값이 가 되게 만드는 경우의 수를 세는 문제입니다.
답
핵심 개념
빼는 수들의 합만 정하면 식 전체가 결정됩니다.
왜 이 생각을 먼저 해야 하는지
전부 더한 뒤 무엇을 -로 바꿨는지만 보면 식을 한 번에 정리할 수 있습니다.
단계별 풀이
- 숫자를 모두 더하면 입니다.
- 어떤 수를
-로 바꾸면 그 수는 한 번 더 빠지므로 결과는 입니다. - 이것이 가 되려면 , 즉 입니다.
- 따라서 중 합이 가 되는 부분집합 개수를 세면 됩니다.
- 그 개수는 입니다.
헷갈리기 쉬운 점
-를 붙인 수는 그냥 한 번 빠지는 것이 아니라, 원래 더해진 상태에서 다시 빠지므로 2배 효과가 납니다.
3. 10명의 대결
문제 한눈에 보기
10명 중 3패하면 탈락합니다. 우승자가 정해질 때까지 필요한 경기 수의 최솟값과 최댓값의 합을 구하는 문제입니다.
답
핵심 개념
경기 한 번당 패배 하나가 생깁니다.
왜 이 생각을 먼저 해야 하는지
탈락 기준이 패배 수로 정해져 있으므로, 전체 경기 수는 결국 전체 패배 수를 세면 됩니다.
단계별 풀이
- 우승자를 제외한 9명은 모두 탈락해야 하므로, 이들은 각각 3패씩 가집니다.
- 따라서 이 9명이 만드는 패배 수는 입니다.
- 우승자가 0패이면 최소 경기입니다.
- 우승자도 패까지는 가능하므로, 최대는 경기입니다.
- 따라서 합은 입니다.
헷갈리기 쉬운 점
우승자는 패가 없어도 되고, 1패나 2패가 있어도 됩니다.
4. 진법 변환
문제 한눈에 보기
16진수 A6E4F3을 8진수로 바꾼 뒤, 각 자리 숫자의 합을 구하는 문제입니다.
답
핵심 개념
16진수는 2진수 4자리, 8진수는 2진수 3자리와 정확히 대응합니다.
왜 이 생각을 먼저 해야 하는지
16진수에서 바로 8진수로 가기보다, 2진수를 거치면 실수가 줄어듭니다.
단계별 풀이
A6E4F3을 2진수로 바꾸면 입니다.- 이것을 3자리씩 끊으면
010 100 110 111 001 001 111 011입니다. - 따라서 8진수는 입니다.
- 자리수 합은 입니다.
헷갈리기 쉬운 점
앞자리가 3자리로 안 맞으면 왼쪽에 0을 붙여 정렬하면 됩니다.
5. 그래프의 중심

문제 한눈에 보기
간선을 몇 개만 추가해서 중심 정점이 생기게 만드는 문제입니다.
답
개
핵심 개념
어떤 정점을 중심으로 만들지 먼저 정해야 합니다.
왜 이 생각을 먼저 해야 하는지
목표 정점을 하나 정하면 부족한 도달 경로가 바로 보입니다.
단계별 풀이
E에서 시작하면B,F로 1번에 갈 수 있습니다.- 또 , 도 가능하므로
A, B, D, F는 이미 2번 안에 갑니다. - 모자라는 것은
C하나뿐입니다. - 같은 간선 하나를 더하면 가 되어 전부 2번 안에 갈 수 있습니다.
- 따라서 필요한 간선 수는 입니다.
헷갈리기 쉬운 점
정점을 새로 만드는 것이 아니라 기존 그래프에 간선만 추가합니다.
6. 순열 찾기
문제 한눈에 보기
의 순열을 오름차순으로 나열했을 때 346번째 수를 구하는 문제입니다.
답
핵심 개념
사전순 순열은 크기의 묶음으로 나뉩니다.
왜 이 생각을 먼저 해야 하는지
앞자리가 정해질 때마다 가능한 경우 수가 팩토리얼만큼씩 줄어듭니다.
단계별 풀이
346번째는 0부터 세면345번째입니다.- 첫 자리는 개씩 묶이므로 입니다.
- 따라서 첫 자리는 남은 숫자 중 세 번째 수인 입니다.
- 남은 를 가지고 같은 일을 반복합니다.
- 이므로 둘째 자리는 입니다.
- 그다음은 이라서 셋째 자리는 입니다.
- 같은 방식으로 끝까지 가면 입니다.
- 따라서 정답은 입니다.
헷갈리기 쉬운 점
몇 번째를 셀 때는 0번째부터 생각하면 팩토리얼 계산이 깔끔해집니다.
7. 최소 신장 트리

문제 한눈에 보기
그래프의 최소 신장 트리 가중치 합을 구하는 문제입니다.
답
핵심 개념
가벼운 간선부터 넣되, 사이클이 생기면 건너뜁니다.
왜 이 생각을 먼저 해야 하는지
최소 신장 트리는 크루스칼 알고리즘으로 가장 쉽게 계산됩니다.
단계별 풀이
- 작은 간선부터 보면 순입니다.
- 은 넣습니다.
- 은 이미 연결된 부분 안에서 원을 만들므로 빼야 합니다.
- 는 넣습니다.
- 는 다시 원을 만들므로 뺍니다.
- 를 넣으면 모든 정점이 연결됩니다.
- 합은 입니다.
헷갈리기 쉬운 점
가중치가 작은 간선도 사이클을 만들면 사용하면 안 됩니다.
8. 기사, 도둑, 바보
문제 한눈에 보기
기사는 항상 참, 도둑은 항상 거짓, 바보는 아무 말이나 할 수 있습니다. 세 사람의 말을 보고 가능한 역할 배정 수를 구하는 문제입니다.
답
핵심 개념
가장 이상한 문장부터 보는 것이 좋습니다.
왜 이 생각을 먼저 해야 하는지
나는 도둑이다 같은 문장은 기사와 도둑 모두에게 모순이 됩니다.
단계별 풀이
C: 나는 도둑이다를 봅시다.- C가 기사면 거짓말을 할 수 없으니 불가능합니다.
- C가 도둑이면 “나는 도둑이다”가 참이 되어 또 불가능합니다.
- 따라서
C는 바보입니다. - 이제 A의 말
우리 중 한 명 이상이 바보다는 이미 참입니다. - 그러므로 A는 기사 또는 바보만 될 수 있습니다.
- B의 말
A는 바보가 아니다에 따라 경우를 나누면 (A 기사, B 기사, C 바보),(A 기사, B 바보, C 바보),(A 바보, B 도둑, C 바보),(A 바보, B 바보, C 바보)- 이렇게
4가지가 가능합니다.
헷갈리기 쉬운 점
바보는 참말도 할 수 있고 거짓말도 할 수 있습니다. 그래서 경우를 안 줄여도 됩니다.
9. 인버전의 개수

문제 한눈에 보기
앞에 있는 큰 수의 개수 ci가 주어질 때 원래 순열을 복원하는 문제입니다.
답
핵심 개념
뒤에서부터 ci+1번째로 큰 수를 고르면 됩니다.
왜 이 생각을 먼저 해야 하는지
앞에 남을 수들의 크기를 뒤에서 보면 쉽게 정할 수 있습니다.
단계별 풀이
- 아직 쓰지 않은 숫자를 작은 순서로 모아 둡니다.
- 맨 뒤 자리부터 차례로
ci+1번째로 큰 수를 꺼냅니다. - 그렇게 하면 가 됩니다.
- 따라서 순열은 입니다.
헷갈리기 쉬운 점
이 문제는 앞에서부터보다 뒤에서부터 푸는 것이 훨씬 쉽습니다.
10. 화살표 따라가기

문제 한눈에 보기
101번 이동한 뒤 도착점이 5 또는 9가 되는 시작점들의 합을 구하는 문제입니다.
답
핵심 개념
사이클 길이로 나눈 나머지를 보면 됩니다.
왜 이 생각을 먼저 해야 하는지
101번을 직접 세기보다, 반복 구조를 이용하는 편이 훨씬 빠릅니다.
단계별 풀이
- 그래프의 순환은 로 길이 입니다.
- 이므로, 순환 안에서는 사실상
1번 더 이동한 것과 같습니다. - 각 시작점에서 이 순환에 들어가는 과정을 보면 조건을 만족하는 시작점은
- 입니다.
- 합은 입니다.
헷갈리기 쉬운 점
사이클에 들어가기 전의 길이와, 사이클 안의 나머지 이동을 나누어 생각해야 합니다.
11. 동전
문제 한눈에 보기
4원, 7원 동전만 있고, 거스름돈도 쓸 수 있습니다. 총 동전 수가 6개 이하일 때 1원부터 42원까지 중 만들 수 있는 값의 개수를 묻는 문제입니다.
답
핵심 개념
이 문제는 낼 돈 - 거슬러 받을 돈의 형태로 생각하면 됩니다.
왜 이 생각을 먼저 해야 하는지
거스름돈을 쓸 수 있으므로 단순히 만 보는 문제가 아닙니다.
단계별 풀이
- 만들 수 있는 값은 꼴입니다.
- 단, 쓴 동전 수 는 이하입니다.
- 이 조건으로 가능한 값을 표로 만들어 보면,
- 부터 까지 중에서 만들 수 없는 값은 다섯 개뿐입니다.
- 따라서 만들 수 있는 값의 개수는 입니다.
헷갈리기 쉬운 점
거스름돈을 받을 수 있으므로, 원래보다 큰 금액을 내고 차액을 돌려받는 경우도 포함됩니다.
12. 로봇과 그래프

문제 한눈에 보기
로봇은 어떤 정점을 홀수 번째 방문하면 파란 간선, 짝수 번째 방문하면 빨간 간선을 따라갑니다. 정점 X에 도착할 때까지 몇 번 이동하는지 구하는 문제입니다.
답
핵심 개념
같은 정점이라도 홀수 번째 방문인지, 짝수 번째 방문인지가 다르면 다른 상태입니다.
왜 이 생각을 먼저 해야 하는지
이동 규칙이 정점 이름만으로는 정해지지 않고 방문 횟수의 홀짝까지 봐야 하기 때문입니다.
단계별 풀이
- 각 정점을
홀수 방문 상태와짝수 방문 상태두 개로 나누어 생각합니다. - 그러면 이 문제는 상태가 정해진 방향 그래프를 따라 한 칸씩 가는 문제로 바뀝니다.
- 시작은 이고, 목표는
X에 처음 도착하는 순간입니다. - 상태 그래프를 따라 순서대로 세어 보면 총 이동 횟수는 입니다.
헷갈리기 쉬운 점
A에 다시 왔다고 해도 같은 상태가 아닐 수 있습니다. 홀수 번째인지 짝수 번째인지가 중요합니다.
13. 과일

문제 한눈에 보기
21번 이내로 움직이며 과일을 최대한 많이 먹는 문제입니다.
답
최대 개이고, 한 가지 방법은 왼쪽으로 6번 이동한 뒤 오른쪽으로 15번 이동하는 것입니다.
핵심 개념
방향을 한 번만 바꿀 수 있으므로 한 구간을 가장 효율적으로 훑어야 합니다.
왜 이 생각을 먼저 해야 하는지
좌우를 여러 번 왕복할 수 없어서, 구간 선택이 전부입니다.
단계별 풀이
- 왼쪽 끝과 오른쪽 끝을 어디까지 잡을지 정합니다.
- 그 구간을 한 번만 방향을 바꾸어 지나갈 수 있어야 합니다.
- 해설의 예시인
왼쪽 6번 -> 오른쪽 15번은 과일 개를 먹습니다. - 이보다 더 넓은 구간은 21번 안에 훑을 수 없으므로 최댓값은 입니다.
헷갈리기 쉬운 점
과일 위치에서 멈출 필요는 없습니다. 지나가기만 해도 먹습니다.
14. 제자리

문제 한눈에 보기
제자리에 있는 카드를 골라 맨 앞으로 보내는 일을 반복할 때 이동 횟수를 최대화하는 문제입니다.
답
최대 이동 횟수는 이고, 항상 움직일 수 있는 카드 중 가장 앞 카드를 고르면 됩니다.
핵심 개념
앞에 있는 카드를 먼저 움직여야 더 많은 기회를 남길 수 있습니다.
왜 이 생각을 먼저 해야 하는지
뒤쪽 카드를 먼저 움직이면 앞쪽 카드들의 제자리 조건이 빨리 깨질 수 있습니다.
단계별 풀이
- 매 순간 움직일 수 있는 카드들을 찾습니다.
- 그중 가장 앞에 있는 카드를 맨 앞으로 옮깁니다.
- 이 규칙을 반복하면 제자리 카드가 가장 오래 유지됩니다.
- 해설의 최적 결과는 이동 횟수 입니다.
헷갈리기 쉬운 점
가장 큰 숫자를 고르는 것이 아니라 가장 앞 카드를 고르는 것이 핵심입니다.
15. 어긋나는 정점

문제 한눈에 보기
이진 트리에서 왼쪽은 더 작고 오른쪽은 더 커야 한다는 느낌에 맞게 서브트리를 뒤집어 어긋남을 최소화하는 문제입니다.
답
정답은 하나가 아닙니다. 루트부터 내려가며 더 잘 맞는 방향으로 자식 서브트리를 바꾸면 됩니다.
핵심 개념
각 정점에서 그대로 둘지와 뒤집을지를 비교하면 됩니다.
왜 이 생각을 먼저 해야 하는지
위쪽에서 잘못 정하면 아래쪽에서도 연달아 어긋나기 때문입니다.
단계별 풀이
- 각 내부 정점마다 두 경우를 비교합니다.
- 그대로 둘 때와 뒤집을 때 중에서 부모-자식 관계가 더 잘 맞는 쪽을 택합니다.
- 그다음 같은 일을 자식 서브트리에서도 반복합니다.
- 이런 재귀적 선택으로 어긋나는 간선 수를 최소화할 수 있습니다.
헷갈리기 쉬운 점
숫자를 바꾸는 것이 아니라, 왼쪽 서브트리와 오른쪽 서브트리를 맞바꾸는 것만 가능합니다.
16. 숫자 카드

문제 한눈에 보기
연속한 5장씩 15번 지워서 카드 4장을 남기고, 그 4장을 이어 만든 수를 최소로 만드는 문제입니다.
답
핵심 개념
끝에 남는 4장은 원래 위치가 각각 , , , 인 카드에서 하나씩 골라집니다.
왜 이 생각을 먼저 해야 하는지
5장씩 지우면 남는 카드의 위치 나머지가 결정되므로, 아무 카드나 남길 수는 없습니다.
단계별 풀이
- 79장에서 5장씩 15번 지우면 4장만 남습니다.
- 이 4장은 각각 위치가 , , , 인 카드에서 하나씩 옵니다.
- 따라서 첫 자리는 그런 카드들 중 가장 작은 수, 둘째 자리도 그다음 나머지 자리에서 가장 작은 수를 고르면 됩니다.
- 해설 그림의 최적 결과는 입니다.
- 따라서 만들 수 있는 최소 네 자리 수는 입니다.
헷갈리기 쉬운 점
카드를 실제로 하나씩 지우며 생각하기보다, 남는 자리의 나머지를 먼저 보는 것이 핵심입니다.
17. Prefix Code

문제 한눈에 보기
길이가 정해진 8개의 이진 코드를 넣되, 서로 접두사가 되지 않게 만드는 문제입니다.
답
한 가지 정답은 다음과 같습니다.
핵심 개념
짧은 코드부터 배치하는 것이 안전합니다.
왜 이 생각을 먼저 해야 하는지
짧은 코드가 잘못 놓이면 뒤의 긴 코드들이 전부 막힐 수 있습니다.
단계별 풀이
- 길이 2짜리 , 을 먼저 둡니다.
- 길이 3짜리는 이 둘을 앞부분으로 쓰지 않게 , , 으로 둡니다.
- 길이 4와 5도 남은 한쪽 가지에만 붙여 , , 로 만들면 됩니다.
- 이렇게 하면 어떤 코드도 다른 코드의 접두사가 되지 않습니다.
헷갈리기 쉬운 점
길이가 길다고 안전한 것이 아닙니다. 앞부분이 겹치면 바로 탈락입니다.
18. Plus Minus

문제 한눈에 보기
앞부분마다 + 수가 - 수보다 적어지지 않게 하려면 어떤 -를 +로 바꿔야 하는지 찾는 문제입니다.
답
최소 비용은
핵심 개념
처음 규칙이 깨지는 곳에서 가장 싼 -를 고치는 그리디가 최적입니다.
왜 이 생각을 먼저 해야 하는지
그 구간 안의 - 중 하나는 반드시 바꿔야 하므로, 가장 싼 것을 고치는 게 항상 유리합니다.
단계별 풀이
- 왼쪽부터 보며
+는 ,-는 처럼 누적합을 계산합니다. - 처음으로 누적합이 음수가 되는 위치를 찾습니다.
- 그 앞에 있던
-들 중 가장 비용이 작은 것을+로 바꿉니다. - 다시 같은 일을 반복하면 됩니다.
- 해설 그림의 최적 총비용은 입니다.
헷갈리기 쉬운 점
지금 막 나온 -를 바꾸는 것이 아니라, 지금까지 나온 것 중 가장 싼 -를 바꿔야 합니다.
19. 식별 코드

문제 한눈에 보기
4비트 코드 8개를 골라서, 어느 자리 하나를 가려도 주인을 유일하게 알 수 있게 만드는 문제입니다.
답
한 가지 정답은 다음 8개입니다.
핵심 개념
짝수 개의 1을 가진 코드들만 모으면 됩니다.
왜 이 생각을 먼저 해야 하는지
한 글자를 가린 뒤에도 원래 코드가 다시 하나로 정해져야 하기 때문입니다.
단계별 풀이
- 위 8개는 모두 짝수 패리티 코드입니다.
- 어떤 자리 하나가 가려져도 남은 3자리를 보면 빠진 자리가 인지 인지 알 수 있습니다.
- 그래서 원래 4자리 코드가 다시 유일하게 정해집니다.
- 따라서 위 코드는 조건을 만족하는 정답입니다.
헷갈리기 쉬운 점
코드가 서로 다른 것만으로는 부족합니다. 가린 뒤에도 구별되어야 합니다.
20. 지폐 교환

문제 한눈에 보기
알파벳이 어떤 지폐를 뜻하는지 모르는데, 질문을 두 번만 해서 모든 대응을 알아내야 하는 문제입니다.
답
한 가지 정답은 원과 원을 묻는 것입니다. 해설 예시에서는
10원=G, 50원=D, 100원=A, 500원=E, 1000원=H, 5000원=B, 10000원=I, 50000원=F
이고 C는 아무 지폐에도 대응하지 않습니다.
핵심 개념
각 알파벳이 두 질문에서 몇 번 나왔는지를 쌍으로 만들면 됩니다.
왜 이 생각을 먼저 해야 하는지
한 번의 질문으로는 같은 횟수가 나오는 알파벳이 생길 수 있지만, 두 번의 횟수쌍까지 보면 전부 다르게 만들 수 있습니다.
단계별 풀이
- 첫 번째 질문과 두 번째 질문에서 각 알파벳이 등장한 횟수를 각각 셉니다.
- 그러면 각 알파벳마다
(첫 번째 횟수, 두 번째 횟수)라는 꼴의 쌍이 생깁니다. - 이 쌍들이 모두 다르면 어떤 알파벳이 어떤 지폐인지 유일하게 정할 수 있습니다.
- 해설은 , 이라는 두 질문이 한 가지 성공 예시라고 설명합니다.
- 실제 예시 화면에서는 위의 지폐 대응이 만들어집니다.
헷갈리기 쉬운 점
첫 번째 질문만으로 끝내는 문제가 아닙니다. 두 번째 질문까지 합친 횟수쌍이 중요합니다.
개념 한눈에 보기
| 개념 | 나온 문제 | 기억할 말 |
|---|---|---|
| 제곱식 | 1 | 에서 쌍의 곱을 꺼낸다. |
| 부분집합 합 | 2 | 빼는 수들의 합이 식을 정한다. |
| 패배 수 세기 | 3 | 경기 수는 결국 패배 수다. |
| 진법 변환 | 4 | 16진수는 2진수, 2진수는 8진수다. |
| 중심 정점 | 5 | 먼저 누구를 중심으로 만들지 정한다. |
| 팩토리얼 묶음 | 6 | 사전순 순열은 로 나뉜다. |
| 역할 논리 | 8 | 가장 이상한 문장부터 본다. |
| 크루스칼 | 7 | 가벼운 간선부터, 원이 생기면 제외한다. |
| 뒤에서 복원 | 9 | ci+1번째로 큰 수를 뒤에서 고른다. |
| 사이클 | 10 | 긴 이동은 나머지로 바뀐다. |
| 차액 표현 | 11 | 낸 돈 - 거슬러 받은 돈으로 본다. |
| 상태 그래프 | 12 | 정점 + 방문 홀짝이 상태다. |
| 구간 훑기 | 13 | 한 번만 방향을 바꿀 수 있다. |
| 앞 카드 그리디 | 14 | 가장 앞 카드가 오래 기회를 남긴다. |
| 재귀적 뒤집기 | 15 | 각 정점에서 더 좋은 방향을 고른다. |
| 나머지 클래스 | 16 | 남는 카드는 가 정한다. |
| 접두사 금지 | 17 | 짧은 코드부터 안전하게 놓는다. |
| 최소 비용 수정 | 18 | 처음 깨지는 구간에서 가장 싼 -를 바꾼다. |
| 패리티 코드 | 19 | 짝수 패리티면 한 글자를 가려도 복원된다. |
| 횟수쌍 | 20 | 두 질문의 등장 횟수쌍이 전부 달라야 한다. |