2024 KOI 1교시 중등부 풀이 정리

이 문서는 2024 - 중등부 기출문제를 바탕으로, 중학생 기준에서 읽기 쉽게 다시 정리한 학습용 풀이 노트입니다. 공식 해설의 핵심 아이디어는 살리고, 설명은 더 짧고 분명하게 바꿨습니다.

1. 두 개씩 곱하기

문제 한눈에 보기

에서 서로 다른 두 수를 골라 곱한 값을 모두 더하는 문제입니다.

핵심 개념

를 이용하면 두 수의 곱을 한꺼번에 계산할 수 있습니다.

왜 이 생각을 먼저 해야 하는지

쌍을 하나하나 세는 것보다 식 하나로 정리하는 편이 훨씬 빠릅니다.

단계별 풀이

  1. 전체 합은 이므로 입니다.
  2. 여기에는 각 제곱 도 들어 있습니다.
  3. 따라서 서로 다른 두 수의 곱이 두 번씩 들어간 합은 입니다.
  4. 원하는 값은 그 절반이므로 입니다.

헷갈리기 쉬운 점

abba가 둘 다 들어 있으니 마지막에 꼭 로 나누어야 합니다.

2. 덧셈과 뺄셈

문제 한눈에 보기

주어진 식에 +, -를 넣어 값이 가 되게 만드는 경우의 수를 세는 문제입니다.

핵심 개념

빼는 수들의 합만 정하면 식 전체가 결정됩니다.

왜 이 생각을 먼저 해야 하는지

전부 더한 뒤 무엇을 -로 바꿨는지만 보면 식을 한 번에 정리할 수 있습니다.

단계별 풀이

  1. 숫자를 모두 더하면 입니다.
  2. 어떤 수를 -로 바꾸면 그 수는 한 번 더 빠지므로 결과는 입니다.
  3. 이것이 가 되려면 , 즉 입니다.
  4. 따라서 중 합이 가 되는 부분집합 개수를 세면 됩니다.
  5. 그 개수는 입니다.

헷갈리기 쉬운 점

-를 붙인 수는 그냥 한 번 빠지는 것이 아니라, 원래 더해진 상태에서 다시 빠지므로 2배 효과가 납니다.

3. 10명의 대결

문제 한눈에 보기

10명 중 3패하면 탈락합니다. 우승자가 정해질 때까지 필요한 경기 수의 최솟값과 최댓값의 합을 구하는 문제입니다.

핵심 개념

경기 한 번당 패배 하나가 생깁니다.

왜 이 생각을 먼저 해야 하는지

탈락 기준이 패배 수로 정해져 있으므로, 전체 경기 수는 결국 전체 패배 수를 세면 됩니다.

단계별 풀이

  1. 우승자를 제외한 9명은 모두 탈락해야 하므로, 이들은 각각 3패씩 가집니다.
  2. 따라서 이 9명이 만드는 패배 수는 입니다.
  3. 우승자가 0패이면 최소 경기입니다.
  4. 우승자도 패까지는 가능하므로, 최대는 경기입니다.
  5. 따라서 합은 입니다.

헷갈리기 쉬운 점

우승자는 패가 없어도 되고, 1패나 2패가 있어도 됩니다.

4. 진법 변환

문제 한눈에 보기

16진수 A6E4F3을 8진수로 바꾼 뒤, 각 자리 숫자의 합을 구하는 문제입니다.

핵심 개념

16진수는 2진수 4자리, 8진수는 2진수 3자리와 정확히 대응합니다.

왜 이 생각을 먼저 해야 하는지

16진수에서 바로 8진수로 가기보다, 2진수를 거치면 실수가 줄어듭니다.

단계별 풀이

  1. A6E4F3을 2진수로 바꾸면 입니다.
  2. 이것을 3자리씩 끊으면 010 100 110 111 001 001 111 011입니다.
  3. 따라서 8진수는 입니다.
  4. 자리수 합은 입니다.

헷갈리기 쉬운 점

앞자리가 3자리로 안 맞으면 왼쪽에 0을 붙여 정렬하면 됩니다.

5. 그래프의 중심

문제 한눈에 보기

간선을 몇 개만 추가해서 중심 정점이 생기게 만드는 문제입니다.

핵심 개념

어떤 정점을 중심으로 만들지 먼저 정해야 합니다.

왜 이 생각을 먼저 해야 하는지

목표 정점을 하나 정하면 부족한 도달 경로가 바로 보입니다.

단계별 풀이

  1. E에서 시작하면 B, F로 1번에 갈 수 있습니다.
  2. , 도 가능하므로 A, B, D, F는 이미 2번 안에 갑니다.
  3. 모자라는 것은 C 하나뿐입니다.
  4. 같은 간선 하나를 더하면 가 되어 전부 2번 안에 갈 수 있습니다.
  5. 따라서 필요한 간선 수는 입니다.

헷갈리기 쉬운 점

정점을 새로 만드는 것이 아니라 기존 그래프에 간선만 추가합니다.

6. 순열 찾기

문제 한눈에 보기

의 순열을 오름차순으로 나열했을 때 346번째 수를 구하는 문제입니다.

핵심 개념

사전순 순열은 크기의 묶음으로 나뉩니다.

왜 이 생각을 먼저 해야 하는지

앞자리가 정해질 때마다 가능한 경우 수가 팩토리얼만큼씩 줄어듭니다.

단계별 풀이

  1. 346번째는 0부터 세면 345번째입니다.
  2. 첫 자리는 개씩 묶이므로 입니다.
  3. 따라서 첫 자리는 남은 숫자 중 세 번째 수인 입니다.
  4. 남은 를 가지고 같은 일을 반복합니다.
  5. 이므로 둘째 자리는 입니다.
  6. 그다음은 이라서 셋째 자리는 입니다.
  7. 같은 방식으로 끝까지 가면 입니다.
  8. 따라서 정답은 입니다.

헷갈리기 쉬운 점

몇 번째를 셀 때는 0번째부터 생각하면 팩토리얼 계산이 깔끔해집니다.

7. 최소 신장 트리

문제 한눈에 보기

그래프의 최소 신장 트리 가중치 합을 구하는 문제입니다.

핵심 개념

가벼운 간선부터 넣되, 사이클이 생기면 건너뜁니다.

왜 이 생각을 먼저 해야 하는지

최소 신장 트리는 크루스칼 알고리즘으로 가장 쉽게 계산됩니다.

단계별 풀이

  1. 작은 간선부터 보면 순입니다.
  2. 은 넣습니다.
  3. 은 이미 연결된 부분 안에서 원을 만들므로 빼야 합니다.
  4. 는 넣습니다.
  5. 는 다시 원을 만들므로 뺍니다.
  6. 를 넣으면 모든 정점이 연결됩니다.
  7. 합은 입니다.

헷갈리기 쉬운 점

가중치가 작은 간선도 사이클을 만들면 사용하면 안 됩니다.

8. 기사, 도둑, 바보

문제 한눈에 보기

기사는 항상 참, 도둑은 항상 거짓, 바보는 아무 말이나 할 수 있습니다. 세 사람의 말을 보고 가능한 역할 배정 수를 구하는 문제입니다.

핵심 개념

가장 이상한 문장부터 보는 것이 좋습니다.

왜 이 생각을 먼저 해야 하는지

나는 도둑이다 같은 문장은 기사와 도둑 모두에게 모순이 됩니다.

단계별 풀이

  1. C: 나는 도둑이다를 봅시다.
  2. C가 기사면 거짓말을 할 수 없으니 불가능합니다.
  3. C가 도둑이면 “나는 도둑이다”가 참이 되어 또 불가능합니다.
  4. 따라서 C는 바보입니다.
  5. 이제 A의 말 우리 중 한 명 이상이 바보다는 이미 참입니다.
  6. 그러므로 A는 기사 또는 바보만 될 수 있습니다.
  7. B의 말 A는 바보가 아니다에 따라 경우를 나누면
  8. (A 기사, B 기사, C 바보), (A 기사, B 바보, C 바보), (A 바보, B 도둑, C 바보), (A 바보, B 바보, C 바보)
  9. 이렇게 4가지가 가능합니다.

헷갈리기 쉬운 점

바보는 참말도 할 수 있고 거짓말도 할 수 있습니다. 그래서 경우를 안 줄여도 됩니다.

9. 인버전의 개수

문제 한눈에 보기

앞에 있는 큰 수의 개수 ci가 주어질 때 원래 순열을 복원하는 문제입니다.

핵심 개념

뒤에서부터 ci+1번째로 큰 수를 고르면 됩니다.

왜 이 생각을 먼저 해야 하는지

앞에 남을 수들의 크기를 뒤에서 보면 쉽게 정할 수 있습니다.

단계별 풀이

  1. 아직 쓰지 않은 숫자를 작은 순서로 모아 둡니다.
  2. 맨 뒤 자리부터 차례로 ci+1번째로 큰 수를 꺼냅니다.
  3. 그렇게 하면 가 됩니다.
  4. 따라서 순열은 입니다.

헷갈리기 쉬운 점

이 문제는 앞에서부터보다 뒤에서부터 푸는 것이 훨씬 쉽습니다.

10. 화살표 따라가기

문제 한눈에 보기

101번 이동한 뒤 도착점이 5 또는 9가 되는 시작점들의 합을 구하는 문제입니다.

핵심 개념

사이클 길이로 나눈 나머지를 보면 됩니다.

왜 이 생각을 먼저 해야 하는지

101번을 직접 세기보다, 반복 구조를 이용하는 편이 훨씬 빠릅니다.

단계별 풀이

  1. 그래프의 순환은 로 길이 입니다.
  2. 이므로, 순환 안에서는 사실상 1번 더 이동한 것과 같습니다.
  3. 각 시작점에서 이 순환에 들어가는 과정을 보면 조건을 만족하는 시작점은
  4. 입니다.
  5. 합은 입니다.

헷갈리기 쉬운 점

사이클에 들어가기 전의 길이와, 사이클 안의 나머지 이동을 나누어 생각해야 합니다.

11. 동전

문제 한눈에 보기

4원, 7원 동전만 있고, 거스름돈도 쓸 수 있습니다. 총 동전 수가 6개 이하일 때 1원부터 42원까지 중 만들 수 있는 값의 개수를 묻는 문제입니다.

핵심 개념

이 문제는 낼 돈 - 거슬러 받을 돈의 형태로 생각하면 됩니다.

왜 이 생각을 먼저 해야 하는지

거스름돈을 쓸 수 있으므로 단순히 만 보는 문제가 아닙니다.

단계별 풀이

  1. 만들 수 있는 값은 꼴입니다.
  2. 단, 쓴 동전 수 이하입니다.
  3. 이 조건으로 가능한 값을 표로 만들어 보면,
  4. 부터 까지 중에서 만들 수 없는 값은 다섯 개뿐입니다.
  5. 따라서 만들 수 있는 값의 개수는 입니다.

헷갈리기 쉬운 점

거스름돈을 받을 수 있으므로, 원래보다 큰 금액을 내고 차액을 돌려받는 경우도 포함됩니다.

12. 로봇과 그래프

문제 한눈에 보기

로봇은 어떤 정점을 홀수 번째 방문하면 파란 간선, 짝수 번째 방문하면 빨간 간선을 따라갑니다. 정점 X에 도착할 때까지 몇 번 이동하는지 구하는 문제입니다.

핵심 개념

같은 정점이라도 홀수 번째 방문인지, 짝수 번째 방문인지가 다르면 다른 상태입니다.

왜 이 생각을 먼저 해야 하는지

이동 규칙이 정점 이름만으로는 정해지지 않고 방문 횟수의 홀짝까지 봐야 하기 때문입니다.

단계별 풀이

  1. 각 정점을 홀수 방문 상태짝수 방문 상태 두 개로 나누어 생각합니다.
  2. 그러면 이 문제는 상태가 정해진 방향 그래프를 따라 한 칸씩 가는 문제로 바뀝니다.
  3. 시작은 이고, 목표는 X에 처음 도착하는 순간입니다.
  4. 상태 그래프를 따라 순서대로 세어 보면 총 이동 횟수는 입니다.

헷갈리기 쉬운 점

A에 다시 왔다고 해도 같은 상태가 아닐 수 있습니다. 홀수 번째인지 짝수 번째인지가 중요합니다.

13. 과일

문제 한눈에 보기

21번 이내로 움직이며 과일을 최대한 많이 먹는 문제입니다.

최대 개이고, 한 가지 방법은 왼쪽으로 6번 이동한 뒤 오른쪽으로 15번 이동하는 것입니다.

핵심 개념

방향을 한 번만 바꿀 수 있으므로 한 구간을 가장 효율적으로 훑어야 합니다.

왜 이 생각을 먼저 해야 하는지

좌우를 여러 번 왕복할 수 없어서, 구간 선택이 전부입니다.

단계별 풀이

  1. 왼쪽 끝과 오른쪽 끝을 어디까지 잡을지 정합니다.
  2. 그 구간을 한 번만 방향을 바꾸어 지나갈 수 있어야 합니다.
  3. 해설의 예시인 왼쪽 6번 -> 오른쪽 15번은 과일 개를 먹습니다.
  4. 이보다 더 넓은 구간은 21번 안에 훑을 수 없으므로 최댓값은 입니다.

헷갈리기 쉬운 점

과일 위치에서 멈출 필요는 없습니다. 지나가기만 해도 먹습니다.

14. 제자리

문제 한눈에 보기

제자리에 있는 카드를 골라 맨 앞으로 보내는 일을 반복할 때 이동 횟수를 최대화하는 문제입니다.

최대 이동 횟수는 이고, 항상 움직일 수 있는 카드 중 가장 앞 카드를 고르면 됩니다.

핵심 개념

앞에 있는 카드를 먼저 움직여야 더 많은 기회를 남길 수 있습니다.

왜 이 생각을 먼저 해야 하는지

뒤쪽 카드를 먼저 움직이면 앞쪽 카드들의 제자리 조건이 빨리 깨질 수 있습니다.

단계별 풀이

  1. 매 순간 움직일 수 있는 카드들을 찾습니다.
  2. 그중 가장 앞에 있는 카드를 맨 앞으로 옮깁니다.
  3. 이 규칙을 반복하면 제자리 카드가 가장 오래 유지됩니다.
  4. 해설의 최적 결과는 이동 횟수 입니다.

헷갈리기 쉬운 점

가장 큰 숫자를 고르는 것이 아니라 가장 앞 카드를 고르는 것이 핵심입니다.

15. 어긋나는 정점

문제 한눈에 보기

이진 트리에서 왼쪽은 더 작고 오른쪽은 더 커야 한다는 느낌에 맞게 서브트리를 뒤집어 어긋남을 최소화하는 문제입니다.

정답은 하나가 아닙니다. 루트부터 내려가며 더 잘 맞는 방향으로 자식 서브트리를 바꾸면 됩니다.

핵심 개념

각 정점에서 그대로 둘지뒤집을지를 비교하면 됩니다.

왜 이 생각을 먼저 해야 하는지

위쪽에서 잘못 정하면 아래쪽에서도 연달아 어긋나기 때문입니다.

단계별 풀이

  1. 각 내부 정점마다 두 경우를 비교합니다.
  2. 그대로 둘 때와 뒤집을 때 중에서 부모-자식 관계가 더 잘 맞는 쪽을 택합니다.
  3. 그다음 같은 일을 자식 서브트리에서도 반복합니다.
  4. 이런 재귀적 선택으로 어긋나는 간선 수를 최소화할 수 있습니다.

헷갈리기 쉬운 점

숫자를 바꾸는 것이 아니라, 왼쪽 서브트리와 오른쪽 서브트리를 맞바꾸는 것만 가능합니다.

16. 숫자 카드

문제 한눈에 보기

연속한 5장씩 15번 지워서 카드 4장을 남기고, 그 4장을 이어 만든 수를 최소로 만드는 문제입니다.

핵심 개념

끝에 남는 4장은 원래 위치가 각각 , , , 인 카드에서 하나씩 골라집니다.

왜 이 생각을 먼저 해야 하는지

5장씩 지우면 남는 카드의 위치 나머지가 결정되므로, 아무 카드나 남길 수는 없습니다.

단계별 풀이

  1. 79장에서 5장씩 15번 지우면 4장만 남습니다.
  2. 이 4장은 각각 위치가 , , , 인 카드에서 하나씩 옵니다.
  3. 따라서 첫 자리는 그런 카드들 중 가장 작은 수, 둘째 자리도 그다음 나머지 자리에서 가장 작은 수를 고르면 됩니다.
  4. 해설 그림의 최적 결과는 입니다.
  5. 따라서 만들 수 있는 최소 네 자리 수는 입니다.

헷갈리기 쉬운 점

카드를 실제로 하나씩 지우며 생각하기보다, 남는 자리의 나머지를 먼저 보는 것이 핵심입니다.

17. Prefix Code

문제 한눈에 보기

길이가 정해진 8개의 이진 코드를 넣되, 서로 접두사가 되지 않게 만드는 문제입니다.

한 가지 정답은 다음과 같습니다.

핵심 개념

짧은 코드부터 배치하는 것이 안전합니다.

왜 이 생각을 먼저 해야 하는지

짧은 코드가 잘못 놓이면 뒤의 긴 코드들이 전부 막힐 수 있습니다.

단계별 풀이

  1. 길이 2짜리 , 을 먼저 둡니다.
  2. 길이 3짜리는 이 둘을 앞부분으로 쓰지 않게 , , 으로 둡니다.
  3. 길이 4와 5도 남은 한쪽 가지에만 붙여 , , 로 만들면 됩니다.
  4. 이렇게 하면 어떤 코드도 다른 코드의 접두사가 되지 않습니다.

헷갈리기 쉬운 점

길이가 길다고 안전한 것이 아닙니다. 앞부분이 겹치면 바로 탈락입니다.

18. Plus Minus

문제 한눈에 보기

앞부분마다 + 수가 - 수보다 적어지지 않게 하려면 어떤 -+로 바꿔야 하는지 찾는 문제입니다.

최소 비용은

핵심 개념

처음 규칙이 깨지는 곳에서 가장 싼 -를 고치는 그리디가 최적입니다.

왜 이 생각을 먼저 해야 하는지

그 구간 안의 - 중 하나는 반드시 바꿔야 하므로, 가장 싼 것을 고치는 게 항상 유리합니다.

단계별 풀이

  1. 왼쪽부터 보며 +, -처럼 누적합을 계산합니다.
  2. 처음으로 누적합이 음수가 되는 위치를 찾습니다.
  3. 그 앞에 있던 -들 중 가장 비용이 작은 것을 +로 바꿉니다.
  4. 다시 같은 일을 반복하면 됩니다.
  5. 해설 그림의 최적 총비용은 입니다.

헷갈리기 쉬운 점

지금 막 나온 -를 바꾸는 것이 아니라, 지금까지 나온 것 중 가장 싼 -를 바꿔야 합니다.

19. 식별 코드

문제 한눈에 보기

4비트 코드 8개를 골라서, 어느 자리 하나를 가려도 주인을 유일하게 알 수 있게 만드는 문제입니다.

한 가지 정답은 다음 8개입니다.

핵심 개념

짝수 개의 1을 가진 코드들만 모으면 됩니다.

왜 이 생각을 먼저 해야 하는지

한 글자를 가린 뒤에도 원래 코드가 다시 하나로 정해져야 하기 때문입니다.

단계별 풀이

  1. 위 8개는 모두 짝수 패리티 코드입니다.
  2. 어떤 자리 하나가 가려져도 남은 3자리를 보면 빠진 자리가 인지 인지 알 수 있습니다.
  3. 그래서 원래 4자리 코드가 다시 유일하게 정해집니다.
  4. 따라서 위 코드는 조건을 만족하는 정답입니다.

헷갈리기 쉬운 점

코드가 서로 다른 것만으로는 부족합니다. 가린 뒤에도 구별되어야 합니다.

20. 지폐 교환

문제 한눈에 보기

알파벳이 어떤 지폐를 뜻하는지 모르는데, 질문을 두 번만 해서 모든 대응을 알아내야 하는 문제입니다.

한 가지 정답은 원과 원을 묻는 것입니다. 해설 예시에서는

10원=G, 50원=D, 100원=A, 500원=E, 1000원=H, 5000원=B, 10000원=I, 50000원=F

이고 C는 아무 지폐에도 대응하지 않습니다.

핵심 개념

각 알파벳이 두 질문에서 몇 번 나왔는지를 으로 만들면 됩니다.

왜 이 생각을 먼저 해야 하는지

한 번의 질문으로는 같은 횟수가 나오는 알파벳이 생길 수 있지만, 두 번의 횟수쌍까지 보면 전부 다르게 만들 수 있습니다.

단계별 풀이

  1. 첫 번째 질문과 두 번째 질문에서 각 알파벳이 등장한 횟수를 각각 셉니다.
  2. 그러면 각 알파벳마다 (첫 번째 횟수, 두 번째 횟수)라는 꼴의 쌍이 생깁니다.
  3. 이 쌍들이 모두 다르면 어떤 알파벳이 어떤 지폐인지 유일하게 정할 수 있습니다.
  4. 해설은 , 이라는 두 질문이 한 가지 성공 예시라고 설명합니다.
  5. 실제 예시 화면에서는 위의 지폐 대응이 만들어집니다.

헷갈리기 쉬운 점

첫 번째 질문만으로 끝내는 문제가 아닙니다. 두 번째 질문까지 합친 횟수쌍이 중요합니다.

개념 한눈에 보기

개념나온 문제기억할 말
제곱식1에서 쌍의 곱을 꺼낸다.
부분집합 합2빼는 수들의 합이 식을 정한다.
패배 수 세기3경기 수는 결국 패배 수다.
진법 변환416진수는 2진수, 2진수는 8진수다.
중심 정점5먼저 누구를 중심으로 만들지 정한다.
팩토리얼 묶음6사전순 순열은 로 나뉜다.
역할 논리8가장 이상한 문장부터 본다.
크루스칼7가벼운 간선부터, 원이 생기면 제외한다.
뒤에서 복원9ci+1번째로 큰 수를 뒤에서 고른다.
사이클10긴 이동은 나머지로 바뀐다.
차액 표현11낸 돈 - 거슬러 받은 돈으로 본다.
상태 그래프12정점 + 방문 홀짝이 상태다.
구간 훑기13한 번만 방향을 바꿀 수 있다.
앞 카드 그리디14가장 앞 카드가 오래 기회를 남긴다.
재귀적 뒤집기15각 정점에서 더 좋은 방향을 고른다.
나머지 클래스16남는 카드는 가 정한다.
접두사 금지17짧은 코드부터 안전하게 놓는다.
최소 비용 수정18처음 깨지는 구간에서 가장 싼 -를 바꾼다.
패리티 코드19짝수 패리티면 한 글자를 가려도 복원된다.
횟수쌍20두 질문의 등장 횟수쌍이 전부 달라야 한다.