풀 이
F. 야바위 대장
• 작성자: 이영훈(940723)
• 푼 사람: 17팀 중 17팀
• 정답률: 73.3%
• First Solve: <Human_Soldier_ROTC>팀 (7분)
F. 야바위 대장
• 배열 swap 문제
• C언어 수업에 나옵니다.
E. 너의 이름은 몇 점이니?
• 작성자: 정승균(wjdtmdrbs88)
• 푼 사람: 17팀 중 17팀
• 정답률: 84.0%
• First Solve: <어벤져스>팀 (3분)
E. 너의 이름은 몇 점이니?
• 반복문을 잘 사용하여, N개의 문자를 입력 받아
그 문자의 값을 더해주면 된다.
C. 복면산?!
• 작성자: 윤준하(joonas)
• 푼 사람: 17팀 중 0팀
• 정답률: 0.00%
• First Solve:
C. 복면산?!
• Brute Force(브루트포스) 문제
• A~Z 각 알파벳을 0~9 숫자들에 하나씩 대응시켜봅니다.
• 26개 중 10개를 선택하는 조합 문제입니다.
• 𝐶𝐶 𝑛𝑛, 𝑟𝑟 = 𝐶𝐶 26, 10 = 5,311,735 가지
• DFS 등의 탐색으로 해결할 수 있습니다.
C. 복면산?!
D E M N O R S Y
0 1 2 3 4 5 6 7
0 1 2 3 4 5 6 8
0 1 2 3 4 5 6 9
0 1 2 3 4 5 7 6
0 1 2 3 4 5 7 8
0 1 2 3 4 5 7 9
0 1 2 3 4 6 5 7
0 1 2 3 4 6 5 8
…
SEND + MORE = MONEY → 등장하는 문자만 사용: DEMNORSY
C. 복면산?!
D E M N O R S Y
…
9 8 7 6 5 3 4 1
9 8 7 6 5 3 4 2
9 8 7 6 5 4 1 2
9 8 7 6 5 4 1 3
9 8 7 6 5 4 2 1
9 8 7 6 5 4 2 3
9 8 7 6 5 4 3 1
9 8 7 6 5 4 3 2
SEND + MORE = MONEY → 등장하는 문자만 사용: DEMNORSY
C. 복면산?!
D E M N O R S Y
9 8 7 6 5 4 1 2
각 조합에 대해 하나씩 확인
SEND + MORE = MONEY
→ 1869 + 7548 ≠ 75682
정답을 발견하면 YES를 출력하고 프로그램 종료
G. 천재 수학자 성필
• 작성자: 조나단(zxcv859500)
• 푼 사람: 17팀 중 4팀
• 정답률: 9.5%
• First Solve: <433_villian>팀 (40분)
G. 천재 수학자 성필
• 스택을 사용하는 후위표기식 문제입니다.
• 중위표기식과 달리 우선순위를 고려할 필요가 없습니다.
1. 피연산자(숫자)를 스택에 쌓은 후,
2. 연산자를 만나면 스택에 쌓인 2개의 숫자를 계산하여 다시 스택에 쌓습니다.
3. 1번과 2번을 반복합니다.
D. 침략자 진아
• 작성자: 정승균(wjdtmdrbs88)
• 푼 사람: 17팀 중 0팀
• 정답률: 0.00%
• First Solve:
D. 침략자 진아
• 모든 두 곳을 선택한 후, 각 후보들에 대해 완전탐색으로 최소 시간을 구하는 문제
• 지도의 크기가 작기 때문에 가능한 모든 쌍에서 너비우선탐색(BFS)이 가능하다.
• 집이 아닌 모든 빈 공간의 위치를 구조체 또는 2개의 배열로 y, x를 담은 후
그 좌표들로 2중 for문을 통해 모든 쌍을 선택할 수 있다.
B. 풍선 공장
• 작성자: 윤준하(joonas)
• 푼 사람: 17팀 중 2팀
• 정답률: 2.00%
• First Solve: <Human_Soldier_ROTC>팀 (124분)
B. 풍선 공장
• 최소 시간이 X일 때, 풍선 M개를 만들 수 있는 지?
• 최소 시간 X에 만들어진 풍선 개수가 부족하면, 시간이 더 필요합니다.
• 반대로 풍선이 너무 많으면, 시간을 줄입니다.
• M개 이상을 만드는 최소 시간 X를 이분 탐색으로 빠르게 찾을 수 있습니다.
• 비슷한 문제: 2017 CNUPC - 파닭파닭
A. 전국 시대
• 작성자: 이강민(yukariko)
• 푼 사람: 17팀 중 3팀
• 정답률: 9.1%
• First Solve: <EMP>팀 (149분)
A. 전국 시대
• 여러 나라들이 동맹하고 전쟁하였을 때
남는 국가와 그 국가의 병사의 수를 구하는 문제
• 동맹을 맺은 국가, 전쟁 후의 남은 국가를
하나의 국가로 묶어서 취급하면 쉬워짐
• 어떤 국가 x를 가지고 동맹으로 묶인 국가를
빠르게 구할 수 있어야 함
1
2
3
5
6
7
4
A. 전국 시대
• 여러 나라들이 동맹하고 전쟁하였을 때
남는 국가와 그 국가의 병사의 수를 구하는 문제
• 동맹을 맺은 국가, 전쟁 후의 남은 국가를
하나의 국가로 묶어서 취급하면 쉬워짐
• 어떤 국가 x를 가지고 동맹으로 묶인 국가를
빠르게 구할 수 있어야 함
1
2
3
4
5
6
7
A. 전국 시대
• 각 국가를 정점으로, 동맹 혹은 전쟁 관계를
간선으로 나타내면 그래프가 형성됨
• Union-find 자료구조를 통해 정점을
하나의 관계로 빠르게 묶을 수 있음
• 마지막에 남은 병사의 수를 정렬
• 시간복잡도 : 𝑂𝑂(𝑁𝑁𝑁𝑁 𝑁𝑁 𝑁𝑁)
1
2
3
4
5
6
7
I. 배수 공사
• 작성자: 윤준하(joonas)
• 푼 사람: 17팀 중 0팀
• 정답률: 0.00%
• First Solve:
I. 배수 공사
• 동전 DP 문제
• n가지 종류의 동전과,
그 개수가 주어졌을 때
금액 X를 만드는 방법의 수
H. 퀘스트 중인 모험가
• 작성자: 이강민(yukariko)
• 푼 사람: 17팀 중 0팀
• 정답률: 0.00%
• First Solve:
H. 퀘스트 중인 모험가
• 달성한 퀘스트 목록 중,
퀘스트 번호가 특정 범위에 달성하지 못한 퀘스트들의 수를 구하는 문제
• 매번 모든 퀘스트를 계산한다면 시간초과가 발생
2 6 98 5 1
H. 퀘스트 중인 모험가
• 퀘스트 번호들이 정렬되어 있다면?
• 양 끝 범위를 이진탐색하여 빠르게 구간을 구할 수 있음
2 5 91 6 8
H. 퀘스트 중인 모험가
• 퀘스트 번호들이 정렬되어 있다면?
• 양 끝 범위를 이진탐색하여 빠르게 구간을 구할 수 있음
• 그러나 중간 중간에 퀘스트가 추가되므로 매번 정렬하게 되면 시간초과
2 5 91 6 8
4 3
H. 퀘스트 중인 모험가
• 만약 미래에 달성하게 되는 퀘스트 번호들을 미리 알고 있다면?
• 미리 배열에 넣어놓고 정렬이 가능
4 5 93 6 821
H. 퀘스트 중인 모험가
• 하지만 아직 달성하기 전에 퀘스트 개수를 구하는 명령이 들어온다면
그 퀘스트는 제외해야 함
• 어떻게 처리할 수 있을까?
4 5 93 6 821
H. 퀘스트 중인 모험가
• 현재까지 달성한 퀘스트의 상태를 1,
아직 달성하지 못한 퀘스트의 상태를 0 이라고 하자
• 1과 0으로 이루어진 새로운 배열을 얻을 수 있음
4 5 93 6 821
0 1 10 1 111
H. 퀘스트 중인 모험가
• 현재까지 달성한 퀘스트의 상태를 1,
아직 달성하지 못한 퀘스트의 상태를 0 이라고 하자
• 1과 0으로 이루어진 새로운 배열을 얻을 수 있음
• 이제 특정 범위안에 있는 수들의 합을 구해준다면 답을 구할 수 있음
4 5 93 6 821
0 1 10 1 111
3
H. 퀘스트 중인 모험가
• 이제 특정 범위안에 있는 수들의 합을 구해준다면 답을 구할 수 있음
• 추후에 퀘스트를 달성한 경우는 0을 1로 바꿔주면 됨
• 어떻게하면 수들의 합을 빠르게 구할 수 있을까?
• 구간 트리 (세그먼트 트리)
4 5 93 6 821
0 1 11 1 111
4
• 1과 0으로 이루어진 수를 리프 노드로 하는 이진 트리를 구성
• 부모 노드는 자식 노드들의 합을 저장
H. 퀘스트 중인 모험가
1 1 1111 10
2 1 2 2
2 4
6
• 1과 0으로 이루어진 수를 리프 노드로 하는 이진 트리를 구성
• 부모 노드는 자식 노드들의 합을 저장
• 범위 안의 수들의 합은 서브 트리를 타고 내려 가는 것으로 구할 수 있음
• 특정 범위의 합을 구하는데 걸리는 시간복잡도
• 𝑂𝑂 𝑁𝑁𝑁𝑁 𝑁𝑁 𝑁𝑁 → 𝑂𝑂(𝑙𝑙𝑙𝑙𝑙𝑙)
H. 퀘스트 중인 모험가
1 1 1111 10
2 1 2 2
2 4
6
• 퀘스트를 달성했을 때 1로 바꿔주는 작업도 빠르게 가능
• 시간복잡도
• 𝑂𝑂 𝑙𝑙𝑙𝑙𝑙𝑙
• 따라서 M개의 요청을 모두 처리하는 시간복잡도
• 𝑂𝑂 𝑀𝑀𝑙𝑙𝑙𝑙𝑙𝑙
H. 퀘스트 중인 모험가
1 1 1111 11
2 2 2 2
4 4
8
모두
수고하셨습니다.

2018 cnupc solution

  • 1.
  • 2.
    F. 야바위 대장 •작성자: 이영훈(940723) • 푼 사람: 17팀 중 17팀 • 정답률: 73.3% • First Solve: <Human_Soldier_ROTC>팀 (7분)
  • 3.
    F. 야바위 대장 •배열 swap 문제 • C언어 수업에 나옵니다.
  • 4.
    E. 너의 이름은몇 점이니? • 작성자: 정승균(wjdtmdrbs88) • 푼 사람: 17팀 중 17팀 • 정답률: 84.0% • First Solve: <어벤져스>팀 (3분)
  • 5.
    E. 너의 이름은몇 점이니? • 반복문을 잘 사용하여, N개의 문자를 입력 받아 그 문자의 값을 더해주면 된다.
  • 6.
    C. 복면산?! • 작성자:윤준하(joonas) • 푼 사람: 17팀 중 0팀 • 정답률: 0.00% • First Solve:
  • 7.
    C. 복면산?! • BruteForce(브루트포스) 문제 • A~Z 각 알파벳을 0~9 숫자들에 하나씩 대응시켜봅니다. • 26개 중 10개를 선택하는 조합 문제입니다. • 𝐶𝐶 𝑛𝑛, 𝑟𝑟 = 𝐶𝐶 26, 10 = 5,311,735 가지 • DFS 등의 탐색으로 해결할 수 있습니다.
  • 8.
    C. 복면산?! D EM N O R S Y 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 8 0 1 2 3 4 5 6 9 0 1 2 3 4 5 7 6 0 1 2 3 4 5 7 8 0 1 2 3 4 5 7 9 0 1 2 3 4 6 5 7 0 1 2 3 4 6 5 8 … SEND + MORE = MONEY → 등장하는 문자만 사용: DEMNORSY
  • 9.
    C. 복면산?! D EM N O R S Y … 9 8 7 6 5 3 4 1 9 8 7 6 5 3 4 2 9 8 7 6 5 4 1 2 9 8 7 6 5 4 1 3 9 8 7 6 5 4 2 1 9 8 7 6 5 4 2 3 9 8 7 6 5 4 3 1 9 8 7 6 5 4 3 2 SEND + MORE = MONEY → 등장하는 문자만 사용: DEMNORSY
  • 10.
    C. 복면산?! D EM N O R S Y 9 8 7 6 5 4 1 2 각 조합에 대해 하나씩 확인 SEND + MORE = MONEY → 1869 + 7548 ≠ 75682 정답을 발견하면 YES를 출력하고 프로그램 종료
  • 11.
    G. 천재 수학자성필 • 작성자: 조나단(zxcv859500) • 푼 사람: 17팀 중 4팀 • 정답률: 9.5% • First Solve: <433_villian>팀 (40분)
  • 12.
    G. 천재 수학자성필 • 스택을 사용하는 후위표기식 문제입니다. • 중위표기식과 달리 우선순위를 고려할 필요가 없습니다. 1. 피연산자(숫자)를 스택에 쌓은 후, 2. 연산자를 만나면 스택에 쌓인 2개의 숫자를 계산하여 다시 스택에 쌓습니다. 3. 1번과 2번을 반복합니다.
  • 13.
    D. 침략자 진아 •작성자: 정승균(wjdtmdrbs88) • 푼 사람: 17팀 중 0팀 • 정답률: 0.00% • First Solve:
  • 14.
    D. 침략자 진아 •모든 두 곳을 선택한 후, 각 후보들에 대해 완전탐색으로 최소 시간을 구하는 문제 • 지도의 크기가 작기 때문에 가능한 모든 쌍에서 너비우선탐색(BFS)이 가능하다. • 집이 아닌 모든 빈 공간의 위치를 구조체 또는 2개의 배열로 y, x를 담은 후 그 좌표들로 2중 for문을 통해 모든 쌍을 선택할 수 있다.
  • 15.
    B. 풍선 공장 •작성자: 윤준하(joonas) • 푼 사람: 17팀 중 2팀 • 정답률: 2.00% • First Solve: <Human_Soldier_ROTC>팀 (124분)
  • 16.
    B. 풍선 공장 •최소 시간이 X일 때, 풍선 M개를 만들 수 있는 지? • 최소 시간 X에 만들어진 풍선 개수가 부족하면, 시간이 더 필요합니다. • 반대로 풍선이 너무 많으면, 시간을 줄입니다. • M개 이상을 만드는 최소 시간 X를 이분 탐색으로 빠르게 찾을 수 있습니다. • 비슷한 문제: 2017 CNUPC - 파닭파닭
  • 17.
    A. 전국 시대 •작성자: 이강민(yukariko) • 푼 사람: 17팀 중 3팀 • 정답률: 9.1% • First Solve: <EMP>팀 (149분)
  • 18.
    A. 전국 시대 •여러 나라들이 동맹하고 전쟁하였을 때 남는 국가와 그 국가의 병사의 수를 구하는 문제 • 동맹을 맺은 국가, 전쟁 후의 남은 국가를 하나의 국가로 묶어서 취급하면 쉬워짐 • 어떤 국가 x를 가지고 동맹으로 묶인 국가를 빠르게 구할 수 있어야 함 1 2 3 5 6 7 4
  • 19.
    A. 전국 시대 •여러 나라들이 동맹하고 전쟁하였을 때 남는 국가와 그 국가의 병사의 수를 구하는 문제 • 동맹을 맺은 국가, 전쟁 후의 남은 국가를 하나의 국가로 묶어서 취급하면 쉬워짐 • 어떤 국가 x를 가지고 동맹으로 묶인 국가를 빠르게 구할 수 있어야 함 1 2 3 4 5 6 7
  • 20.
    A. 전국 시대 •각 국가를 정점으로, 동맹 혹은 전쟁 관계를 간선으로 나타내면 그래프가 형성됨 • Union-find 자료구조를 통해 정점을 하나의 관계로 빠르게 묶을 수 있음 • 마지막에 남은 병사의 수를 정렬 • 시간복잡도 : 𝑂𝑂(𝑁𝑁𝑁𝑁 𝑁𝑁 𝑁𝑁) 1 2 3 4 5 6 7
  • 21.
    I. 배수 공사 •작성자: 윤준하(joonas) • 푼 사람: 17팀 중 0팀 • 정답률: 0.00% • First Solve:
  • 22.
    I. 배수 공사 •동전 DP 문제 • n가지 종류의 동전과, 그 개수가 주어졌을 때 금액 X를 만드는 방법의 수
  • 23.
    H. 퀘스트 중인모험가 • 작성자: 이강민(yukariko) • 푼 사람: 17팀 중 0팀 • 정답률: 0.00% • First Solve:
  • 24.
    H. 퀘스트 중인모험가 • 달성한 퀘스트 목록 중, 퀘스트 번호가 특정 범위에 달성하지 못한 퀘스트들의 수를 구하는 문제 • 매번 모든 퀘스트를 계산한다면 시간초과가 발생 2 6 98 5 1
  • 25.
    H. 퀘스트 중인모험가 • 퀘스트 번호들이 정렬되어 있다면? • 양 끝 범위를 이진탐색하여 빠르게 구간을 구할 수 있음 2 5 91 6 8
  • 26.
    H. 퀘스트 중인모험가 • 퀘스트 번호들이 정렬되어 있다면? • 양 끝 범위를 이진탐색하여 빠르게 구간을 구할 수 있음 • 그러나 중간 중간에 퀘스트가 추가되므로 매번 정렬하게 되면 시간초과 2 5 91 6 8 4 3
  • 27.
    H. 퀘스트 중인모험가 • 만약 미래에 달성하게 되는 퀘스트 번호들을 미리 알고 있다면? • 미리 배열에 넣어놓고 정렬이 가능 4 5 93 6 821
  • 28.
    H. 퀘스트 중인모험가 • 하지만 아직 달성하기 전에 퀘스트 개수를 구하는 명령이 들어온다면 그 퀘스트는 제외해야 함 • 어떻게 처리할 수 있을까? 4 5 93 6 821
  • 29.
    H. 퀘스트 중인모험가 • 현재까지 달성한 퀘스트의 상태를 1, 아직 달성하지 못한 퀘스트의 상태를 0 이라고 하자 • 1과 0으로 이루어진 새로운 배열을 얻을 수 있음 4 5 93 6 821 0 1 10 1 111
  • 30.
    H. 퀘스트 중인모험가 • 현재까지 달성한 퀘스트의 상태를 1, 아직 달성하지 못한 퀘스트의 상태를 0 이라고 하자 • 1과 0으로 이루어진 새로운 배열을 얻을 수 있음 • 이제 특정 범위안에 있는 수들의 합을 구해준다면 답을 구할 수 있음 4 5 93 6 821 0 1 10 1 111 3
  • 31.
    H. 퀘스트 중인모험가 • 이제 특정 범위안에 있는 수들의 합을 구해준다면 답을 구할 수 있음 • 추후에 퀘스트를 달성한 경우는 0을 1로 바꿔주면 됨 • 어떻게하면 수들의 합을 빠르게 구할 수 있을까? • 구간 트리 (세그먼트 트리) 4 5 93 6 821 0 1 11 1 111 4
  • 32.
    • 1과 0으로이루어진 수를 리프 노드로 하는 이진 트리를 구성 • 부모 노드는 자식 노드들의 합을 저장 H. 퀘스트 중인 모험가 1 1 1111 10 2 1 2 2 2 4 6
  • 33.
    • 1과 0으로이루어진 수를 리프 노드로 하는 이진 트리를 구성 • 부모 노드는 자식 노드들의 합을 저장 • 범위 안의 수들의 합은 서브 트리를 타고 내려 가는 것으로 구할 수 있음 • 특정 범위의 합을 구하는데 걸리는 시간복잡도 • 𝑂𝑂 𝑁𝑁𝑁𝑁 𝑁𝑁 𝑁𝑁 → 𝑂𝑂(𝑙𝑙𝑙𝑙𝑙𝑙) H. 퀘스트 중인 모험가 1 1 1111 10 2 1 2 2 2 4 6
  • 34.
    • 퀘스트를 달성했을때 1로 바꿔주는 작업도 빠르게 가능 • 시간복잡도 • 𝑂𝑂 𝑙𝑙𝑙𝑙𝑙𝑙 • 따라서 M개의 요청을 모두 처리하는 시간복잡도 • 𝑂𝑂 𝑀𝑀𝑙𝑙𝑙𝑙𝑙𝑙 H. 퀘스트 중인 모험가 1 1 1111 11 2 2 2 2 4 4 8
  • 35.