SlideShare a Scribd company logo
1 of 17
Download to read offline
1. FATB (하)
목적 : 언어 활용 능력 검증
정해 : O(1), O(N)
이론 : 등차수열의 합, 구현
해답 1, O(1)
1.Read A, B
2.Res  B*(B+1)/2
3.Res  Res – (A-1)*A/2
4.Print Res
해답 2, O(N)
1.Read A, B
2.Res  0
3.Res  Res loop index from A to B
4.Print Res
2. 러브 트라이앵글 (하)
목적 : 언어 활용 능력 검증, 규칙 분석 능력
정해 : O(𝑁2
)
이론 : 파스칼 삼각형(DP), 구현
본 문제는 평소 쉽게 접했던 러브 트라이앵글이 가지는 규칙을 찾고
이를 분석하는 문제입니다. 반면 단순 구현으로도 구현할 수 있습니다.
김 김 철 영 수 희
5 5 8 5 4 5
0 3 3 9 9
3 6 2 8
9 8 0
7 8
2. 러브 트라이앵글(하)
위의 김철수, 김영희의 러브 트라이앵글을 보면, 각 글자들이 다음 행
을 구성할 때 얼마나 많은 영향을 주는지 판단 할 수 있습니다.
김 김 철 영 수 희
5 5 8 5 4 5
5+5 5+8 5+3 5+4 4+5
5+5+5+8 5+8+5+3 5+3+5+4 5+4+4+5
.
.
위의 경우를 마지막 행까지 계산해보면,
5(김) * 1 + 5(김) * 4 + 8(철) * 6 + 5(영) * 4 + 4(수) * 1 => 97%10 = 7
5(김) * 1 + 8(철) * 4 + 5(영) * 6 + 4(수) * 4 + 5(희) * 1 => 88%10 = 8 이며,
이는 파스칼 삼각형의 5행의 원소들의 곱의 합과 같습니다.
따라서 이 문제는 파스칼 삼각형을 동적 계획법으로 선 계산 후, 입력 크기 N-1행을
곱한 합을 출력하는 방식으로 해결 할 수 있습니다.
2. 러브 트라이앵글(하)
구현 솔루션 )
A <- Integer [N][N]
Read A[0][0~N]
loop index idx from 1 to N-1
loop index jdx from 1 to N
A [ idx ]  A[idx-1][jdx-1]+A[idx-1][jdx]
A[N-2][0] <- Reminder of A[N-2][0] divided by 10
A[N-2][1] <- Reminder of A[N-2][1] divided by 10
print A[N-2][0~1]
3. 배열 연산 (하)
목적 : 언어 활용 능력 검증, 구현
정해 : O(𝑁𝑀), 구현
이론 : shift, reverse
위의 문제는 컴퓨터 공학 기초 이론인 Shift연산을 응용한 문제입니다.
주어지는 입력은 N개의 배열이며, M개의 연산 종류를 수행하고 결과
를 출력하는 문제입니다.
각 연산에 대한 쿼리는 연산 번호, 시작 인덱스와 종료 인덱스로 구성
됩니다.
4. 무지개 퍼즐 (하)
- 구현, 그리디, 탐색
- 먼저 7개의 돌이 게임판에 올라갈 자리를 골라놨다고 생각해 봅시다.
그 때는 길이가 7인 두 수열의 곱을 최대화하는 문제로 바꿔 생각할
수 있습니다. 모든 경우에 대해서 계산하여 구할 수 있지만, 두 수열을
각각 정렬하여 곱하면 최대값을 구할 수 있습니다.
- 7개의 돌이 인접하지 않은 경우는 4가지가 있습니다. 이에 대한 예외
처리가 필요합니다.
K = 1 일때, 수평선 상 개구리에게서 가장 가까운 동굴을 찾아야합니다.
따라서 O(𝑎 log 𝑏)으로 이진탐색을 하면 쉽게 가장 가까운 동굴을 찾을 수 있습니다.
5. 개구리 (중)
K > 1 일때의 경우를 생각해봅시다.
𝑎𝑖 에 대한 가장 가까운 동굴을 찾으려면,
𝑎𝑖 % 𝐾 == 𝑏𝑗 % 𝐾 인 동굴들 중에서 이진탐색을 하면 됩니다.
따라서 𝑏𝑗를 list 𝑎𝑟𝑟 K 를 만들고, arr[𝑏𝑗 % 𝐾]에 𝑏𝑗를 push_back 합니다.
그 후, 차후에 할 이진탐색을 위해 각 배열을 정렬합니다.
𝑎𝑖 에서 동굴을 찾을 때, 𝑎𝑟𝑟[𝑎𝑖 % 𝐾] 에서 𝑎𝑖값을 이진탐색으로 찾으면 됩니다.
정리하면, 공간복잡도 O(𝑏), 시간복잡도 O(a log b)이고, 이진탐색을 하면 가장 가까
운 동굴을 찾을 수 있습니다. 또한, 답이 32bit integer를 초과할 수 있으므로, C++
의 경우 long long을 사용하여야 합니다.
5. 개구리 (중)
다른 풀이로는 다익스트라를 사용하는 풀이를 떠올릴 수 있습니다.
일단 다익스트라의 최단경로 알고리즘을 돌려서 답을 얻을 수 있도록 그래프를 모델링해야
하는데, 그 방법은 다음과 같습니다.
1. 개구리와 굴을 정점으로 생각하고 위치를 k로 나눈 나머지가 같은 것들끼리 모읍니다.
2. 모은 것들을 정렬합니다.
3. 정렬된 배열에서 인접한 것들 사이에 비용이 둘의 위치 차이인 양방향 간선을 연결해줍니다.
4. 가상의 정점을 하나 만들고, 그 정점에서 모든 굴로 가는 간선을 하나씩 만들어 줍니다. 간선
의 비용은 0으로 줍니다.
5. 이제 가상의 정점을 시작점으로 하여 다익스트라의 최단경로 알고리즘을 돌립니다.
위 순서대로 진행한 뒤에, 답은 모든 개구리로 가는 최단거리의 합이 됩니다.
시간복잡도는 O(nlogn) 정도로 생각할 수 있습니다.
5. 개구리 (중)
6. 가스레인지 (중)
- 최단경로, 탐색
파괴되지 않은 도로를 비용이 0인 간선, 파괴된 도로를 비
용이 1인 간선으로 생각하여, 최단경로를 구하면 답을 찾을
수 있습니다.
일반적으로 다익스트라 알고리즘을 사용하면 풀 수 있고,
특수한 형태의 BFS를 사용해도 됩니다.
m = a + b 라 하면, 다익스트라 알고리즘으로 O(mlogn)
의 시간복잡도로 풀 수 있고, BFS를 사용하면 O(n + m)의
시간복잡도로 풀 수 있습니다.
이 문제는 하나의 차원을 낮게 생각하면 쉽게 해결할 수 있습니다.
1차원 배열에 임의의 숫자 𝑎𝑖가 있고,
우리가 구해야 하는 한 배열 𝑏가 있습니다
어떤 𝑏𝑖 중 임의의 위치와 크기의 𝑏 𝑚𝑎𝑥 가 있을 때,
𝑏𝑖 = 𝑏 𝑚𝑎𝑥 − 𝑎𝑏𝑠(𝑖 − max ) 라고 합니다.
모든 i에 대해, 𝑎𝑖 ≤ 𝑏𝑖를 만족하면서 가장 작은 𝑏 𝑚𝑎𝑥를 찾는 문제입니다.
𝑏 𝑚𝑎𝑥
7. 피라미드 (중)
𝑏 𝑚𝑎𝑥
다음과 같은 배열이 주어지면, 기울기 1과 -1인 직선 둘을 이용하여
다음과 같이 해결할 수 있습니다.
7. 피라미드 (중)
이 경우 dynamic programming으로 접근하면,
다음과 같이 테이블을 만들어 해결할 수 있습니다.
dp[i][0] = max(a[i], dp[i-1][0] + 1)
dp[i][1] = max(a[i], dp[i+1][1] + 1)
ans = min(ans, max(dp[i][0], dp[i][1]));
다시 본 문제로 넘어가 기울기에 대해 생각해보면,
다음 그림처럼 표현할 수 있습니다.
7. 피라미드 (중)
그렇다면, 다음과 같은 네 가지의 dp 테이블을 생각할 수 있습니다.
이것을 식으로 표현하면,
dp[i][j][0] = max(a[i][j], max(dp[i + 1][j - 1][0], max(dp[i][j - 1][0], dp[i - 1][j - 1][0])) + 1)
dp[i][j][1] = max(a[i][j], max(dp[i - 1][j - 1][0], max(dp[i - 1][j][0], dp[i - 1][j + 1][0])) + 1)
dp[i][j][2] = max(a[i][j], max(dp[i - 1][j + 1][0], max(dp[i][j + 1][0], dp[i + 1][j + 1][0])) + 1)
dp[i][j][3] = max(a[i][j], max(dp[i + 1][j - 1][0], max(dp[i + 1][j][0], dp[i + 1][j + 1][0])) + 1)
가 됩니다. 각 테이블을 적당히 순서에 맞게 채우고,
ans = max(dp[i][j][0], dp[i][j][1], dp[i][j][2], dp[i][j][3]) 으로 답을 구하면 됩니다.
7. 피라미드 (중)
또한 네 방향의 기울기를 이용하여,
3차원 상의 평면을 나타내는 함수 네 개로 해결할 수 있습니다.
이 풀이법은 문제를 쉽게 풀 수 있지만,
의도하지 않은 방법이므로 설명하지 않습니다.
7. 피라미드 (중)
8. 최소공배수 (중)
- 수학, 정수론
- 두 수의 최소공배수는 두 수의 공통소인수들을 모두 곱하되, 지수의 최대값만
취하여 곱하면 구할 수 있습니다. 따라서 각각의 수들을 소인수분해하여 소수
의 개수만 저장해 놓는다면, 곱해지고 난 뒤의 수의 최소공배수를 구할 수 있
습니다.
- 에라토스테네스의 체를 응용하여 소인수분해를 하거나, 주어진 수의 제곱근
까지만 나눠보는 방법으로 소인수분해를 빠르게 할 필요가 있습니다.
- 또한, 이 문제에서는 최종적으로 구해지는 소수들의 개수가 매우 크므로, 빠
른 거듭제곱 알고리즘을 사용하여 곱해야 합니다.
- 주어지는 수의 범위가 m 이라고 하면 시간복잡도는 O(nlogm) 정도가 됩니다.
a 2^3 5^2 200
b 3^2 5^3 1125
LCM(a,b) 2^3 3^2 5^3 9000
해답 소스
- FATB : http://ideone.com/kIdh24
- Love Triangle : http://ideone.com/a87ghC
- 배열연산 : http://ideone.com/OkeMs3
- 무지개 퍼즐 : http://ideone.com/GePJNY
- 개구리 : http://ideone.com/t0Y3OF
: http://ideone.com/IkQmFA (Dijk)
- 가스레인지 : http://ideone.com/LBke6m
- 피라미드 : http://ideone.com/0Dmc8g
- 최소공배수 : http://ideone.com/TxpKpr

More Related Content

What's hot

[KAIST - RUN] 프로그래밍 경진대회 문제 풀이
[KAIST - RUN] 프로그래밍 경진대회 문제 풀이[KAIST - RUN] 프로그래밍 경진대회 문제 풀이
[KAIST - RUN] 프로그래밍 경진대회 문제 풀이NAVER D2
 
[D2CAMPUS] Algorithm tips - ALGOS
[D2CAMPUS] Algorithm tips - ALGOS[D2CAMPUS] Algorithm tips - ALGOS
[D2CAMPUS] Algorithm tips - ALGOSNAVER D2
 
[D2 CAMPUS] 숭실대 SCCC 프로그래밍 경시대회 문제
[D2 CAMPUS] 숭실대 SCCC 프로그래밍 경시대회 문제[D2 CAMPUS] 숭실대 SCCC 프로그래밍 경시대회 문제
[D2 CAMPUS] 숭실대 SCCC 프로그래밍 경시대회 문제NAVER D2
 
HI-ARC PS 102 Brute Force
HI-ARC PS 102 Brute ForceHI-ARC PS 102 Brute Force
HI-ARC PS 102 Brute ForceJae-yeol Lee
 
[한양대 aloha] 프로그래밍 경진대회 문제_advanced part
[한양대 aloha] 프로그래밍 경진대회 문제_advanced part[한양대 aloha] 프로그래밍 경진대회 문제_advanced part
[한양대 aloha] 프로그래밍 경진대회 문제_advanced partNAVER D2
 
HI-ARC Number Theory
HI-ARC Number TheoryHI-ARC Number Theory
HI-ARC Number TheoryJae-yeol Lee
 
Backtracking [ICPC Sinchon]
Backtracking [ICPC Sinchon]Backtracking [ICPC Sinchon]
Backtracking [ICPC Sinchon]Jae-yeol Lee
 
[한양대 aloha] 프로그래밍 경진대회 문제_Beginner part
[한양대 aloha] 프로그래밍 경진대회 문제_Beginner part[한양대 aloha] 프로그래밍 경진대회 문제_Beginner part
[한양대 aloha] 프로그래밍 경진대회 문제_Beginner partNAVER D2
 
[신경망기초] 신경망의시작-퍼셉트론
[신경망기초] 신경망의시작-퍼셉트론[신경망기초] 신경망의시작-퍼셉트론
[신경망기초] 신경망의시작-퍼셉트론jaypi Ko
 
2012 Dm C3 03
2012 Dm C3 032012 Dm C3 03
2012 Dm C3 03chl132435
 
[KAIST - RUN] 프로그래밍 경진대회 문제
[KAIST - RUN] 프로그래밍 경진대회 문제[KAIST - RUN] 프로그래밍 경진대회 문제
[KAIST - RUN] 프로그래밍 경진대회 문제NAVER D2
 
이산치3보고서
이산치3보고서이산치3보고서
이산치3보고서KimChangHoen
 
[신경망기초] 선형회귀분석
[신경망기초] 선형회귀분석[신경망기초] 선형회귀분석
[신경망기초] 선형회귀분석jaypi Ko
 
shake! 2016 예선 문제 풀이
shake! 2016 예선 문제 풀이shake! 2016 예선 문제 풀이
shake! 2016 예선 문제 풀이HYUNJEONG KIM
 
2021 1학기 정기 세미나 6주차
2021 1학기 정기 세미나 6주차2021 1학기 정기 세미나 6주차
2021 1학기 정기 세미나 6주차Moonki Choi
 
[고려대 ALPS&ALKOR] 프로그래밍 경진대회 문제
[고려대 ALPS&ALKOR] 프로그래밍 경진대회 문제[고려대 ALPS&ALKOR] 프로그래밍 경진대회 문제
[고려대 ALPS&ALKOR] 프로그래밍 경진대회 문제NAVER D2
 
확통 회귀분석
확통 회귀분석확통 회귀분석
확통 회귀분석jaypi Ko
 
2015 한양대학교 프로그래밍 경시대회 - beginner division
2015 한양대학교 프로그래밍 경시대회 - beginner division2015 한양대학교 프로그래밍 경시대회 - beginner division
2015 한양대학교 프로그래밍 경시대회 - beginner divisionNAVER D2
 
한양대학교 ALOHA - 봄내전대회_C언어반
 한양대학교 ALOHA - 봄내전대회_C언어반 한양대학교 ALOHA - 봄내전대회_C언어반
한양대학교 ALOHA - 봄내전대회_C언어반NAVER D2
 

What's hot (20)

[KAIST - RUN] 프로그래밍 경진대회 문제 풀이
[KAIST - RUN] 프로그래밍 경진대회 문제 풀이[KAIST - RUN] 프로그래밍 경진대회 문제 풀이
[KAIST - RUN] 프로그래밍 경진대회 문제 풀이
 
[D2CAMPUS] Algorithm tips - ALGOS
[D2CAMPUS] Algorithm tips - ALGOS[D2CAMPUS] Algorithm tips - ALGOS
[D2CAMPUS] Algorithm tips - ALGOS
 
[D2 CAMPUS] 숭실대 SCCC 프로그래밍 경시대회 문제
[D2 CAMPUS] 숭실대 SCCC 프로그래밍 경시대회 문제[D2 CAMPUS] 숭실대 SCCC 프로그래밍 경시대회 문제
[D2 CAMPUS] 숭실대 SCCC 프로그래밍 경시대회 문제
 
HI-ARC PS 102 Brute Force
HI-ARC PS 102 Brute ForceHI-ARC PS 102 Brute Force
HI-ARC PS 102 Brute Force
 
[한양대 aloha] 프로그래밍 경진대회 문제_advanced part
[한양대 aloha] 프로그래밍 경진대회 문제_advanced part[한양대 aloha] 프로그래밍 경진대회 문제_advanced part
[한양대 aloha] 프로그래밍 경진대회 문제_advanced part
 
HI-ARC Number Theory
HI-ARC Number TheoryHI-ARC Number Theory
HI-ARC Number Theory
 
HI-ARC PS 101
HI-ARC PS 101HI-ARC PS 101
HI-ARC PS 101
 
Backtracking [ICPC Sinchon]
Backtracking [ICPC Sinchon]Backtracking [ICPC Sinchon]
Backtracking [ICPC Sinchon]
 
[한양대 aloha] 프로그래밍 경진대회 문제_Beginner part
[한양대 aloha] 프로그래밍 경진대회 문제_Beginner part[한양대 aloha] 프로그래밍 경진대회 문제_Beginner part
[한양대 aloha] 프로그래밍 경진대회 문제_Beginner part
 
[신경망기초] 신경망의시작-퍼셉트론
[신경망기초] 신경망의시작-퍼셉트론[신경망기초] 신경망의시작-퍼셉트론
[신경망기초] 신경망의시작-퍼셉트론
 
2012 Dm C3 03
2012 Dm C3 032012 Dm C3 03
2012 Dm C3 03
 
[KAIST - RUN] 프로그래밍 경진대회 문제
[KAIST - RUN] 프로그래밍 경진대회 문제[KAIST - RUN] 프로그래밍 경진대회 문제
[KAIST - RUN] 프로그래밍 경진대회 문제
 
이산치3보고서
이산치3보고서이산치3보고서
이산치3보고서
 
[신경망기초] 선형회귀분석
[신경망기초] 선형회귀분석[신경망기초] 선형회귀분석
[신경망기초] 선형회귀분석
 
shake! 2016 예선 문제 풀이
shake! 2016 예선 문제 풀이shake! 2016 예선 문제 풀이
shake! 2016 예선 문제 풀이
 
2021 1학기 정기 세미나 6주차
2021 1학기 정기 세미나 6주차2021 1학기 정기 세미나 6주차
2021 1학기 정기 세미나 6주차
 
[고려대 ALPS&ALKOR] 프로그래밍 경진대회 문제
[고려대 ALPS&ALKOR] 프로그래밍 경진대회 문제[고려대 ALPS&ALKOR] 프로그래밍 경진대회 문제
[고려대 ALPS&ALKOR] 프로그래밍 경진대회 문제
 
확통 회귀분석
확통 회귀분석확통 회귀분석
확통 회귀분석
 
2015 한양대학교 프로그래밍 경시대회 - beginner division
2015 한양대학교 프로그래밍 경시대회 - beginner division2015 한양대학교 프로그래밍 경시대회 - beginner division
2015 한양대학교 프로그래밍 경시대회 - beginner division
 
한양대학교 ALOHA - 봄내전대회_C언어반
 한양대학교 ALOHA - 봄내전대회_C언어반 한양대학교 ALOHA - 봄내전대회_C언어반
한양대학교 ALOHA - 봄내전대회_C언어반
 

Similar to [D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제 풀이

Computational Complexity
Computational ComplexityComputational Complexity
Computational Complexityskku_npc
 
DP 알고리즘에 대해 알아보자.pdf
DP 알고리즘에 대해 알아보자.pdfDP 알고리즘에 대해 알아보자.pdf
DP 알고리즘에 대해 알아보자.pdfHo Jeong Im
 
이산치수학 Project3
이산치수학 Project3이산치수학 Project3
이산치수학 Project3KoChungWook
 
자료구조1보고서
자료구조1보고서자료구조1보고서
자료구조1보고서KimChangHoen
 
Project#2말의여행 Hwp
Project#2말의여행 HwpProject#2말의여행 Hwp
Project#2말의여행 HwpKimjeongmoo
 
하스켈로 알고리즘 문제 풀기 2
하스켈로 알고리즘 문제 풀기 2하스켈로 알고리즘 문제 풀기 2
하스켈로 알고리즘 문제 풀기 2민석 이
 
2012 Ds B2 02 Pdf
2012 Ds B2 02 Pdf2012 Ds B2 02 Pdf
2012 Ds B2 02 Pdfkd19h
 
2012 Ds B2 02
2012 Ds B2 022012 Ds B2 02
2012 Ds B2 02chl132435
 
[Devfest Campus Korea 2021]효율적인 문제해결 With 알고리즘
[Devfest Campus Korea 2021]효율적인 문제해결 With 알고리즘[Devfest Campus Korea 2021]효율적인 문제해결 With 알고리즘
[Devfest Campus Korea 2021]효율적인 문제해결 With 알고리즘GDGCampusKorea
 
Dynamic programming
Dynamic programmingDynamic programming
Dynamic programmingEunjin Song
 
2019 ppc answers
2019 ppc answers2019 ppc answers
2019 ppc answers승혁 조
 
자료구조 Project2
자료구조 Project2자료구조 Project2
자료구조 Project2KoChungWook
 
자료구조5보고서
자료구조5보고서자료구조5보고서
자료구조5보고서KimChangHoen
 

Similar to [D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제 풀이 (20)

Computational Complexity
Computational ComplexityComputational Complexity
Computational Complexity
 
DP 알고리즘에 대해 알아보자.pdf
DP 알고리즘에 대해 알아보자.pdfDP 알고리즘에 대해 알아보자.pdf
DP 알고리즘에 대해 알아보자.pdf
 
2012 Ds 01
2012 Ds 012012 Ds 01
2012 Ds 01
 
이산치수학 Project3
이산치수학 Project3이산치수학 Project3
이산치수학 Project3
 
자료구조1보고서
자료구조1보고서자료구조1보고서
자료구조1보고서
 
Project#2말의여행 Hwp
Project#2말의여행 HwpProject#2말의여행 Hwp
Project#2말의여행 Hwp
 
자료구조01
자료구조01자료구조01
자료구조01
 
자료구조01
자료구조01자료구조01
자료구조01
 
자료구조01
자료구조01자료구조01
자료구조01
 
자구2번
자구2번자구2번
자구2번
 
하스켈로 알고리즘 문제 풀기 2
하스켈로 알고리즘 문제 풀기 2하스켈로 알고리즘 문제 풀기 2
하스켈로 알고리즘 문제 풀기 2
 
2012 Ds B2 02 Pdf
2012 Ds B2 02 Pdf2012 Ds B2 02 Pdf
2012 Ds B2 02 Pdf
 
2012 Ds B2 02
2012 Ds B2 022012 Ds B2 02
2012 Ds B2 02
 
[Devfest Campus Korea 2021]효율적인 문제해결 With 알고리즘
[Devfest Campus Korea 2021]효율적인 문제해결 With 알고리즘[Devfest Campus Korea 2021]효율적인 문제해결 With 알고리즘
[Devfest Campus Korea 2021]효율적인 문제해결 With 알고리즘
 
분할정복
분할정복분할정복
분할정복
 
Dynamic programming
Dynamic programmingDynamic programming
Dynamic programming
 
2019 ppc answers
2019 ppc answers2019 ppc answers
2019 ppc answers
 
자료구조 Project2
자료구조 Project2자료구조 Project2
자료구조 Project2
 
자료구조02
자료구조02자료구조02
자료구조02
 
자료구조5보고서
자료구조5보고서자료구조5보고서
자료구조5보고서
 

More from NAVER D2

[211] 인공지능이 인공지능 챗봇을 만든다
[211] 인공지능이 인공지능 챗봇을 만든다[211] 인공지능이 인공지능 챗봇을 만든다
[211] 인공지능이 인공지능 챗봇을 만든다NAVER D2
 
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...NAVER D2
 
[215] Druid로 쉽고 빠르게 데이터 분석하기
[215] Druid로 쉽고 빠르게 데이터 분석하기[215] Druid로 쉽고 빠르게 데이터 분석하기
[215] Druid로 쉽고 빠르게 데이터 분석하기NAVER D2
 
[245]Papago Internals: 모델분석과 응용기술 개발
[245]Papago Internals: 모델분석과 응용기술 개발[245]Papago Internals: 모델분석과 응용기술 개발
[245]Papago Internals: 모델분석과 응용기술 개발NAVER D2
 
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈NAVER D2
 
[235]Wikipedia-scale Q&A
[235]Wikipedia-scale Q&A[235]Wikipedia-scale Q&A
[235]Wikipedia-scale Q&ANAVER D2
 
[244]로봇이 현실 세계에 대해 학습하도록 만들기
[244]로봇이 현실 세계에 대해 학습하도록 만들기[244]로봇이 현실 세계에 대해 학습하도록 만들기
[244]로봇이 현실 세계에 대해 학습하도록 만들기NAVER D2
 
[243] Deep Learning to help student’s Deep Learning
[243] Deep Learning to help student’s Deep Learning[243] Deep Learning to help student’s Deep Learning
[243] Deep Learning to help student’s Deep LearningNAVER D2
 
[234]Fast & Accurate Data Annotation Pipeline for AI applications
[234]Fast & Accurate Data Annotation Pipeline for AI applications[234]Fast & Accurate Data Annotation Pipeline for AI applications
[234]Fast & Accurate Data Annotation Pipeline for AI applicationsNAVER D2
 
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load BalancingOld version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load BalancingNAVER D2
 
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지NAVER D2
 
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기NAVER D2
 
[224]네이버 검색과 개인화
[224]네이버 검색과 개인화[224]네이버 검색과 개인화
[224]네이버 검색과 개인화NAVER D2
 
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)NAVER D2
 
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기NAVER D2
 
[213] Fashion Visual Search
[213] Fashion Visual Search[213] Fashion Visual Search
[213] Fashion Visual SearchNAVER D2
 
[232] TensorRT를 활용한 딥러닝 Inference 최적화
[232] TensorRT를 활용한 딥러닝 Inference 최적화[232] TensorRT를 활용한 딥러닝 Inference 최적화
[232] TensorRT를 활용한 딥러닝 Inference 최적화NAVER D2
 
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지NAVER D2
 
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터NAVER D2
 
[223]기계독해 QA: 검색인가, NLP인가?
[223]기계독해 QA: 검색인가, NLP인가?[223]기계독해 QA: 검색인가, NLP인가?
[223]기계독해 QA: 검색인가, NLP인가?NAVER D2
 

More from NAVER D2 (20)

[211] 인공지능이 인공지능 챗봇을 만든다
[211] 인공지능이 인공지능 챗봇을 만든다[211] 인공지능이 인공지능 챗봇을 만든다
[211] 인공지능이 인공지능 챗봇을 만든다
 
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...
 
[215] Druid로 쉽고 빠르게 데이터 분석하기
[215] Druid로 쉽고 빠르게 데이터 분석하기[215] Druid로 쉽고 빠르게 데이터 분석하기
[215] Druid로 쉽고 빠르게 데이터 분석하기
 
[245]Papago Internals: 모델분석과 응용기술 개발
[245]Papago Internals: 모델분석과 응용기술 개발[245]Papago Internals: 모델분석과 응용기술 개발
[245]Papago Internals: 모델분석과 응용기술 개발
 
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈
 
[235]Wikipedia-scale Q&A
[235]Wikipedia-scale Q&A[235]Wikipedia-scale Q&A
[235]Wikipedia-scale Q&A
 
[244]로봇이 현실 세계에 대해 학습하도록 만들기
[244]로봇이 현실 세계에 대해 학습하도록 만들기[244]로봇이 현실 세계에 대해 학습하도록 만들기
[244]로봇이 현실 세계에 대해 학습하도록 만들기
 
[243] Deep Learning to help student’s Deep Learning
[243] Deep Learning to help student’s Deep Learning[243] Deep Learning to help student’s Deep Learning
[243] Deep Learning to help student’s Deep Learning
 
[234]Fast & Accurate Data Annotation Pipeline for AI applications
[234]Fast & Accurate Data Annotation Pipeline for AI applications[234]Fast & Accurate Data Annotation Pipeline for AI applications
[234]Fast & Accurate Data Annotation Pipeline for AI applications
 
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load BalancingOld version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing
 
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지
 
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기
 
[224]네이버 검색과 개인화
[224]네이버 검색과 개인화[224]네이버 검색과 개인화
[224]네이버 검색과 개인화
 
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)
 
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
 
[213] Fashion Visual Search
[213] Fashion Visual Search[213] Fashion Visual Search
[213] Fashion Visual Search
 
[232] TensorRT를 활용한 딥러닝 Inference 최적화
[232] TensorRT를 활용한 딥러닝 Inference 최적화[232] TensorRT를 활용한 딥러닝 Inference 최적화
[232] TensorRT를 활용한 딥러닝 Inference 최적화
 
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지
 
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터
 
[223]기계독해 QA: 검색인가, NLP인가?
[223]기계독해 QA: 검색인가, NLP인가?[223]기계독해 QA: 검색인가, NLP인가?
[223]기계독해 QA: 검색인가, NLP인가?
 

[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제 풀이

  • 1. 1. FATB (하) 목적 : 언어 활용 능력 검증 정해 : O(1), O(N) 이론 : 등차수열의 합, 구현 해답 1, O(1) 1.Read A, B 2.Res  B*(B+1)/2 3.Res  Res – (A-1)*A/2 4.Print Res 해답 2, O(N) 1.Read A, B 2.Res  0 3.Res  Res loop index from A to B 4.Print Res
  • 2. 2. 러브 트라이앵글 (하) 목적 : 언어 활용 능력 검증, 규칙 분석 능력 정해 : O(𝑁2 ) 이론 : 파스칼 삼각형(DP), 구현 본 문제는 평소 쉽게 접했던 러브 트라이앵글이 가지는 규칙을 찾고 이를 분석하는 문제입니다. 반면 단순 구현으로도 구현할 수 있습니다. 김 김 철 영 수 희 5 5 8 5 4 5 0 3 3 9 9 3 6 2 8 9 8 0 7 8
  • 3. 2. 러브 트라이앵글(하) 위의 김철수, 김영희의 러브 트라이앵글을 보면, 각 글자들이 다음 행 을 구성할 때 얼마나 많은 영향을 주는지 판단 할 수 있습니다. 김 김 철 영 수 희 5 5 8 5 4 5 5+5 5+8 5+3 5+4 4+5 5+5+5+8 5+8+5+3 5+3+5+4 5+4+4+5 . . 위의 경우를 마지막 행까지 계산해보면, 5(김) * 1 + 5(김) * 4 + 8(철) * 6 + 5(영) * 4 + 4(수) * 1 => 97%10 = 7 5(김) * 1 + 8(철) * 4 + 5(영) * 6 + 4(수) * 4 + 5(희) * 1 => 88%10 = 8 이며, 이는 파스칼 삼각형의 5행의 원소들의 곱의 합과 같습니다. 따라서 이 문제는 파스칼 삼각형을 동적 계획법으로 선 계산 후, 입력 크기 N-1행을 곱한 합을 출력하는 방식으로 해결 할 수 있습니다.
  • 4. 2. 러브 트라이앵글(하) 구현 솔루션 ) A <- Integer [N][N] Read A[0][0~N] loop index idx from 1 to N-1 loop index jdx from 1 to N A [ idx ]  A[idx-1][jdx-1]+A[idx-1][jdx] A[N-2][0] <- Reminder of A[N-2][0] divided by 10 A[N-2][1] <- Reminder of A[N-2][1] divided by 10 print A[N-2][0~1]
  • 5. 3. 배열 연산 (하) 목적 : 언어 활용 능력 검증, 구현 정해 : O(𝑁𝑀), 구현 이론 : shift, reverse 위의 문제는 컴퓨터 공학 기초 이론인 Shift연산을 응용한 문제입니다. 주어지는 입력은 N개의 배열이며, M개의 연산 종류를 수행하고 결과 를 출력하는 문제입니다. 각 연산에 대한 쿼리는 연산 번호, 시작 인덱스와 종료 인덱스로 구성 됩니다.
  • 6. 4. 무지개 퍼즐 (하) - 구현, 그리디, 탐색 - 먼저 7개의 돌이 게임판에 올라갈 자리를 골라놨다고 생각해 봅시다. 그 때는 길이가 7인 두 수열의 곱을 최대화하는 문제로 바꿔 생각할 수 있습니다. 모든 경우에 대해서 계산하여 구할 수 있지만, 두 수열을 각각 정렬하여 곱하면 최대값을 구할 수 있습니다. - 7개의 돌이 인접하지 않은 경우는 4가지가 있습니다. 이에 대한 예외 처리가 필요합니다.
  • 7. K = 1 일때, 수평선 상 개구리에게서 가장 가까운 동굴을 찾아야합니다. 따라서 O(𝑎 log 𝑏)으로 이진탐색을 하면 쉽게 가장 가까운 동굴을 찾을 수 있습니다. 5. 개구리 (중)
  • 8. K > 1 일때의 경우를 생각해봅시다. 𝑎𝑖 에 대한 가장 가까운 동굴을 찾으려면, 𝑎𝑖 % 𝐾 == 𝑏𝑗 % 𝐾 인 동굴들 중에서 이진탐색을 하면 됩니다. 따라서 𝑏𝑗를 list 𝑎𝑟𝑟 K 를 만들고, arr[𝑏𝑗 % 𝐾]에 𝑏𝑗를 push_back 합니다. 그 후, 차후에 할 이진탐색을 위해 각 배열을 정렬합니다. 𝑎𝑖 에서 동굴을 찾을 때, 𝑎𝑟𝑟[𝑎𝑖 % 𝐾] 에서 𝑎𝑖값을 이진탐색으로 찾으면 됩니다. 정리하면, 공간복잡도 O(𝑏), 시간복잡도 O(a log b)이고, 이진탐색을 하면 가장 가까 운 동굴을 찾을 수 있습니다. 또한, 답이 32bit integer를 초과할 수 있으므로, C++ 의 경우 long long을 사용하여야 합니다. 5. 개구리 (중)
  • 9. 다른 풀이로는 다익스트라를 사용하는 풀이를 떠올릴 수 있습니다. 일단 다익스트라의 최단경로 알고리즘을 돌려서 답을 얻을 수 있도록 그래프를 모델링해야 하는데, 그 방법은 다음과 같습니다. 1. 개구리와 굴을 정점으로 생각하고 위치를 k로 나눈 나머지가 같은 것들끼리 모읍니다. 2. 모은 것들을 정렬합니다. 3. 정렬된 배열에서 인접한 것들 사이에 비용이 둘의 위치 차이인 양방향 간선을 연결해줍니다. 4. 가상의 정점을 하나 만들고, 그 정점에서 모든 굴로 가는 간선을 하나씩 만들어 줍니다. 간선 의 비용은 0으로 줍니다. 5. 이제 가상의 정점을 시작점으로 하여 다익스트라의 최단경로 알고리즘을 돌립니다. 위 순서대로 진행한 뒤에, 답은 모든 개구리로 가는 최단거리의 합이 됩니다. 시간복잡도는 O(nlogn) 정도로 생각할 수 있습니다. 5. 개구리 (중)
  • 10. 6. 가스레인지 (중) - 최단경로, 탐색 파괴되지 않은 도로를 비용이 0인 간선, 파괴된 도로를 비 용이 1인 간선으로 생각하여, 최단경로를 구하면 답을 찾을 수 있습니다. 일반적으로 다익스트라 알고리즘을 사용하면 풀 수 있고, 특수한 형태의 BFS를 사용해도 됩니다. m = a + b 라 하면, 다익스트라 알고리즘으로 O(mlogn) 의 시간복잡도로 풀 수 있고, BFS를 사용하면 O(n + m)의 시간복잡도로 풀 수 있습니다.
  • 11. 이 문제는 하나의 차원을 낮게 생각하면 쉽게 해결할 수 있습니다. 1차원 배열에 임의의 숫자 𝑎𝑖가 있고, 우리가 구해야 하는 한 배열 𝑏가 있습니다 어떤 𝑏𝑖 중 임의의 위치와 크기의 𝑏 𝑚𝑎𝑥 가 있을 때, 𝑏𝑖 = 𝑏 𝑚𝑎𝑥 − 𝑎𝑏𝑠(𝑖 − max ) 라고 합니다. 모든 i에 대해, 𝑎𝑖 ≤ 𝑏𝑖를 만족하면서 가장 작은 𝑏 𝑚𝑎𝑥를 찾는 문제입니다. 𝑏 𝑚𝑎𝑥 7. 피라미드 (중)
  • 12. 𝑏 𝑚𝑎𝑥 다음과 같은 배열이 주어지면, 기울기 1과 -1인 직선 둘을 이용하여 다음과 같이 해결할 수 있습니다. 7. 피라미드 (중)
  • 13. 이 경우 dynamic programming으로 접근하면, 다음과 같이 테이블을 만들어 해결할 수 있습니다. dp[i][0] = max(a[i], dp[i-1][0] + 1) dp[i][1] = max(a[i], dp[i+1][1] + 1) ans = min(ans, max(dp[i][0], dp[i][1])); 다시 본 문제로 넘어가 기울기에 대해 생각해보면, 다음 그림처럼 표현할 수 있습니다. 7. 피라미드 (중)
  • 14. 그렇다면, 다음과 같은 네 가지의 dp 테이블을 생각할 수 있습니다. 이것을 식으로 표현하면, dp[i][j][0] = max(a[i][j], max(dp[i + 1][j - 1][0], max(dp[i][j - 1][0], dp[i - 1][j - 1][0])) + 1) dp[i][j][1] = max(a[i][j], max(dp[i - 1][j - 1][0], max(dp[i - 1][j][0], dp[i - 1][j + 1][0])) + 1) dp[i][j][2] = max(a[i][j], max(dp[i - 1][j + 1][0], max(dp[i][j + 1][0], dp[i + 1][j + 1][0])) + 1) dp[i][j][3] = max(a[i][j], max(dp[i + 1][j - 1][0], max(dp[i + 1][j][0], dp[i + 1][j + 1][0])) + 1) 가 됩니다. 각 테이블을 적당히 순서에 맞게 채우고, ans = max(dp[i][j][0], dp[i][j][1], dp[i][j][2], dp[i][j][3]) 으로 답을 구하면 됩니다. 7. 피라미드 (중)
  • 15. 또한 네 방향의 기울기를 이용하여, 3차원 상의 평면을 나타내는 함수 네 개로 해결할 수 있습니다. 이 풀이법은 문제를 쉽게 풀 수 있지만, 의도하지 않은 방법이므로 설명하지 않습니다. 7. 피라미드 (중)
  • 16. 8. 최소공배수 (중) - 수학, 정수론 - 두 수의 최소공배수는 두 수의 공통소인수들을 모두 곱하되, 지수의 최대값만 취하여 곱하면 구할 수 있습니다. 따라서 각각의 수들을 소인수분해하여 소수 의 개수만 저장해 놓는다면, 곱해지고 난 뒤의 수의 최소공배수를 구할 수 있 습니다. - 에라토스테네스의 체를 응용하여 소인수분해를 하거나, 주어진 수의 제곱근 까지만 나눠보는 방법으로 소인수분해를 빠르게 할 필요가 있습니다. - 또한, 이 문제에서는 최종적으로 구해지는 소수들의 개수가 매우 크므로, 빠 른 거듭제곱 알고리즘을 사용하여 곱해야 합니다. - 주어지는 수의 범위가 m 이라고 하면 시간복잡도는 O(nlogm) 정도가 됩니다. a 2^3 5^2 200 b 3^2 5^3 1125 LCM(a,b) 2^3 3^2 5^3 9000
  • 17. 해답 소스 - FATB : http://ideone.com/kIdh24 - Love Triangle : http://ideone.com/a87ghC - 배열연산 : http://ideone.com/OkeMs3 - 무지개 퍼즐 : http://ideone.com/GePJNY - 개구리 : http://ideone.com/t0Y3OF : http://ideone.com/IkQmFA (Dijk) - 가스레인지 : http://ideone.com/LBke6m - 피라미드 : http://ideone.com/0Dmc8g - 최소공배수 : http://ideone.com/TxpKpr