SlideShare a Scribd company logo
SOLUTION
A. 전북대학교
* * * * *
_ _ *
_ * _ *
* _ _ _ *
* * * * * * *
_ _ _ *
_ _ *_ *
_ *_ _ _ *
*_ _ _ _ _ *
2
1
1
3
3
2
1
1
3
5
<CASE 5> <CASE 7>
N/2
2*i-1
N
i
0
1
2
3
i>0
B. 냉동식품
1. 시간을 시뮬레이션 한다.
시작H : 시작M ~ 종료H : 종료M
2. 각각의 시간과 분을 검사한다.
H:M정수 > 문자열 변환, 각각의 문자를 비교
3. 찾는 숫자 N과 같으면 COUNT 증가
C. ISBN
1. 훼손된 번호 부분(X)을 제외한 값에 각각의
가중치(1 혹은 3)를 곱해 합을 구한다.
2. M = 10 – (X 자리의 가중치 * N + 합)%10
3. 알맞은 M이 나올 때까지 N의 값을 증가시키
며 N를 찾는다.
D. 파닭파닭
이분탐색(Binary Search) 문제
1. 파닭에 넣을 수 있는 파의 최대길이를 구해서
남은 파의 양을 구하는 문제
2. 쉬운 풀이 : 1cm 부터 다 잘라보면서 시도
시간 복잡도 : O(SL) -> 시간초과!
D. 파닭파닭
이분탐색(Binary Search) 문제
1. 자르는 파의 길이가 짧아질수록 만들 수 있는
파닭의 개수가 증가함
2. 이진탐색을 적용할 수 있다!
3. 자르는 파의 길이에 대해 이진탐색
시간 복잡도 : O(SlgL)
E. 입 챌린저
• 스킬을 한 번씩 사용하면서 모든 경우를 시뮬레이션
• 필요한 정보
– 모든 스킬의 사용 횟수
– 현재 체력
• 스킬을 사용하는 순서를 고정하면?
– 지금 사용할 스킬 & 현재 체력
E. 입 챌린저
• 지금 사용할 스킬과 현재 체력으로 구할 수 있는 최소값은
이전의 선택이 영향을 미치지 않음
• DP식이 성립
• D[pos][hp] = pos번째 스킬부터 시작하여 체력 hp를 0으
로 만들때 드는 마나 비용의 최소값
E. 입 챌린저
• D[pos][hp] = pos번째 스킬부터 시작하여 체력 hp를 0으로 만
들때 드는 마나 비용의 최소값
• D[pos][hp] = min {
mana[pos] + D[pos + 1][hp – deal[pos]],
mana[pos] * 2 + K + D[pos + 1][hp – deal[pos] * 2],
…
}
• 시간 복잡도 : O(NM^ 2)
F. 숫자 조각
• 0~9의 숫자를 한 번만 사용해서 만든 숫자 중 N하고 가장 가까운
숫자를 찾는 문제
• 완전탐색
– 모든 숫자를 직접 구해서 직접 비교
– 시간 복잡도 : O(digit!)
F. 숫자 조각
• 규칙성
– 맨 앞자리부터 N과 똑같이 숫자를 만들어가면서 불가능한 위치를 찾음
– 불가능한 위치의 숫자를 1 더하거나 1 빼는것이 가장 가까운 수
– 그 뒤는 남은 수들로 가장 크게 만들어주거나 가장 작게 만들어줌
– Ex) 44223344
• 45012367
• 43987652
• 둘 중 더 가까운걸 선택
– 자리수를 한자리 늘려보거나 줄여보고 체크
• 시간 복잡도 : O(lgN)
G. 변신로봇
• 변신을 거듭하면서 원하는 상태를 만드는 가장 적은 비용을 찾는
문제
• 변신의 상태를 정점, 변신에 필요한 비용을 간선으로
• 정점에서 정점으로 가는 최단경로를 구하는 문제
• 다익스트라!
G. 변신로봇
• 전처리로 완전 그래프를 구성해주어야 함
– 시간초과 발생가능
– 무향 그래프이므로 전처리의 반복 횟수를 반으로 줄일 수 있음
• 시간 복잡도 : O(N^2lgN + N^2K) (N : 변신 상태 수, K : 부품길
이)
H. 명탐정 준하
• 모든 미술관과 흔적을 방문할 때 걸리는 최소 거리를 구하는 문제
• 각 좌표마다 이동거리는 항상 1로 같으므로 BFS로 해결
• 그래프 모델링
– 현재 위치, 지금까지 방문한 좌표들, 다음 방문할 미술관 번호를 정점으로
– 방문한 좌표는 bitmask를 사용!
– V[y][x][visit][no] => 4 * 5 * 2^20 * 20 ??
H. 명탐정 준하
• 지금까지 방문한 좌표를 알고 있으면 다음 방문할 미술관의 위치를
구할 수 있다
• V[y][x][visit][no] -> V[y][x][visit]!
• 4 * 5 * 2^20 * 20 -> 4 * 5 * 2^20
• 시간 복잡도 : O(yx2^(yx))
• 사실 이전의 모델로도 최적화를 잘 하면 정답을 받을 수 있다
– 테스트케이스 최적화
I. 고급작품
• N * M의 도화지에 K개의 도장을 Q번 찍었을 때 도화지의 상태를 출력하는 문제
• 그때그때 그대로 도장을 찍는 경우의 시간 복잡도 : O(KHW + QHW + NM)
• 시간초과!
I. 고급작품
• 도장을 찍는 순서를 반대로 생각해보자
– 이미 도장이 찍혀있는 곳은 더 이상 덧씌워지지 않음
– 반복 횟수를 줄일 기회!
I. 고급작품
• 도화지의 세로좌표마다 가로 좌표들을 연결리스트로 저장한다면?
1,1 1,2 1,3 1,4
2,1 2,2 2,3 2,4
I. 고급작품
• 도화지의 세로좌표마다 가로 좌표들을 연결리스트로 저장한다면?
– 한번 찍은 좌표를 삭제하면 더 이상 참조하지 않음
– 하지만 특정 좌표에 접근하는데 필요한 반복이 최대 M번
– 시간 복잡도 : O(KHW + QH + NM^2 + NM)
I. 고급작품
• 도화지의 세로좌표마다 가로 좌표들을 이진탐색트리로 저장한다면?
1,2
1,4
1,6
1,71,51,1 1,3
I. 고급작품
• 도화지의 세로좌표마다 가로 좌표들을 이진탐색트리로 저장한다면?
– C++의 경우 set
– 특정 좌표에 접근하는데 필요한 반복이 최대 lgM번
– 시간 복잡도 : O(KHW + QH + NMlgM + NM)
• 아쉽게도 이진탐색트리에 저장하는 데이터 수가 많아 시간초과
• 최적화 할 수 있을까?
I. 고급작품
• 도화지의 세로좌표마다 가로 좌표들을 범위로 저장한다면?
1,1~10
I. 고급작품
• 도화지의 세로좌표마다 가로 좌표들을 범위로 저장한다면?
– (1,3) ~ (1,8)에 도장 찍음
1,1~2
1,9~10
I. 고급작품
• 도화지의 세로좌표마다 가로 좌표들을 범위로 저장한다면?
– 여전히 이진탐색트리를 이용할 수 있음
– 이진탐색트리에 들어가는 데이터의 최대 수는 M / 2개
• 시간 복잡도 : O(KHW + QH + NMlgM + NM)

More Related Content

What's hot

정수론적 알고리즘 - Sogang ICPC Team, 2020 Winter
정수론적 알고리즘 - Sogang ICPC Team, 2020 Winter정수론적 알고리즘 - Sogang ICPC Team, 2020 Winter
정수론적 알고리즘 - Sogang ICPC Team, 2020 Winter
Suhyun Park
 
GameMath-Chapter 09 가시성판단
GameMath-Chapter 09 가시성판단GameMath-Chapter 09 가시성판단
GameMath-Chapter 09 가시성판단Mark Choi
 
BOJ11230
BOJ11230BOJ11230
BOJ11230
Bomm Kim
 
Canvas_basic tutorial
Canvas_basic tutorialCanvas_basic tutorial
Canvas_basic tutorial
fairesy
 
정보과학회 FTL논문 아이디어
정보과학회 FTL논문 아이디어정보과학회 FTL논문 아이디어
정보과학회 FTL논문 아이디어
Jaemyung Kim
 
On lisp ch18
On lisp ch18On lisp ch18
On lisp ch18
EunPyoung Kim
 
2021 1학기 정기 세미나 6주차
2021 1학기 정기 세미나 6주차2021 1학기 정기 세미나 6주차
2021 1학기 정기 세미나 6주차
Moonki Choi
 
2012 Dm A0 04 Pdf
2012 Dm A0 04 Pdf2012 Dm A0 04 Pdf
2012 Dm A0 04 Pdfkd19h
 
퍼시스턴트 세그먼트 트리 - Sogang ICPC Team, 2020 Winter
퍼시스턴트 세그먼트 트리 - Sogang ICPC Team, 2020 Winter퍼시스턴트 세그먼트 트리 - Sogang ICPC Team, 2020 Winter
퍼시스턴트 세그먼트 트리 - Sogang ICPC Team, 2020 Winter
Suhyun Park
 
[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제 풀이
[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제 풀이[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제 풀이
[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제 풀이
NAVER D2
 
Drawing with data
Drawing with dataDrawing with data
Drawing with data
Min Jeong Cho
 
Hash table
Hash tableHash table
Hash table
SeoYeong
 
자료구조05
자료구조05자료구조05
자료구조05
herojoon1378
 
2021 여름방학 정기 세미나 3주차
2021 여름방학 정기 세미나 3주차2021 여름방학 정기 세미나 3주차
2021 여름방학 정기 세미나 3주차
Moonki Choi
 
고급 시스템 프로그래밍
고급 시스템 프로그래밍고급 시스템 프로그래밍
고급 시스템 프로그래밍
junghee yu
 
Matlab gui
Matlab guiMatlab gui
Matlab gui
태훈 이
 
Trafficlight
TrafficlightTrafficlight
Trafficlight
Sangdurk Han
 
HI-ARC Number Theory
HI-ARC Number TheoryHI-ARC Number Theory
HI-ARC Number Theory
Jae-yeol Lee
 

What's hot (20)

정수론적 알고리즘 - Sogang ICPC Team, 2020 Winter
정수론적 알고리즘 - Sogang ICPC Team, 2020 Winter정수론적 알고리즘 - Sogang ICPC Team, 2020 Winter
정수론적 알고리즘 - Sogang ICPC Team, 2020 Winter
 
GameMath-Chapter 09 가시성판단
GameMath-Chapter 09 가시성판단GameMath-Chapter 09 가시성판단
GameMath-Chapter 09 가시성판단
 
BOJ11230
BOJ11230BOJ11230
BOJ11230
 
Canvas_basic tutorial
Canvas_basic tutorialCanvas_basic tutorial
Canvas_basic tutorial
 
정보과학회 FTL논문 아이디어
정보과학회 FTL논문 아이디어정보과학회 FTL논문 아이디어
정보과학회 FTL논문 아이디어
 
[Week4]canvas
[Week4]canvas[Week4]canvas
[Week4]canvas
 
On lisp ch18
On lisp ch18On lisp ch18
On lisp ch18
 
2021 1학기 정기 세미나 6주차
2021 1학기 정기 세미나 6주차2021 1학기 정기 세미나 6주차
2021 1학기 정기 세미나 6주차
 
2012 Dm A0 04 Pdf
2012 Dm A0 04 Pdf2012 Dm A0 04 Pdf
2012 Dm A0 04 Pdf
 
퍼시스턴트 세그먼트 트리 - Sogang ICPC Team, 2020 Winter
퍼시스턴트 세그먼트 트리 - Sogang ICPC Team, 2020 Winter퍼시스턴트 세그먼트 트리 - Sogang ICPC Team, 2020 Winter
퍼시스턴트 세그먼트 트리 - Sogang ICPC Team, 2020 Winter
 
[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제 풀이
[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제 풀이[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제 풀이
[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제 풀이
 
Drawing with data
Drawing with dataDrawing with data
Drawing with data
 
Hash table
Hash tableHash table
Hash table
 
자료구조05
자료구조05자료구조05
자료구조05
 
자료구조05
자료구조05자료구조05
자료구조05
 
2021 여름방학 정기 세미나 3주차
2021 여름방학 정기 세미나 3주차2021 여름방학 정기 세미나 3주차
2021 여름방학 정기 세미나 3주차
 
고급 시스템 프로그래밍
고급 시스템 프로그래밍고급 시스템 프로그래밍
고급 시스템 프로그래밍
 
Matlab gui
Matlab guiMatlab gui
Matlab gui
 
Trafficlight
TrafficlightTrafficlight
Trafficlight
 
HI-ARC Number Theory
HI-ARC Number TheoryHI-ARC Number Theory
HI-ARC Number Theory
 

Similar to 2017 cupc solution

Backtracking [ICPC Sinchon]
Backtracking [ICPC Sinchon]Backtracking [ICPC Sinchon]
Backtracking [ICPC Sinchon]
Jae-yeol Lee
 
[연세대 모르고리즘] 프로그래밍 경진대회 문제 풀이
[연세대 모르고리즘] 프로그래밍 경진대회 문제 풀이[연세대 모르고리즘] 프로그래밍 경진대회 문제 풀이
[연세대 모르고리즘] 프로그래밍 경진대회 문제 풀이
NAVER D2
 
IOI 2005 정원 분할 (2015.03.05)
IOI 2005 정원 분할 (2015.03.05)IOI 2005 정원 분할 (2015.03.05)
IOI 2005 정원 분할 (2015.03.05)
Jaehyun Koo
 
하스켈로 알고리즘 문제 풀기 2
하스켈로 알고리즘 문제 풀기 2하스켈로 알고리즘 문제 풀기 2
하스켈로 알고리즘 문제 풀기 2
민석 이
 
이산치3보고서
이산치3보고서이산치3보고서
이산치3보고서KimChangHoen
 
2018 Ajou Programming Contest solutions
2018 Ajou Programming Contest solutions2018 Ajou Programming Contest solutions
2018 Ajou Programming Contest solutions
현정 김
 
알고리즘 연합캠프 세미나 1-C (알고리즘 설계와 모델링 및 수학)
알고리즘 연합캠프 세미나 1-C (알고리즘 설계와 모델링 및 수학)알고리즘 연합캠프 세미나 1-C (알고리즘 설계와 모델링 및 수학)
알고리즘 연합캠프 세미나 1-C (알고리즘 설계와 모델링 및 수학)
HYUNJEONG KIM
 

Similar to 2017 cupc solution (7)

Backtracking [ICPC Sinchon]
Backtracking [ICPC Sinchon]Backtracking [ICPC Sinchon]
Backtracking [ICPC Sinchon]
 
[연세대 모르고리즘] 프로그래밍 경진대회 문제 풀이
[연세대 모르고리즘] 프로그래밍 경진대회 문제 풀이[연세대 모르고리즘] 프로그래밍 경진대회 문제 풀이
[연세대 모르고리즘] 프로그래밍 경진대회 문제 풀이
 
IOI 2005 정원 분할 (2015.03.05)
IOI 2005 정원 분할 (2015.03.05)IOI 2005 정원 분할 (2015.03.05)
IOI 2005 정원 분할 (2015.03.05)
 
하스켈로 알고리즘 문제 풀기 2
하스켈로 알고리즘 문제 풀기 2하스켈로 알고리즘 문제 풀기 2
하스켈로 알고리즘 문제 풀기 2
 
이산치3보고서
이산치3보고서이산치3보고서
이산치3보고서
 
2018 Ajou Programming Contest solutions
2018 Ajou Programming Contest solutions2018 Ajou Programming Contest solutions
2018 Ajou Programming Contest solutions
 
알고리즘 연합캠프 세미나 1-C (알고리즘 설계와 모델링 및 수학)
알고리즘 연합캠프 세미나 1-C (알고리즘 설계와 모델링 및 수학)알고리즘 연합캠프 세미나 1-C (알고리즘 설계와 모델링 및 수학)
알고리즘 연합캠프 세미나 1-C (알고리즘 설계와 모델링 및 수학)
 

More from Joona Yoon

원주율은 정말 모든 수를 담고 있을까. (Does pi have all positive numbers in it?)
원주율은 정말 모든 수를 담고 있을까. (Does pi have all positive numbers in it?)원주율은 정말 모든 수를 담고 있을까. (Does pi have all positive numbers in it?)
원주율은 정말 모든 수를 담고 있을까. (Does pi have all positive numbers in it?)
Joona Yoon
 
2019 cnupc solution
2019 cnupc solution2019 cnupc solution
2019 cnupc solution
Joona Yoon
 
2018 cnupc solution
2018 cnupc solution2018 cnupc solution
2018 cnupc solution
Joona Yoon
 
Speech translator
Speech translatorSpeech translator
Speech translator
Joona Yoon
 
Jcloud.ssh.linux.cli
Jcloud.ssh.linux.cliJcloud.ssh.linux.cli
Jcloud.ssh.linux.cli
Joona Yoon
 
Jcloud.creating.instance.student.2019.v2
Jcloud.creating.instance.student.2019.v2Jcloud.creating.instance.student.2019.v2
Jcloud.creating.instance.student.2019.v2
Joona Yoon
 
Jcloud.ssh.xshell2
Jcloud.ssh.xshell2Jcloud.ssh.xshell2
Jcloud.ssh.xshell2
Joona Yoon
 
Jcloud.ssh.putty
Jcloud.ssh.puttyJcloud.ssh.putty
Jcloud.ssh.putty
Joona Yoon
 
3d mine sweeper with unity 3d
3d mine sweeper with unity 3d3d mine sweeper with unity 3d
3d mine sweeper with unity 3d
Joona Yoon
 
Kinesis를 이용한 데이터 수집
Kinesis를 이용한 데이터 수집Kinesis를 이용한 데이터 수집
Kinesis를 이용한 데이터 수집
Joona Yoon
 

More from Joona Yoon (10)

원주율은 정말 모든 수를 담고 있을까. (Does pi have all positive numbers in it?)
원주율은 정말 모든 수를 담고 있을까. (Does pi have all positive numbers in it?)원주율은 정말 모든 수를 담고 있을까. (Does pi have all positive numbers in it?)
원주율은 정말 모든 수를 담고 있을까. (Does pi have all positive numbers in it?)
 
2019 cnupc solution
2019 cnupc solution2019 cnupc solution
2019 cnupc solution
 
2018 cnupc solution
2018 cnupc solution2018 cnupc solution
2018 cnupc solution
 
Speech translator
Speech translatorSpeech translator
Speech translator
 
Jcloud.ssh.linux.cli
Jcloud.ssh.linux.cliJcloud.ssh.linux.cli
Jcloud.ssh.linux.cli
 
Jcloud.creating.instance.student.2019.v2
Jcloud.creating.instance.student.2019.v2Jcloud.creating.instance.student.2019.v2
Jcloud.creating.instance.student.2019.v2
 
Jcloud.ssh.xshell2
Jcloud.ssh.xshell2Jcloud.ssh.xshell2
Jcloud.ssh.xshell2
 
Jcloud.ssh.putty
Jcloud.ssh.puttyJcloud.ssh.putty
Jcloud.ssh.putty
 
3d mine sweeper with unity 3d
3d mine sweeper with unity 3d3d mine sweeper with unity 3d
3d mine sweeper with unity 3d
 
Kinesis를 이용한 데이터 수집
Kinesis를 이용한 데이터 수집Kinesis를 이용한 데이터 수집
Kinesis를 이용한 데이터 수집
 

2017 cupc solution

  • 2. A. 전북대학교 * * * * * _ _ * _ * _ * * _ _ _ * * * * * * * * _ _ _ * _ _ *_ * _ *_ _ _ * *_ _ _ _ _ * 2 1 1 3 3 2 1 1 3 5 <CASE 5> <CASE 7> N/2 2*i-1 N i 0 1 2 3 i>0
  • 3. B. 냉동식품 1. 시간을 시뮬레이션 한다. 시작H : 시작M ~ 종료H : 종료M 2. 각각의 시간과 분을 검사한다. H:M정수 > 문자열 변환, 각각의 문자를 비교 3. 찾는 숫자 N과 같으면 COUNT 증가
  • 4. C. ISBN 1. 훼손된 번호 부분(X)을 제외한 값에 각각의 가중치(1 혹은 3)를 곱해 합을 구한다. 2. M = 10 – (X 자리의 가중치 * N + 합)%10 3. 알맞은 M이 나올 때까지 N의 값을 증가시키 며 N를 찾는다.
  • 5. D. 파닭파닭 이분탐색(Binary Search) 문제 1. 파닭에 넣을 수 있는 파의 최대길이를 구해서 남은 파의 양을 구하는 문제 2. 쉬운 풀이 : 1cm 부터 다 잘라보면서 시도 시간 복잡도 : O(SL) -> 시간초과!
  • 6. D. 파닭파닭 이분탐색(Binary Search) 문제 1. 자르는 파의 길이가 짧아질수록 만들 수 있는 파닭의 개수가 증가함 2. 이진탐색을 적용할 수 있다! 3. 자르는 파의 길이에 대해 이진탐색 시간 복잡도 : O(SlgL)
  • 7. E. 입 챌린저 • 스킬을 한 번씩 사용하면서 모든 경우를 시뮬레이션 • 필요한 정보 – 모든 스킬의 사용 횟수 – 현재 체력 • 스킬을 사용하는 순서를 고정하면? – 지금 사용할 스킬 & 현재 체력
  • 8. E. 입 챌린저 • 지금 사용할 스킬과 현재 체력으로 구할 수 있는 최소값은 이전의 선택이 영향을 미치지 않음 • DP식이 성립 • D[pos][hp] = pos번째 스킬부터 시작하여 체력 hp를 0으 로 만들때 드는 마나 비용의 최소값
  • 9. E. 입 챌린저 • D[pos][hp] = pos번째 스킬부터 시작하여 체력 hp를 0으로 만 들때 드는 마나 비용의 최소값 • D[pos][hp] = min { mana[pos] + D[pos + 1][hp – deal[pos]], mana[pos] * 2 + K + D[pos + 1][hp – deal[pos] * 2], … } • 시간 복잡도 : O(NM^ 2)
  • 10. F. 숫자 조각 • 0~9의 숫자를 한 번만 사용해서 만든 숫자 중 N하고 가장 가까운 숫자를 찾는 문제 • 완전탐색 – 모든 숫자를 직접 구해서 직접 비교 – 시간 복잡도 : O(digit!)
  • 11. F. 숫자 조각 • 규칙성 – 맨 앞자리부터 N과 똑같이 숫자를 만들어가면서 불가능한 위치를 찾음 – 불가능한 위치의 숫자를 1 더하거나 1 빼는것이 가장 가까운 수 – 그 뒤는 남은 수들로 가장 크게 만들어주거나 가장 작게 만들어줌 – Ex) 44223344 • 45012367 • 43987652 • 둘 중 더 가까운걸 선택 – 자리수를 한자리 늘려보거나 줄여보고 체크 • 시간 복잡도 : O(lgN)
  • 12. G. 변신로봇 • 변신을 거듭하면서 원하는 상태를 만드는 가장 적은 비용을 찾는 문제 • 변신의 상태를 정점, 변신에 필요한 비용을 간선으로 • 정점에서 정점으로 가는 최단경로를 구하는 문제 • 다익스트라!
  • 13. G. 변신로봇 • 전처리로 완전 그래프를 구성해주어야 함 – 시간초과 발생가능 – 무향 그래프이므로 전처리의 반복 횟수를 반으로 줄일 수 있음 • 시간 복잡도 : O(N^2lgN + N^2K) (N : 변신 상태 수, K : 부품길 이)
  • 14. H. 명탐정 준하 • 모든 미술관과 흔적을 방문할 때 걸리는 최소 거리를 구하는 문제 • 각 좌표마다 이동거리는 항상 1로 같으므로 BFS로 해결 • 그래프 모델링 – 현재 위치, 지금까지 방문한 좌표들, 다음 방문할 미술관 번호를 정점으로 – 방문한 좌표는 bitmask를 사용! – V[y][x][visit][no] => 4 * 5 * 2^20 * 20 ??
  • 15. H. 명탐정 준하 • 지금까지 방문한 좌표를 알고 있으면 다음 방문할 미술관의 위치를 구할 수 있다 • V[y][x][visit][no] -> V[y][x][visit]! • 4 * 5 * 2^20 * 20 -> 4 * 5 * 2^20 • 시간 복잡도 : O(yx2^(yx)) • 사실 이전의 모델로도 최적화를 잘 하면 정답을 받을 수 있다 – 테스트케이스 최적화
  • 16. I. 고급작품 • N * M의 도화지에 K개의 도장을 Q번 찍었을 때 도화지의 상태를 출력하는 문제 • 그때그때 그대로 도장을 찍는 경우의 시간 복잡도 : O(KHW + QHW + NM) • 시간초과!
  • 17. I. 고급작품 • 도장을 찍는 순서를 반대로 생각해보자 – 이미 도장이 찍혀있는 곳은 더 이상 덧씌워지지 않음 – 반복 횟수를 줄일 기회!
  • 18. I. 고급작품 • 도화지의 세로좌표마다 가로 좌표들을 연결리스트로 저장한다면? 1,1 1,2 1,3 1,4 2,1 2,2 2,3 2,4
  • 19. I. 고급작품 • 도화지의 세로좌표마다 가로 좌표들을 연결리스트로 저장한다면? – 한번 찍은 좌표를 삭제하면 더 이상 참조하지 않음 – 하지만 특정 좌표에 접근하는데 필요한 반복이 최대 M번 – 시간 복잡도 : O(KHW + QH + NM^2 + NM)
  • 20. I. 고급작품 • 도화지의 세로좌표마다 가로 좌표들을 이진탐색트리로 저장한다면? 1,2 1,4 1,6 1,71,51,1 1,3
  • 21. I. 고급작품 • 도화지의 세로좌표마다 가로 좌표들을 이진탐색트리로 저장한다면? – C++의 경우 set – 특정 좌표에 접근하는데 필요한 반복이 최대 lgM번 – 시간 복잡도 : O(KHW + QH + NMlgM + NM) • 아쉽게도 이진탐색트리에 저장하는 데이터 수가 많아 시간초과 • 최적화 할 수 있을까?
  • 22. I. 고급작품 • 도화지의 세로좌표마다 가로 좌표들을 범위로 저장한다면? 1,1~10
  • 23. I. 고급작품 • 도화지의 세로좌표마다 가로 좌표들을 범위로 저장한다면? – (1,3) ~ (1,8)에 도장 찍음 1,1~2 1,9~10
  • 24. I. 고급작품 • 도화지의 세로좌표마다 가로 좌표들을 범위로 저장한다면? – 여전히 이진탐색트리를 이용할 수 있음 – 이진탐색트리에 들어가는 데이터의 최대 수는 M / 2개 • 시간 복잡도 : O(KHW + QH + NMlgM + NM)