필기시험 B part 2 & 3 | Code Kata: 삼총사 | TIL 22th | 캠프 16일 차 | 05/13/2026 (Wed)

2026. 5. 13. 23:03·TIL

필기시험 B part 2 & 3 | Code Kata: 삼총사

 

 


 

2025 게임 프로그래밍 전문가 국가기술 자격검정 필기시험 B, Part2 & 3 풀이 & 해석

  • Part 2 : Part2. 게임 알고리즘과 설계: 1~25 | 2025 게임 프로그래밍 전문가 국가기술 자격검정 필기시험 B 풀이 | 게임국가기술자격검정 게임프로그래밍전문가 [한국콘텐츠진흥원]
  • Part 3: Part3. 게임 알고리즘과 설계: 1~25 | 2025 게임 프로그래밍 전문가 국가기술 자격검정 필기시험 B 풀이 | 게임국가기술자격검정 게임프로그래밍전문가 [한국콘텐츠진흥원]

 


 

Code Kata: 삼총사

042. 삼총사 | Solved Date: 2026-05-14-Tue | Problem Link

문제 설명

한국중학교에 다니는 학생들은 각자 정수 번호를 갖고 있습니다. 이 학교 학생 3명의 정수 번호를 더했을 때 0이 되면 3명의 학생은 삼총사라고 합니다. 예를 들어, 5명의 학생이 있고, 각각의 정수 번호가 순서대로 -2, 3, 0, 2, -5일 때, 첫 번째, 세 번째, 네 번째 학생의 정수 번호를 더하면 0이므로 세 학생은 삼총사입니다. 또한, 두 번째, 네 번째, 다섯 번째 학생의 정수 번호를 더해도 0이므로 세 학생도 삼총사입니다. 따라서 이 경우 한국중학교에서는 두 가지 방법으로 삼총사를 만들 수 있습니다.

한국중학교 학생들의 번호를 나타내는 정수 배열 number가 매개변수로 주어질 때, 학생들 중 삼총사를 만들 수 있는 방법의 수를 return 하도록 solution 함수를 완성하세요.


제한사항

  • 3 ≤ number의 길이 ≤ 13
  • 1,000 ≤ number의 각 원소 ≤ 1,000
  • 서로 다른 학생의 정수 번호가 같을 수 있습니다.

입출력 예

[-2, 3, 0, 2, -5] 2
[-3, -2, -1, 0, 1, 2, 3] 5
[-1, 1, -1, 1] 0

number result


입출력 예 설명

입출력 예 #1

  • 문제 예시와 같습니다.

입출력 예 #2

  • 학생들의 정수 번호 쌍 (-3, 0, 3), (-2, 0, 2), (-1, 0, 1), (-2, -1, 3), (-3, 1, 2) 이 삼총사가 될 수 있으므로, 5를 return 합니다.

입출력 예 #3

  • 삼총사가 될 수 있는 방법이 없습니다.

기본 코드

#include <string>
#include <vector>

using namespace std;

int solution(vector<int> number) {
    int answer = 0;
    return answer;
}

힌트

  • 3중 for 문
  • i < j < k
  • number.size()

문제 풀이 과정

문제 나누기

  1. 3중 for 문: (i, j, k) 세 인덱스를 사용하여 서로 다른 세 학생을 선택합니다. 이때 (i < j < k) 순서로 탐색하여 중복 조합을 피합니다.
  2. 합 계산: 선택한 세 학생의 번호 합 number[i] + number[j] + number[k]가 0인지 확인합니다.
  3. 카운트: 합이 0일 때마다 answer를 1씩 증가시킵니다.
  4. 복잡도: (N)이 최대 13이므로 (O(N^3))의 시간 복잡도로도 충분히 제한 시간 내에 해결할 수 있습니다

문제 해석

  1. 왜 3중 반복문(For loop)을 사용하나요?

배열에서 서로 다른 3명의 학생을 뽑아야 하기 때문입니다.

  • 첫 번째 학생의 위치를 가리키는 포인터 i
  • 두 번째 학생의 위치를 가리키는 포인터 j
  • 세 번째 학생의 위치를 가리키는 포인터 k

이 세 개의 포인터를 겹치지 않게 나란히 배치하여 배열 전체를 훑는 방식입니다.


  1. 인덱스 범위의 비밀 (n - 2, n - 1)

코드의 for문 조건을 보면 반복 범위가 각각 다르게 설정되어 있습니다.

for (int i = 0; i < n - 2; ++i) {      // i는 뒤에 최소 2칸이 남아야 함
    for (int j = i + 1; j < n - 1; ++j) {  // j는 i 다음부터, 뒤에 최소 1칸이 남아야 함
        for (int k = j + 1; k < n; ++k) {  // k는 j 다음부터, 배열 끝까지

만약 배열의 길이가 5라면 (n = 5), 마지막으로 뽑을 수 있는 최후의 조합은 인덱스 [2, 3, 4]입니다.

  • i가 배열의 끝까지 가버리면 j와 k가 뽑을 공간이 없어집니다.
  • 따라서 i는 끝에서 3번째 자리(n-3)까지만 가도록 i < n - 2로 제한합니다.
  • 같은 원리로 j는 끝에서 2번째 자리(n-2)까지만 가도록 j < n - 1로 제한합니다.

이 구조 덕분에 중복 없이 항상 i < j < k 순서가 보장되어, 같은 학생 조합을 중복해서 세지 않습니다.


  1. 예시 동작 시뮬레이션 ([-2, 3, 0, 2, -5])

이 배열에서 3중 loop가 어떻게 돌아가는지 앞부분만 추적해 보겠습니다.

  • Step 1: i = 0 (값: -2) 일 때
    • j = 1 (값: 3) 이 선택됨
      • k = 2 (값: 0) (\rightarrow ) 2 + 3 + 0 = 1 (X)
      • k = 3 (값: 2) (\rightarrow ) 2 + 3 + 2 = 3 (X)
      • k = 4 (값: -5) (\rightarrow ) 2 + 3 + (-5) = -4 (X)
    • j = 2 (값: 0) 으로 넘어감
      • k = 3 (값: 2) (\rightarrow ) 2 + 0 + 2 = 0 (\rightarrow ) 삼총사 발견! (answer++)
      • k = 4 (값: -5) (\rightarrow ) 2 + 0 + (-5) = -7 (X)
    • j = 3 (값: 2) 으로 넘어감
      • k = 4 (값: -5) (\rightarrow ) 2 + 2 + (-5) = -5 (X)
  • Step 2: i = 1 (값: 3) 일 때
    • 위와 같은 방식으로 j는 2부터, k는 3부터 시작하여 모든 조합을 찾습니다.
    • 이 과정 중 i = 1 (3), j = 3 (2), k = 4 (-5) 일 때 3 + 2 + (-5) = 0이 되어 두 번째 삼총사를 찾게 됩니다.

  1. 성능 분석 (효율성)
  • 시간 복잡도: (O(N^3))
    • 학생 수 (N)명 중 3명을 순서 없이 고르는 조합의 가짓수는 N x (N-1) x (N-2) / 3x2x1 입니다.
    • 문제 제한 사항에서 (N)의 최댓값이 13으로 매우 작습니다.
    • 13명 중 3명을 고르는 경우의 수는 최대 286가지 밖에 되지 않습니다.
    • 컴퓨터는 1초에 약 1억 번의 연산을 하므로, 286번의 연산은 0.00001초도 걸리지 않고 통과합니다.

이처럼 데이터가 적을 때는 코드가 직관적이고 버그 발생 확률이 낮은 **3중 반복문(완전 탐색)**이 가장 좋은 해결책입니다.


정답 소스 코드

#include <string>
#include <vector>

using namespace std;

int solution(vector<int> number) {
    int answer = 0;

    int n = number.size();

    for (int i = 0; i < n - 2; i++)
    {
        for (int j = i + 1; j < n - 1; j++)
        {
            for (int k = j + 1; k < n; k++)
            {
                if (number[i] + number[j] + number[k] == 0)
                {
                    answer++;
                }
            }
        }
    }

    return answer;
}

Comments:

  • 문제를 풀면서 3중 포문을 써야하는 것 까지는 감이 왔는데 30분간을 고민하다 안풀려서 결국 답을 봤다.
  • 쉬운거 같으면서 아직도 정확하게 인지가 안된거 같다 추후 다시 풀어보자.
  • ? 그런데 이런 3중 포문을 실제 코딩 테스트에서 쓰이나 혹은 3중 포문은 나만 헷갈리는 건가...

 

추천글

 

게임국가기술자격검정 게임프로그래밍전문가 [한국콘텐츠진흥원] | 종합

 

게임국가기술자격검정 게임프로그래밍전문가 [한국콘텐츠진흥원] | 종합

About this Certification 홈페이지: https://www.kgq.or.kr/service/main.do검정안내: https://www.kgq.or.kr/service/info/cert.do국가기술자격증 (유효기간 없음)Since 2003시험일정 : https://www.kgq.or.kr/service/rcpt/sc_list.do원서접

devcol.tistory.com

 

  • Part 1 : 2025 게임 프로그래밍 전문가 국가기술 자격검정 필기시험 B 풀이 | Part1. 게임 프로그래밍 방법론: 1~25 | 게임국가기술자격검정 게임프로그래밍전문가 [한국콘텐츠진흥원]
  • Part 2 : Part2. 게임 알고리즘과 설계: 1~25 | 2025 게임 프로그래밍 전문가 국가기술 자격검정 필기시험 B 풀이 | 게임국가기술자격검정 게임프로그래밍전문가 [한국콘텐츠진흥원]
  • Part 3: Part3. 게임 알고리즘과 설계: 1~25 | 2025 게임 프로그래밍 전문가 국가기술 자격검정 필기시험 B 풀이 | 게임국가기술자격검정 게임프로그래밍전문가 [한국콘텐츠진흥원]
저작자표시 동일조건 (새창열림)
'TIL' 카테고리의 다른 글
  • 코드 카타 (Code Kata) : 명예의 전당, 2016 | 달력 문제 정리 | TIL 28th | 05/31/2026 (Sun)
  • 필기시험 개념 공부 | Code Kata [크기가 작은 부분문자열, 최소직사각형] | TIL 23th | 캠프 17일 차 | 05/14/2026 (Thur)
  • 2025 게임 프로그래밍 전문가 국가기술 자격검정 필기시험 B, Part1 풀이 & 해석 | Code Kata: 이상한 문자 만들기 | TIL 21th | 캠프 15일 차 | 05/12/2026 (Tue)
  • Code Kata [문자열 다루기 기본, 행렬의 덧셈, 부족한 금액 계산하기, 문자열 내림차순으로 배치하기] | TIL 20th | 05/09/2026 (Sat)
DevCol
DevCol
DevCol (Development Collaboration). 함께 개발 & 공부 & IT 정보 나눔장소
  • DevCol
    DevCol (Development Collaboration)
    DevCol
  • 블로그 메뉴

    • Unreal Engine
    • TIL
    • 게임국가기술자격검정 게임프로그래밍전문가 [한국콘텐츠진흥원]
    • 분류 전체보기 (73) N
      • Unreal Engine (31) N
        • Project (2) N
        • Dev Log (0)
        • Debugging (2) N
        • Blueprint (1)
        • UE 기초 (25) N
        • UE 심화 (0)
        • TA (1) N
      • Programming Language (0)
        • C++ (0)
        • C# (0)
      • Unity Engine (0)
      • 자격증 (3)
        • 게임국가기술자격검정 [한국콘텐츠진흥원] (3)
      • Coding Test | 코딩테스트 (0)
        • 프로그래머스 기초 (0)
        • 프로그래머스 입문 (0)
      • TIL (38) N
        • Boot Camp (32) N
      • Git & Github (1)
  • 링크

    • Youtube
    • GitHub
    • itch.io
    • Blog (En)
  • 공지사항

  • 인기 글

  • 태그

    코드 카타
    UE
    Unreal engine
    게임개발
    Code Kata
    C++
    게임 개발
    Boot Camp
    Game Dev
    UE5
    코드카타
    cpp
    기초
    내일배움캠프
    Programming
    Devlog
    til
    프로그래밍
    c
    언리얼 엔진
  • 최근 글

  • GitHub Youtube itch
  • hELLO · Designed By 정상우.v4.10.6
  • DevCol
    필기시험 B part 2 & 3 | Code Kata: 삼총사 | TIL 22th | 캠프 16일 차 | 05/13/2026 (Wed)
    상단으로

    티스토리툴바