SlideShare une entreprise Scribd logo
1  sur  20
Télécharger pour lire hors ligne
1
- 2017 shake! 공식 예선 문제집 -
[A] 경인지역 6 개대학 연합 프로그래밍 경시대회 ....................2
[B] 동방 프로젝트 ........................................................................4
[C] Quilting .................................................................................7
[D] 인공지능 테트리스...............................................................10
[E] 소금과 후추 ..........................................................................14
[F] Over Fitting..........................................................................17
2
[A] 경인지역 6개대학 연합 프로그래밍 경시대회 [small: 20pt, Large: 30pt]
문제 설명
shake!란 경인지역 6 개대학 연합 프로그래밍 경시대회의 명칭이다. 이는 2015 년
경기남부 4 개대학 연합 프로그래밍 경시대회가 확장된 것으로 2017 년, 올해
제 3 회를 맞이했다. 본 대회는 아주대학교, 경희대학교, 성균관대학교, 인하대학교,
한국항공대학교, 한양대학교 ERICA 총 6 개학교 재학생들이 모여 서로간의 교류와
발전을 목표로 한다.
2017 shake! 예선 운영 방식은 다음과 같다.
l 문제는 Small 데이터와 Large 데이터로 이루어져 있다.
l 문제를 풀기 위해서는 입력 파일을 다운로드 받고, 5분 이내로 이에 맞는 출력 파일과 소스
코드를 업로드해야 한다.
l Small 데이터 문제를 해결해야 Large 데이터 입력 파일을 다운로드 받을 수 있다.
l 각 문제의 Small, Large 데이터를 해결하면 점수를 얻을 수 있으며, 이 점수는 각각 다르다.
l 제출 횟수는 점수를 획득한 문제를 맞기 까지 인풋을 다운로드 받은 횟수의 총합이다.
l 즉, 점수를 획득하지 못한 문제의 다운로드 횟수는 포함되지 않는다.
위 운영 방식에 따라 순위는 다음과 같이 결정된다.
l 해결한 문제 점수의 총합이 높은 참가자가 더 높은 순위를 가진다.
l 점수의 총합이 같은 경우, 제출 횟수가 적은 참가자가 더 높은 순위를 가진다.
l 점수의 총합과 제출 횟수가 같은 경우, 마지막으로 점수를 획득한 문제의 업로드 시간이 빠
른 참가자가 더 높은 순위를 가진다.
예선 대회와 본선 대회 방식은 다를 수 있다. 올해에도 shake! 디렉터를 맡게된
현정이는 디렉팅 업무로 며칠째 잠을 제대로 자지 못했다. 현정이의 일을 덜어
잠깐이라도 잘 수 있도록 참가자들의 순위를 계산하는 프로그램을 작성해주자.
입력 조건
가장 첫 줄에는 테스트 케이스의 수 𝑇	가 100 이하의 자연수로 주어진다.
이후 각 테스트 케이스에 대하여 아래와 같은 형식으로 입력이 주어진다.
l 첫 번째 줄에는 참가자의 수를 나타내는 자연수 𝑁	이 주어진다.
3
l 두 번째 줄부터 𝑁	개의 줄에 걸쳐 세개의 정수 𝑆%, 𝐶%, 𝐿%	가 주어진다.
l 1 + 𝑖	번째 줄의 각 값은 차례로 𝑖	번째 참가자의 점수, 제출 횟수, 마지막으로 점수를 획득
한 문제의 업로드 시간을 나타낸다.
Input Value Small Dataset Large Dataset
𝑁 1 ≤ 𝑁 ≤ 3 1 ≤ 𝑁 ≤ 10,000
𝑆% 0 ≤ 𝑆% ≤ 620
𝐶% 0 ≤ 𝐶% ≤ 50
𝐿% 0 ≤ 𝐿% ≤ 179
출력 조건
각 테스트 케이스별로 답을 출력한다.
l 각 테스트 케이스의 첫 줄에는 Case #1, Case #2 … 형태로 테스트 케이스의 번호를 출력한다.
l 각 케이스마다 1등을 하는 참가자의 번호를 한 줄에 출력한다.
예제 데이터1
예시 입력 예상 출력
2
2
620 7 179
300 5 100
3
300 5 100
620 7 179
600 9 150
Case #1
1
Case #2
2
예제 데이터2
예시 입력 예상 출력
2
2
620 7 179
620 8 100
3
300 5 100
620 7 179
620 8 150
Case #1
1
Case #2
2
이 데이터는 Small Dataset 에서는 나오지 않는다.
4
[B] 동방 프로젝트 [small: 20pt, Large: 40pt]
문제 설명
동아리방이 가지고 싶었던 병찬이는 LINK 사업단에 문의하여 𝑁	 개의 방 중의
하나를 얻을 기회를 얻었다. 일자로 되어있는 건물에 𝑁	 개의 방은 일직선상에
존재하며, 각 방에는 번호가 매겨져 있다. 맨 왼쪽 방의 번호는 1 번이며, 순서대로
증가하여 맨 오른쪽 방의 번호가 𝑁	 번이다. 각 방 사이에는 방을 구분하는 벽이
존재한다.
물론 병찬이 외에도 많은 사람이 동아리방을 원한다. 다행히 방은 충분했기에
병찬이는 안심하고 있었지만…
그때였다.
빅-종빈빌런이 나타나 건물 벽을 허물기 시작한 것이다! 빅-종빈빌런은 다음과
같은 규칙으로 벽을 무너뜨린다.
l 𝑥 < 𝑦 를 만족하는 두 방에 대해서	𝑥 번 방부터 𝑦	번 방 사이에 있는 모든 벽을 허문다.
l 두 방 사이의 벽이 허물어지면 두 방은 하나의 방으로 합쳐진다.
l 이미 허물어진 벽이 존재한다면 무시하고 다음 벽을 허문다.
l 빅-종빈빌런은 건물이 무너지는 걸 원치 않기 때문에, 1번 방의 왼쪽 벽과 𝑁	번 방의 오른
쪽 벽(즉, 바깥과 연결된 벽)은 허물지 않는다.
동아리 방의 개수가 점점 줄어들자 병찬이는 초조해졌다. 이에 병찬이는 동아리방을
얻을 수 있는지에 대한 확률을 계산하기 위해 남는 동아리방의 수를 구하고 싶어
한다. 병찬이를 위해 빅-종빈빌런의 행동 횟수 𝑀	과 동방의 개수 𝑁	이 주어졌을 때,
남은 동아리방의 수를 구해주자.
입력 조건
가장 첫 줄에는 테스트 케이스의 수 𝑇	가 100 이하의 자연수로 주어진다.
이후 각 테스트 케이스에 대하여 아래와 같은 형식으로 입력이 주어진다.
l 첫 번째 줄에는 동아리방의 개수를 나타내는 양의 정수 𝑁	이 주어진다.
l 두 번째 줄에는 빅-종빈빌런의 행동 횟수를 나타내는 음이 아닌 정수 𝑀	이 주어진다.
l 세 번째 줄부터 𝑀	개의 줄에 걸쳐 빅-종빈빌런의 행동이 양의 정수 𝑥, 𝑦	로 주어진다. 여기
서 행동이란 𝑥 번 방부터 𝑦	번 방 사이의 벽을 무너뜨리는 것을 의미한다.
l 빅-종빈빌런은 매우 허당이기 때문에 동일한 행동을 여러번 할 수 있음에 유의하라.
5
Input Value Small Dataset Large Dataset
𝑁 2 ≤ 𝑁 ≤ 100 2 ≤ 𝑁 ≤ 1,000,000
𝑀 0 ≤ 𝑀 ≤ 100 0 ≤ 𝑀 ≤ 5,000
𝑥, 𝑦 1 ≤ 𝑥 < 𝑦 ≤ 𝑁 1 ≤ 𝑥 < 𝑦 ≤ 𝑁
출력 조건
각 테스트 케이스별로 답을 출력한다.
l 각 테스트 케이스의 첫 줄에는 Case #1, Case #2 … 형태로 테스트 케이스의 번호를 출력한다.
l 각 케이스마다 빅-종빈빌런의 모든 행동이 끝난 후 남아있는 동방의 개수를 한 줄에 출력한
다.
예제 데이터1
예시 입력 예상 출력
2
5
2
1 2
2 4
5
1
1 5
Case #1
2
Case #2
1
1 번 테스트케이스의 경우 첫 번째 행동으로 1 번과 2 번 방이 합쳐져 (1, 2), (3), (4), (5) 상태가 된다.
이후 두 번째 행동으로 2, 3, 4 번 방이 합쳐져 (1, 2, 3, 4), (5)의 상태가 된다. 따라서 남아있는 동방의
수는 2 가 된다.
예제 데이터2
예시 입력 예상 출력
2
10
3
1 3
2 4
5 8
100
0
Case #1
4
Case #2
100
6
예제 데이터3
예시 입력 예상 출력
2
5
4
1 2
2 3
3 4
4 5
20
6
1 4
1 4
2 5
6 10
11 12
10 11
Case #1
1
Case #2
10
7
[C] Quilting [small: 30pt, Large: 50pt]
문제 설명
이미지 퀼팅(Image Quilting)이란, 하나의 패턴 이미지를 여러 개 이어붙여서 큰
이미지를 만들어내는 것을 말한다. 하지만 단순히 이미지를 나란히 이어붙이는
것만으로는 자연스러운 이미지를 얻을 수 없다. 이어 붙여질 이미지의 경계가 서로
많이 다를 수 있기 때문이다.
<왼쪽부터 원본 이미지, 단순히 이어붙인 이미지, 최적화하여 이어붙인 이미지>
위와 같은 문제를 해결하고 위의 3 번째 이미지같이 더욱 자연스러운 이미지를 얻기
위하여 아래와 같은 방법을 사용한다. 이 문제에서는 편의상 높이가 같은 두 흑백
이미지를 좌우로 합치는 것만 고려한다.
<두 이미지를 포개어 자연스러운 경계를 선택하는 과정>
l 이어붙일 두 이미지를 B1과 B2라고 하자. (B1은 왼쪽, B2는 오른쪽)
l 두 이미지의 경계를 조금 포갠다. 포갠 영역의 너비는 최소 2픽셀이다.
l 포개어진 영역에서 B2와 B1 이미지의 차이가 최소가 되도록 경계선을 결정한다. 그리고 경
계선과 그 오른쪽 부분을 B1 이미지에 B2 이미지를 덮어써서 새로운 이미지를 생성한다.
n 경계선은 포개진 영역의 한 행마다 하나의 픽셀을 선택하여 생성한다.
n 경계선의 각 행에 선택된 픽셀은 바로 위 혹은 아래 행에서 선택된 픽셀과 두 칸 이
상 떨어질 수 없다. 한마디로 한 경계선 픽셀은 자신의 바로 아래 혹은 위의 행의 경
계선 픽셀과 좌우로 +1, 0, 1칸 차이가 나는 것만 허용된다.
n 각 행은 경계선으로 선택된 픽셀을 기준으로 그 왼쪽은 B1 이미지의 픽셀을 그대로
사용하고, 그 픽셀과 이후 오른쪽 픽셀들은 B2 이미지의 픽셀로 덮어쓰게 된다.
8
<포개어진 5X10 영역에서 선택된 경계선 예시>
실제로 포개어진 영역에 존재할 수 있는 경계선은 경우의 수가 많기 때문에 이 중에
가장 자연스럽게 두 이미지를 이어붙일 수 있는 경계를 선택하여야 한다. 경계선의
부자연스러움 정도는 경계선상의 존재하는 각 픽셀 위치에서의 B1 이미지의 픽셀과
B2 이미지의 픽셀의 색상 값의 차를 제곱하여 모두 더한 값으로 정의할 수 있다.
물론 가장 자연스러운 경계선은 이 중 부자연스러운 정도가 가장 낮은 경계선을
의미한다.
<포개어진 영역의 B1 이미지와 B2 이미지, 그리고 최적의 경계선>
이 문제에서는 흑백 영상만을 다루므로 각 픽셀은 0~255 의 정수 형태의 색상
값으로 표현할 수 있다. 위의 예시에서 두 이미지는 세 번째 그림과 같이 경계선을
선택하면 최적이라고 할 수 있으며 이때의 부자연스러움 정도는 아래와 같이 계산할
수 있다.
𝐸 = 79 − 62 ;
+ 10 − 16 ;
+ 130 − 120 ;
+ 235 − 240 ;
= 450
두 이미지의 포개어질 영역의 색상값들이 주어질 때, 선택할 수 있는 최적의
경계선이 가지는 최소의 부자연스러움 정도를 계산하여 출력하는 프로그램을
작성하시오.
9
입력 조건
가장 첫 줄에는 테스트 케이스의 수 𝑇	가 100 이하의 자연수로 주어진다.
이후 각 테스트 케이스에 대하여 아래와 같은 형식으로 입력이 주어진다.
l 테스트케이스의 첫 줄에는 포개어진 두 이미지의 높이 𝐻	와 포개어진 영역의 너비 𝑊	가 공
백으로 구분된 두 자연수로 주어진다.
n 𝐻	는 이미지의 행의 수, 𝑊	는 포개어진 영역의 열의 수를 나타내는 자연수이다.
n 이 문제는 포개어질 영역의 색상 값만 주어짐에 유의한다. 입력으로 주어지는 두 이미
지는 모두 𝐻	행 𝑊	열이다.
l 그 후 𝐻	줄에 걸쳐서 B1 이미지의 색상값이 주어진다.
n 각 줄은 영상의 행이며 𝑊	개의 픽셀의 색상 값이 0~255 범위의 자연수로 주어진다.
n 입력으로 주어지는 행/열의 순서와 실제 영상의 행/열의 순서는 일치한다.
l 그 후 𝐻	줄에 걸쳐서 B2 이미지의 색상값이 주어진다. 입력 형식은 위의 B1 이미지와 같다.
Input Value Small Dataset Large Dataset
𝐻 1 ≤ 𝐻 ≤ 10 1 ≤ 𝐻 ≤ 100
𝑊 1 ≤ 𝑊 ≤ 10 1 ≤ 𝑊 ≤ 100
출력 조건
각 테스트 케이스별로 답을 출력한다.
l 각 테스트 케이스의 첫 줄에는 Case #1, Case #2 … 형태로 테스트 케이스의 번호를 출력한다.
l 각 케이스마다 두 이미지에서 선택할 수 있는 경계선이 가지는 최소의 부자연스러운 정도를
한 줄에 출력한다.
예제 데이터1
예시 입력 예상 출력
1
4 3
0 79 240
10 110 230
9 130 213
30 70 235
50 62 237
16 58 99
25 120 170
90 120 240
Case #1
450
10
[D] 인공지능 테트리스 [small: 30pt, Large: 60pt]
문제 설명
초보 게임개발자 동이는 프로그래밍을 공부하며 자신만의 테트리스 게임을
개발하고 있다. 테트리스는 이미 세계적으로 유명한 게임으로, 20 행 10 열의 그리드
게임판에서 위에서부터 추락하는 블럭 도형을 회전시키거나 좌우로 위치를 옮겨가며
쌓아 올리는 게임이다. 게임을 진행하는 중에 블럭이 아래위로 충돌하여 멈추게 되면
블럭으로 가득 찬 행은 삭제되고 삭제된 한 줄마다 사용자는 1 점을 얻는다. 이때 그
행 위의 행들은 모양을 유지한 채로 내려온다. 블럭 도형은 총 7 가지 종류가 있으며
사용자는 각각 90, 180, 270 도로 회전시켜 사용할 수도 있다.
<20 행 10 열의 게임판 예시(좌)와 일곱가지 테트리스 블럭 도형(우)>
테트리스 게임의 규칙은 비교적 단순하므로 동이는 생각보다 이른 시간 안에 게임을
완성할 수 있었다. 동이는 자신이 만든 테트리스 게임을 손수 플레이하며
테스트하려고 한다. 다만 동이는 평소 손이 느리기로 유명해서 어느 정도 이상의
난이도는 도저히 스스로 클리어할 수가 없었다. 그래서 동이는 자신만을 위해서
아래와 같은 치트 기능을 개발하기로 했다.
11
l 현재 동이가 조작하던 블럭 도형은 제거된다.
l 다음번 등장하는 블럭 도형은 동이가 조작할 수 없으며, 자동으로 최적의 위치에 등장하여
최적의 경로로 이동한다.
l 다음번 등장하는 블럭은 7가지 도형 중 위와 같이 움직여서 가장 많은 줄을 제거할 수 있
는 도형과 방향이 자동으로 선택된다.
l 다만 이동하는 과정에서 도형은 처음 등장한 모양에서 변경되거나 회전하지 않는다. 이를
고려하여 최적의 도형이 등장한다.
예를 들어서 위의 예시로 주어진 게임판에서 치트 기능을 사용하면 4 행 1 열짜리
길쭉한 블럭 도형이 오른쪽 끝 칸에 등장해 자동으로 수직으로 하강한다. 이때
플레이어는 두 줄을 제거하고 2 점을 얻을 수 있다. 다른 도형으로 두 줄 넘게
제거하는 것이 불가능하다.
현재 플레이어의 게임판 정보가 주어질 때 치트 기능을 사용하면 최대 몇 줄을
제거할 수 있을지 계산하는 프로그램을 작성하시오. 단, 현재 가장 위의 네 줄은 항상
모두 비어있음이 보장된다.
입력 조건
가장 첫 줄에는 테스트 케이스의 수 𝑇	가 100 이하의 자연수로 주어진다.
이후 각 테스트 케이스에 대하여 아래와 같은 형식으로 입력이 주어진다.
l 총 20줄에 걸쳐서 게임판의 각 줄의 상태를 나타내는 문자열이 0과 1로 구성되어 주어진다.
n 각 줄은 10글자이며, 0은 비어있는 칸을 나타내고 1은 블럭이 채워져 있는 칸을 나타
낸다.
n 먼저(위에) 입력 된 문자열이 게임판의 위쪽 줄을 나타낸다.
n 위에서 1~4번째 줄에는 항상 0으로 채워져 있음이 보장된다.
n 각 행마다 적어도 한 칸이 비어있음이 보장된다.
Input Value Small Dataset Large Dataset
판의 모양
시작 위치를 잘 잡으면 블록을
좌우로 움직일 필요가 없음
블록이 내려오는 중에 좌우로
움직여야 답을 구할 수 있음
12
출력 조건
각 테스트 케이스별로 답을 출력한다.
l 각 테스트 케이스의 첫 줄에는 Case #1, Case #2 … 형태로 테스트 케이스의 번호를 출력한다.
l 각 케이스마다 인공지능 기능으로 제거할 수 있는 최대 줄의 수를 한 줄에 출력한다.
예제 데이터1
예시 입력 예상 출력
1
0000000000
0000000000
0000000000
0000000000
0000000000
0000000000
0000000000
0000000000
0000000000
0000000000
0000000000
1111111110
1111110110
1111111110
1111101110
1111111110
1111011110
1111101110
1111111110
1111111110
Case #1
2
문제 설명에 등장한 예시와 같다. 긴 막대를 오른쪽 끝 줄에 배치하여 수직으로 하강시키면 두 줄을
제거할 수 있다.
13
예제 데이터2
예시 입력 예상 출력
1
0000000000
0000000000
0000000000
0000000000
0000000000
0000000000
0000000011
0000000001
0000000001
0000000001
0000000001
1111111101
1111111101
1111111101
1111111101
1111111101
1111111101
1111111101
1111111101
1111111101
Case #1
4
긴 막대를 세운 모양으로 왼쪽 끝 줄에서 하강하다가 모서리를 지나쳐 우측으로 이동시킨 후 다시
하강시키면 4 줄을 제거할 수 있다.
14
[E] 소금과 후추 [small: 30pt, Large: 80pt]
문제 설명
갑과 을은 사귀는 사이입니다. 둘은 근사한 저녁을 먹기로 했습니다. 갑과 을은
저녁에 크림 치즈 스파게티를 먹으러 서*앤*이라는 식당에 들어갔습니다.
먹음직스러운 크림 치즈 스파게티를 보고 예쁘다는 생각이 든 갑은, 스마트폰을 들어
스파게티 사진을 찍었습니다. 그리고 갑은 SNS 중 하나인 인*타*램에 사진을 올리려
하였는데, 그때 사진 속 스파게티 위에 뿌려진 소금과 후추가 갑의 눈에 띄었습니다.
갑은 소금과 후추가 마음에 들지 않았습니다. 사진 속에서 소금과 후추 부분을
제거하고 싶었던 갑은 을에게 사진 속 소금과 후추를 제거해줄 수 있냐고 물었습니다.
을은 바로 해줄 수 있다고 자신감 넘치게 대답하고는 가방에서 A4 용지와 펜을
꺼냈습니다. 그리고 사진 속 소금과 후추를 제거해 줄 방법을 고민하기 시작했습니다.
을은 먼저 문제를 정의하여 A4 용지에 다음과 같이 정리하였습니다.
l 입력으로 사진을 나타내는 𝑀x𝑁	행렬	𝐴 가 주어진다. 행렬의 각 원소는 사진 속 한 픽셀의
밝기를 나타내는데, 0이면 가장 어두운 것을 의미하고, 𝐾	면 가장 밝은 것을 의미한다.
l 또 다른 입력으로 정수 𝑊	가 주어진다. 𝑊	를 이용해 행렬 𝐵	를 아래와 같이 정의한다.
𝐵 𝑖 𝑗 = 𝑚𝑒𝑑𝑖𝑎𝑛 𝐴 𝑖 + 𝑥 𝑗 + 𝑦 ,	
𝑤ℎ𝑒𝑟𝑒	1 ≤ 𝑖 ≤ 𝑀 − 𝑊 + 1, 1 ≤ 𝑗 ≤ 𝑁 − 𝑊 + 1, 0 ≤ 𝑥, 𝑦 < 𝑊
(𝐴 𝑖 + 𝑥 𝑗 + 𝑦 	는 행렬 𝐴	의 𝑖 + 𝑥	행 𝑗 + 𝑦열에 위치한 원소, 𝑚𝑒𝑑𝑖𝑎𝑛	은 중앙값*)
l 주어진 행렬 𝐴와 정수 𝑊를 이용하여 행렬 𝐵를 구한다.
<행렬 𝐴와 𝑊로 행렬 𝐵가 만들어지는 과정>
15
을은 위의 문제를 컴퓨터 프로그램으로 해결하기 위해 가방에서 노트북을 꺼내 식탁
위에 펼쳤습니다. 을은 프로그램을 작성하기 시작했습니다. 하지만 잘 되지 않았고
스파게티는 불기 시작했습니다. 스파게티가 모두 불어 버리기 전에, 을을 위해 위의
문제를 해결하는 프로그램을 작성해주세요!
(중앙값*: 중앙값은 어떤 주어진 값들을 크기의 순서대로 정렬했을 때 가장 중앙에
위치하는 값을 의미합니다. 예를 들어, 1, 2, 3, 3, 100 의 다섯 값이 있을 때, 3 이 가장
중앙에 있기 때문에 3 이 중앙값입니다.)
입력 조건
가장 첫 줄에는 테스트 케이스의 수 𝑇	가 100 이하의 자연수로 주어진다.
이후 각 테스트 케이스에 대하여 아래와 같은 형식으로 입력이 주어진다.
l 첫 번째 줄에는 행렬의 크기를 나타내는 정수 𝑀	과 𝑁, 최고 밝기 𝐾, 정수 𝑊가 공백으로
구분되어 차례로 주어진다. (단, 𝑊는 홀수)
l 두 번째 줄부터 1 + 𝑀	번째 줄까지, 각 줄마다 𝑁	개의 0이상 𝐾	이하 정수가 주어진다. 입력
의 1 + 𝑖	번째 줄의 𝑗	번째 정수는 행렬 𝐴	의 𝑖	번째 행, 𝑗	번째 열에 위치한 원소를 의미한다.
Input Value Small Dataset Large Dataset
𝑀, 𝑁 1 ≤ 𝑀, 𝑁 ≤ 30 1 ≤ 𝑀, 𝑁 ≤ 300
𝐾 1 ≤ 𝐾 ≤ 10,000 1 ≤ 𝐾 ≤ 100,000
𝑊 1 ≤ 𝑊 ≤ 𝑚𝑖𝑛(𝑀, 𝑁)
출력 조건
각 테스트 케이스별로 답을 출력한다.
l 각 테스트 케이스의 첫 줄에는 Case #1, Case #2 … 형태로 테스트 케이스의 번호를 출력한다.
l 이후 𝑀 − 𝑊 + 1줄에 걸쳐 정답 행렬 𝐵를 출력한다.
16
예제 데이터1
예시 입력 예상 출력
2
3 3 10 1
1 2 3
4 5 6
7 8 9
3 3 10 3
1 2 3
4 5 6
7 8 9
Case #1
1 2 3
4 5 6
7 8 9
Case #2
5
Case #1 에서, w = 1, median(1) = 1, median(2) = 2, …, median(9) = 9 이므로 입력된 행렬과 동일한
행렬이 답입니다.
Case #2 에서 w = 3 이므로 median(1, 2, 3, 4, 5, 6, 7, 8, 9) = 5 가 답입니다.
예제 데이터2
예시 입력 예상 출력
1
5 5 20 3
5 1 2 8 10
12 10 3 20 7
8 12 19 18 15
17 19 2 5 13
11 2 4 14 16
Case #1
8 10 10
12 12 13
11 12 14
Case #1 정답 행렬의 1 행 1 열에 위치한 8 은 median(5, 1, 2, 12, 10, 3, 8, 12, 19) = 8 연산 과정을
통해 얻어졌습니다.
17
[F] Over Fitting [small: 40pt, Large: 90pt]
문제 설명
요즘은 바야흐로 빅데이터 전성시대. 너도나도 머신러닝과 데이터사이언스를 배우기
위하여 노력하고 있다. 급하게 데이터마이닝과 머신러닝을 공부한 동이는 자신이
배운 내용을 바탕으로 주어진 데이터들을 분류할 수 있는 선형 분류기(Linear
Classifier)를 찾는 알고리즘을 설계하고자 한다.
선형 분류기란 쉽게 말해서 어떤 데이터가 가지고 있는 두 특징 값(x1, x2)을
통하여 올바르게 데이터의 유형을 분류할 수 있는 직선의 방정식을 의미한다. 실제로
주어진 데이터들 사이에서 이러한 방정식 중 최적의 방정식을 자동으로 찾기 위해
수많은 알고리즘들이 개발되었다.
<행렬 𝐴와 𝑊로 행렬 𝐵가 만들어지는 과정>
위의 예시를 보자 H1 과 H2 라는 직선은 두 특징 x1 과 x2 를 통해 흰 그룹과 검은
그룹을 완전히 분류할 수 있으므로 좋은 분류기이다. 하지만 H3 은 직선만으로 두
그룹을 분류할 수 없으므로 좋은 분류기가 아니다.
하지만 항상 이렇게 정확하게 분류할 수 있는 선형 분류기가 존재하는 것은 아니다.
현실의 데이터들은 수많은 예외와 오차가 존재하고 이에 반해서 선형 분류기는 너무
단순하기 때문이다.
18
<위의 데이터들은 선형 분류기를 이용해 두 그룹으로 정확히 나눌 수 있다>
동이는 N 명의 사람을 표현할 수 있는 두 특징값과 각 사람이 가장 좋아하는 걸그룹
정보를 수집하였다. 이를 바탕으로 동이는 두 특징값을 이용해 러블리즈를 가장
좋아하는 사람을 분류할 수 있는 선형 분류기를 찾고자 한다. 동이가 찾고자 하는
선형 분류기는 아래와 같은 조건을 만족하여야 한다.
l 선형 분류기는 특징값을 바탕으로 두 그룹 (Positive, Negative)으로 데이터를 분류한다.
l 직선의 방정식을 기준으로 어떤 방향을 Positive, Negative로 분류할 것인지는 마음대로 설
정할 수 있다.
l Positive 그룹에는 오직 러블리즈가 가장 좋다고 응답한 사람만 포함되어야 한다.
l Negative 그룹에 속한 사람 중 러블리즈가 가장 좋다고 응답한 사람의 수가 적을수록 좋은
선형 분류기이다.
동이는 다양한 알고리즘을 도입하여 자동으로 최적의 선형분류기를 컴퓨터가 찾아낼
수 있도록 할 예정이었지만, 그 전에 자신이 가진 데이터상에서 이론적으로 위의
조건을 만족하는 최적의 선형분류기는 어느 정도의 성능을 가지는지 궁금해졌다.
그래야만 동이의 프로그램이 찾아낸 선형 분류기와 비교하여 성능 평가가 가능하기
때문이다.
동이가 선형 분류기를 만드는 데 사용할 데이터들이 주어질 때, 위의 조건을
만족하며 가장 좋은 선형분류기는 러블리즈를 가장 좋아하는 사람 중 몇 명을
Positive 그룹으로 분류할 수 있는지 계산하는 프로그램을 작성해주자.
19
<흰 점을 가장 많이 Positive 에 포함시키는 선형분류기는 L 이다>
위의 예시를 보자. 흰점이 러블리즈가 가장 좋다고 응답한 사람의 이고 검은 점이
다른 그룹이 가장 좋다고 응답한 데이터라고 하자. Positive 에 흰 점을 가장 많이
포함하는 선형 분류기가 가장 좋은 분류기이므로 Lx 를 설정하고 아래를 Positive,
위를 Negative 로 설정하면 가장 좋은 선형 분류기가 된다. 이때 정답은 7 이 된다.
입력 조건
가장 첫 줄에는 테스트 케이스의 수 𝑇	가 100 이하의 자연수로 주어진다.
이후 각 테스트 케이스에 대하여 아래와 같은 형식으로 입력이 주어진다.
l 첫 번째 응답 데이터 수를 나타내는 자연수 𝑁이	주어진다.
l 이후 N줄에 걸쳐서 각 사람의 두 특징과 가장 좋아하는 그룹의 이름이 공백으로 구분되어
주어진다.
n 𝑥1	𝑥2	𝑁𝐴𝑀𝐸 형식으로 데이터가 주어진다.
n 𝑥1과	𝑥2는 각각 그 사람의 특징을 나타내는 두 정수값이다.
n 그룹의 이름은 공백없이 알파벳 대문자로 주어진다.
n 러블리즈를 가장 좋아한다고 응답한 사람은 항상 그룹 이름이 “LOVELYZ”이다.
l 러블리즈를 가장 좋아하는 사람과 그렇지 않은 사람은 각각 최소 3명씩은 존재한다.
l 각 사람의 특징을 좌표로 2차원 평면 위에 데이터를 나타내었을 때 세 개 이상의 점이 한
직선 위에 놓이는 경우는 없다.
20
Input Value Small Dataset Large Dataset
𝑁 6 ≤ 𝑁 ≤ 100 6 ≤ 𝑁 ≤ 5,000
𝑥1, 𝑥2 −1,000 ≤ 𝑥1, 𝑥2 ≤ 1,000 −10N
≤ 𝑥1, 𝑥2 ≤ 10N
𝑁𝐴𝑀𝐸 1 ≤ 𝐿𝑒𝑛𝑔𝑡ℎ	𝑜𝑓	𝑁𝐴𝑀𝐸 ≤ 15
출력 조건
각 테스트 케이스별로 답을 출력한다.
l 각 테스트 케이스의 첫 줄에는 Case #1, Case #2 … 형태로 테스트 케이스의 번호를 출력한다.
l 이후 최적의 선형분류기가 러블리즈를 좋아하는 사람을 Positive로 분류할 수 있는 수를 한
줄에 출력한다.
예제 데이터1
예시 입력 예상 출력
2
6
1 1 GIRLFRIEND
2 3 GIRLSDAY
3 6 GIRLSGENERATION
3 2 LOVELYZ
4 4 LOVELYZ
6 3 LOVELYZ
7
1 1 WOOLLIM
2 3 LOVELYZ
1 6 EPIKHIGH
5 4 LOVELYZ
6 1 NELL
4 5 LOVELYZ
6 6 INFINITE
Case #1
3
Case #2
0

Contenu connexe

Tendances

2015 한양대학교 프로그래밍 경시대회 - beginner division
2015 한양대학교 프로그래밍 경시대회 - beginner division2015 한양대학교 프로그래밍 경시대회 - beginner division
2015 한양대학교 프로그래밍 경시대회 - beginner divisionNAVER D2
 
[KAIST - RUN] 프로그래밍 경진대회 문제
[KAIST - RUN] 프로그래밍 경진대회 문제[KAIST - RUN] 프로그래밍 경진대회 문제
[KAIST - RUN] 프로그래밍 경진대회 문제NAVER D2
 
인하대 프로그래밍 경진대회 - 문제
인하대 프로그래밍 경진대회 - 문제인하대 프로그래밍 경진대회 - 문제
인하대 프로그래밍 경진대회 - 문제NAVER D2
 
한양대학교 ALOHA - 봄내전대회_알고리즘반
한양대학교 ALOHA - 봄내전대회_알고리즘반한양대학교 ALOHA - 봄내전대회_알고리즘반
한양대학교 ALOHA - 봄내전대회_알고리즘반NAVER D2
 
[D2 CAMPUS] 숭실대 SCCC 프로그래밍 경시대회 문제
[D2 CAMPUS] 숭실대 SCCC 프로그래밍 경시대회 문제[D2 CAMPUS] 숭실대 SCCC 프로그래밍 경시대회 문제
[D2 CAMPUS] 숭실대 SCCC 프로그래밍 경시대회 문제NAVER D2
 
KAIST RUN 교내 ACM-ICPC 모의대회 Advanced division 문제
KAIST RUN 교내 ACM-ICPC 모의대회 Advanced division 문제KAIST RUN 교내 ACM-ICPC 모의대회 Advanced division 문제
KAIST RUN 교내 ACM-ICPC 모의대회 Advanced division 문제NAVER D2
 
KAIST RUN 교내 ACM-ICPC 모의대회 Advanced division 풀이
KAIST RUN 교내 ACM-ICPC 모의대회 Advanced division 풀이KAIST RUN 교내 ACM-ICPC 모의대회 Advanced division 풀이
KAIST RUN 교내 ACM-ICPC 모의대회 Advanced division 풀이NAVER D2
 
서울대학교 2017 SNUPC 문제
서울대학교 2017 SNUPC 문제서울대학교 2017 SNUPC 문제
서울대학교 2017 SNUPC 문제NAVER D2
 
[D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제
[D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제[D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제
[D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제NAVER D2
 
[연세대 모르고리즘] 프로그래밍 경진대회 문제 풀이
[연세대 모르고리즘] 프로그래밍 경진대회 문제 풀이[연세대 모르고리즘] 프로그래밍 경진대회 문제 풀이
[연세대 모르고리즘] 프로그래밍 경진대회 문제 풀이NAVER D2
 
[KAIST - RUN] 프로그래밍 경진대회 문제 풀이
[KAIST - RUN] 프로그래밍 경진대회 문제 풀이[KAIST - RUN] 프로그래밍 경진대회 문제 풀이
[KAIST - RUN] 프로그래밍 경진대회 문제 풀이NAVER D2
 
[D2 CAMPUS] 숭실대 SCCC 프로그래밍 경시대회 문제 풀이
[D2 CAMPUS] 숭실대 SCCC 프로그래밍 경시대회 문제 풀이[D2 CAMPUS] 숭실대 SCCC 프로그래밍 경시대회 문제 풀이
[D2 CAMPUS] 숭실대 SCCC 프로그래밍 경시대회 문제 풀이NAVER D2
 
[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제
[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제
[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제NAVER D2
 
한양대 2017 hcpc advanced division 문제
한양대 2017 hcpc advanced division 문제한양대 2017 hcpc advanced division 문제
한양대 2017 hcpc advanced division 문제NAVER D2
 
shake! 2016 예선 문제 풀이
shake! 2016 예선 문제 풀이shake! 2016 예선 문제 풀이
shake! 2016 예선 문제 풀이HYUNJEONG KIM
 
쏙 알고스터디 01
쏙 알고스터디 01쏙 알고스터디 01
쏙 알고스터디 01Jisu Lee
 
세미나
세미나세미나
세미나Dongyi Kim
 
[D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이
[D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이[D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이
[D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이NAVER D2
 
[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제 풀이
[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제 풀이[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제 풀이
[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제 풀이NAVER D2
 

Tendances (20)

2015 한양대학교 프로그래밍 경시대회 - beginner division
2015 한양대학교 프로그래밍 경시대회 - beginner division2015 한양대학교 프로그래밍 경시대회 - beginner division
2015 한양대학교 프로그래밍 경시대회 - beginner division
 
[KAIST - RUN] 프로그래밍 경진대회 문제
[KAIST - RUN] 프로그래밍 경진대회 문제[KAIST - RUN] 프로그래밍 경진대회 문제
[KAIST - RUN] 프로그래밍 경진대회 문제
 
인하대 프로그래밍 경진대회 - 문제
인하대 프로그래밍 경진대회 - 문제인하대 프로그래밍 경진대회 - 문제
인하대 프로그래밍 경진대회 - 문제
 
한양대학교 ALOHA - 봄내전대회_알고리즘반
한양대학교 ALOHA - 봄내전대회_알고리즘반한양대학교 ALOHA - 봄내전대회_알고리즘반
한양대학교 ALOHA - 봄내전대회_알고리즘반
 
[D2 CAMPUS] 숭실대 SCCC 프로그래밍 경시대회 문제
[D2 CAMPUS] 숭실대 SCCC 프로그래밍 경시대회 문제[D2 CAMPUS] 숭실대 SCCC 프로그래밍 경시대회 문제
[D2 CAMPUS] 숭실대 SCCC 프로그래밍 경시대회 문제
 
KAIST RUN 교내 ACM-ICPC 모의대회 Advanced division 문제
KAIST RUN 교내 ACM-ICPC 모의대회 Advanced division 문제KAIST RUN 교내 ACM-ICPC 모의대회 Advanced division 문제
KAIST RUN 교내 ACM-ICPC 모의대회 Advanced division 문제
 
KAIST RUN 교내 ACM-ICPC 모의대회 Advanced division 풀이
KAIST RUN 교내 ACM-ICPC 모의대회 Advanced division 풀이KAIST RUN 교내 ACM-ICPC 모의대회 Advanced division 풀이
KAIST RUN 교내 ACM-ICPC 모의대회 Advanced division 풀이
 
서울대학교 2017 SNUPC 문제
서울대학교 2017 SNUPC 문제서울대학교 2017 SNUPC 문제
서울대학교 2017 SNUPC 문제
 
[D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제
[D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제[D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제
[D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제
 
[연세대 모르고리즘] 프로그래밍 경진대회 문제 풀이
[연세대 모르고리즘] 프로그래밍 경진대회 문제 풀이[연세대 모르고리즘] 프로그래밍 경진대회 문제 풀이
[연세대 모르고리즘] 프로그래밍 경진대회 문제 풀이
 
[KAIST - RUN] 프로그래밍 경진대회 문제 풀이
[KAIST - RUN] 프로그래밍 경진대회 문제 풀이[KAIST - RUN] 프로그래밍 경진대회 문제 풀이
[KAIST - RUN] 프로그래밍 경진대회 문제 풀이
 
[D2 CAMPUS] 숭실대 SCCC 프로그래밍 경시대회 문제 풀이
[D2 CAMPUS] 숭실대 SCCC 프로그래밍 경시대회 문제 풀이[D2 CAMPUS] 숭실대 SCCC 프로그래밍 경시대회 문제 풀이
[D2 CAMPUS] 숭실대 SCCC 프로그래밍 경시대회 문제 풀이
 
[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제
[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제
[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제
 
한양대 2017 hcpc advanced division 문제
한양대 2017 hcpc advanced division 문제한양대 2017 hcpc advanced division 문제
한양대 2017 hcpc advanced division 문제
 
shake! 2016 예선 문제 풀이
shake! 2016 예선 문제 풀이shake! 2016 예선 문제 풀이
shake! 2016 예선 문제 풀이
 
쏙 알고스터디 01
쏙 알고스터디 01쏙 알고스터디 01
쏙 알고스터디 01
 
세미나
세미나세미나
세미나
 
[D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이
[D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이[D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이
[D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이
 
[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제 풀이
[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제 풀이[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제 풀이
[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제 풀이
 
십진수 이외의 것
십진수 이외의 것십진수 이외의 것
십진수 이외의 것
 

Similaire à [SHAKE] 경인지역 6개연합 프로그래밍 경시대회 - 예선문제(아주대)

Amugona 알고리즘 스터디5회
Amugona 알고리즘 스터디5회Amugona 알고리즘 스터디5회
Amugona 알고리즘 스터디5회정완 전
 
2018 Ajou Programming Contest solutions
2018 Ajou Programming Contest solutions2018 Ajou Programming Contest solutions
2018 Ajou Programming Contest solutions현정 김
 
Dynamic programming
Dynamic programmingDynamic programming
Dynamic programmingskku_npc
 
Java Calculator.pdf
Java Calculator.pdfJava Calculator.pdf
Java Calculator.pdftangtang1026
 

Similaire à [SHAKE] 경인지역 6개연합 프로그래밍 경시대회 - 예선문제(아주대) (6)

internetinternet
internetinternetinternetinternet
internetinternet
 
Amugona 알고리즘 스터디5회
Amugona 알고리즘 스터디5회Amugona 알고리즘 스터디5회
Amugona 알고리즘 스터디5회
 
2018 Ajou Programming Contest solutions
2018 Ajou Programming Contest solutions2018 Ajou Programming Contest solutions
2018 Ajou Programming Contest solutions
 
Dynamic programming
Dynamic programmingDynamic programming
Dynamic programming
 
Java Calculator.pdf
Java Calculator.pdfJava Calculator.pdf
Java Calculator.pdf
 
Sdoku
SdokuSdoku
Sdoku
 

Plus de 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
 

Plus de 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인가?
 

[SHAKE] 경인지역 6개연합 프로그래밍 경시대회 - 예선문제(아주대)

  • 1. 1 - 2017 shake! 공식 예선 문제집 - [A] 경인지역 6 개대학 연합 프로그래밍 경시대회 ....................2 [B] 동방 프로젝트 ........................................................................4 [C] Quilting .................................................................................7 [D] 인공지능 테트리스...............................................................10 [E] 소금과 후추 ..........................................................................14 [F] Over Fitting..........................................................................17
  • 2. 2 [A] 경인지역 6개대학 연합 프로그래밍 경시대회 [small: 20pt, Large: 30pt] 문제 설명 shake!란 경인지역 6 개대학 연합 프로그래밍 경시대회의 명칭이다. 이는 2015 년 경기남부 4 개대학 연합 프로그래밍 경시대회가 확장된 것으로 2017 년, 올해 제 3 회를 맞이했다. 본 대회는 아주대학교, 경희대학교, 성균관대학교, 인하대학교, 한국항공대학교, 한양대학교 ERICA 총 6 개학교 재학생들이 모여 서로간의 교류와 발전을 목표로 한다. 2017 shake! 예선 운영 방식은 다음과 같다. l 문제는 Small 데이터와 Large 데이터로 이루어져 있다. l 문제를 풀기 위해서는 입력 파일을 다운로드 받고, 5분 이내로 이에 맞는 출력 파일과 소스 코드를 업로드해야 한다. l Small 데이터 문제를 해결해야 Large 데이터 입력 파일을 다운로드 받을 수 있다. l 각 문제의 Small, Large 데이터를 해결하면 점수를 얻을 수 있으며, 이 점수는 각각 다르다. l 제출 횟수는 점수를 획득한 문제를 맞기 까지 인풋을 다운로드 받은 횟수의 총합이다. l 즉, 점수를 획득하지 못한 문제의 다운로드 횟수는 포함되지 않는다. 위 운영 방식에 따라 순위는 다음과 같이 결정된다. l 해결한 문제 점수의 총합이 높은 참가자가 더 높은 순위를 가진다. l 점수의 총합이 같은 경우, 제출 횟수가 적은 참가자가 더 높은 순위를 가진다. l 점수의 총합과 제출 횟수가 같은 경우, 마지막으로 점수를 획득한 문제의 업로드 시간이 빠 른 참가자가 더 높은 순위를 가진다. 예선 대회와 본선 대회 방식은 다를 수 있다. 올해에도 shake! 디렉터를 맡게된 현정이는 디렉팅 업무로 며칠째 잠을 제대로 자지 못했다. 현정이의 일을 덜어 잠깐이라도 잘 수 있도록 참가자들의 순위를 계산하는 프로그램을 작성해주자. 입력 조건 가장 첫 줄에는 테스트 케이스의 수 𝑇 가 100 이하의 자연수로 주어진다. 이후 각 테스트 케이스에 대하여 아래와 같은 형식으로 입력이 주어진다. l 첫 번째 줄에는 참가자의 수를 나타내는 자연수 𝑁 이 주어진다.
  • 3. 3 l 두 번째 줄부터 𝑁 개의 줄에 걸쳐 세개의 정수 𝑆%, 𝐶%, 𝐿% 가 주어진다. l 1 + 𝑖 번째 줄의 각 값은 차례로 𝑖 번째 참가자의 점수, 제출 횟수, 마지막으로 점수를 획득 한 문제의 업로드 시간을 나타낸다. Input Value Small Dataset Large Dataset 𝑁 1 ≤ 𝑁 ≤ 3 1 ≤ 𝑁 ≤ 10,000 𝑆% 0 ≤ 𝑆% ≤ 620 𝐶% 0 ≤ 𝐶% ≤ 50 𝐿% 0 ≤ 𝐿% ≤ 179 출력 조건 각 테스트 케이스별로 답을 출력한다. l 각 테스트 케이스의 첫 줄에는 Case #1, Case #2 … 형태로 테스트 케이스의 번호를 출력한다. l 각 케이스마다 1등을 하는 참가자의 번호를 한 줄에 출력한다. 예제 데이터1 예시 입력 예상 출력 2 2 620 7 179 300 5 100 3 300 5 100 620 7 179 600 9 150 Case #1 1 Case #2 2 예제 데이터2 예시 입력 예상 출력 2 2 620 7 179 620 8 100 3 300 5 100 620 7 179 620 8 150 Case #1 1 Case #2 2 이 데이터는 Small Dataset 에서는 나오지 않는다.
  • 4. 4 [B] 동방 프로젝트 [small: 20pt, Large: 40pt] 문제 설명 동아리방이 가지고 싶었던 병찬이는 LINK 사업단에 문의하여 𝑁 개의 방 중의 하나를 얻을 기회를 얻었다. 일자로 되어있는 건물에 𝑁 개의 방은 일직선상에 존재하며, 각 방에는 번호가 매겨져 있다. 맨 왼쪽 방의 번호는 1 번이며, 순서대로 증가하여 맨 오른쪽 방의 번호가 𝑁 번이다. 각 방 사이에는 방을 구분하는 벽이 존재한다. 물론 병찬이 외에도 많은 사람이 동아리방을 원한다. 다행히 방은 충분했기에 병찬이는 안심하고 있었지만… 그때였다. 빅-종빈빌런이 나타나 건물 벽을 허물기 시작한 것이다! 빅-종빈빌런은 다음과 같은 규칙으로 벽을 무너뜨린다. l 𝑥 < 𝑦 를 만족하는 두 방에 대해서 𝑥 번 방부터 𝑦 번 방 사이에 있는 모든 벽을 허문다. l 두 방 사이의 벽이 허물어지면 두 방은 하나의 방으로 합쳐진다. l 이미 허물어진 벽이 존재한다면 무시하고 다음 벽을 허문다. l 빅-종빈빌런은 건물이 무너지는 걸 원치 않기 때문에, 1번 방의 왼쪽 벽과 𝑁 번 방의 오른 쪽 벽(즉, 바깥과 연결된 벽)은 허물지 않는다. 동아리 방의 개수가 점점 줄어들자 병찬이는 초조해졌다. 이에 병찬이는 동아리방을 얻을 수 있는지에 대한 확률을 계산하기 위해 남는 동아리방의 수를 구하고 싶어 한다. 병찬이를 위해 빅-종빈빌런의 행동 횟수 𝑀 과 동방의 개수 𝑁 이 주어졌을 때, 남은 동아리방의 수를 구해주자. 입력 조건 가장 첫 줄에는 테스트 케이스의 수 𝑇 가 100 이하의 자연수로 주어진다. 이후 각 테스트 케이스에 대하여 아래와 같은 형식으로 입력이 주어진다. l 첫 번째 줄에는 동아리방의 개수를 나타내는 양의 정수 𝑁 이 주어진다. l 두 번째 줄에는 빅-종빈빌런의 행동 횟수를 나타내는 음이 아닌 정수 𝑀 이 주어진다. l 세 번째 줄부터 𝑀 개의 줄에 걸쳐 빅-종빈빌런의 행동이 양의 정수 𝑥, 𝑦 로 주어진다. 여기 서 행동이란 𝑥 번 방부터 𝑦 번 방 사이의 벽을 무너뜨리는 것을 의미한다. l 빅-종빈빌런은 매우 허당이기 때문에 동일한 행동을 여러번 할 수 있음에 유의하라.
  • 5. 5 Input Value Small Dataset Large Dataset 𝑁 2 ≤ 𝑁 ≤ 100 2 ≤ 𝑁 ≤ 1,000,000 𝑀 0 ≤ 𝑀 ≤ 100 0 ≤ 𝑀 ≤ 5,000 𝑥, 𝑦 1 ≤ 𝑥 < 𝑦 ≤ 𝑁 1 ≤ 𝑥 < 𝑦 ≤ 𝑁 출력 조건 각 테스트 케이스별로 답을 출력한다. l 각 테스트 케이스의 첫 줄에는 Case #1, Case #2 … 형태로 테스트 케이스의 번호를 출력한다. l 각 케이스마다 빅-종빈빌런의 모든 행동이 끝난 후 남아있는 동방의 개수를 한 줄에 출력한 다. 예제 데이터1 예시 입력 예상 출력 2 5 2 1 2 2 4 5 1 1 5 Case #1 2 Case #2 1 1 번 테스트케이스의 경우 첫 번째 행동으로 1 번과 2 번 방이 합쳐져 (1, 2), (3), (4), (5) 상태가 된다. 이후 두 번째 행동으로 2, 3, 4 번 방이 합쳐져 (1, 2, 3, 4), (5)의 상태가 된다. 따라서 남아있는 동방의 수는 2 가 된다. 예제 데이터2 예시 입력 예상 출력 2 10 3 1 3 2 4 5 8 100 0 Case #1 4 Case #2 100
  • 6. 6 예제 데이터3 예시 입력 예상 출력 2 5 4 1 2 2 3 3 4 4 5 20 6 1 4 1 4 2 5 6 10 11 12 10 11 Case #1 1 Case #2 10
  • 7. 7 [C] Quilting [small: 30pt, Large: 50pt] 문제 설명 이미지 퀼팅(Image Quilting)이란, 하나의 패턴 이미지를 여러 개 이어붙여서 큰 이미지를 만들어내는 것을 말한다. 하지만 단순히 이미지를 나란히 이어붙이는 것만으로는 자연스러운 이미지를 얻을 수 없다. 이어 붙여질 이미지의 경계가 서로 많이 다를 수 있기 때문이다. <왼쪽부터 원본 이미지, 단순히 이어붙인 이미지, 최적화하여 이어붙인 이미지> 위와 같은 문제를 해결하고 위의 3 번째 이미지같이 더욱 자연스러운 이미지를 얻기 위하여 아래와 같은 방법을 사용한다. 이 문제에서는 편의상 높이가 같은 두 흑백 이미지를 좌우로 합치는 것만 고려한다. <두 이미지를 포개어 자연스러운 경계를 선택하는 과정> l 이어붙일 두 이미지를 B1과 B2라고 하자. (B1은 왼쪽, B2는 오른쪽) l 두 이미지의 경계를 조금 포갠다. 포갠 영역의 너비는 최소 2픽셀이다. l 포개어진 영역에서 B2와 B1 이미지의 차이가 최소가 되도록 경계선을 결정한다. 그리고 경 계선과 그 오른쪽 부분을 B1 이미지에 B2 이미지를 덮어써서 새로운 이미지를 생성한다. n 경계선은 포개진 영역의 한 행마다 하나의 픽셀을 선택하여 생성한다. n 경계선의 각 행에 선택된 픽셀은 바로 위 혹은 아래 행에서 선택된 픽셀과 두 칸 이 상 떨어질 수 없다. 한마디로 한 경계선 픽셀은 자신의 바로 아래 혹은 위의 행의 경 계선 픽셀과 좌우로 +1, 0, 1칸 차이가 나는 것만 허용된다. n 각 행은 경계선으로 선택된 픽셀을 기준으로 그 왼쪽은 B1 이미지의 픽셀을 그대로 사용하고, 그 픽셀과 이후 오른쪽 픽셀들은 B2 이미지의 픽셀로 덮어쓰게 된다.
  • 8. 8 <포개어진 5X10 영역에서 선택된 경계선 예시> 실제로 포개어진 영역에 존재할 수 있는 경계선은 경우의 수가 많기 때문에 이 중에 가장 자연스럽게 두 이미지를 이어붙일 수 있는 경계를 선택하여야 한다. 경계선의 부자연스러움 정도는 경계선상의 존재하는 각 픽셀 위치에서의 B1 이미지의 픽셀과 B2 이미지의 픽셀의 색상 값의 차를 제곱하여 모두 더한 값으로 정의할 수 있다. 물론 가장 자연스러운 경계선은 이 중 부자연스러운 정도가 가장 낮은 경계선을 의미한다. <포개어진 영역의 B1 이미지와 B2 이미지, 그리고 최적의 경계선> 이 문제에서는 흑백 영상만을 다루므로 각 픽셀은 0~255 의 정수 형태의 색상 값으로 표현할 수 있다. 위의 예시에서 두 이미지는 세 번째 그림과 같이 경계선을 선택하면 최적이라고 할 수 있으며 이때의 부자연스러움 정도는 아래와 같이 계산할 수 있다. 𝐸 = 79 − 62 ; + 10 − 16 ; + 130 − 120 ; + 235 − 240 ; = 450 두 이미지의 포개어질 영역의 색상값들이 주어질 때, 선택할 수 있는 최적의 경계선이 가지는 최소의 부자연스러움 정도를 계산하여 출력하는 프로그램을 작성하시오.
  • 9. 9 입력 조건 가장 첫 줄에는 테스트 케이스의 수 𝑇 가 100 이하의 자연수로 주어진다. 이후 각 테스트 케이스에 대하여 아래와 같은 형식으로 입력이 주어진다. l 테스트케이스의 첫 줄에는 포개어진 두 이미지의 높이 𝐻 와 포개어진 영역의 너비 𝑊 가 공 백으로 구분된 두 자연수로 주어진다. n 𝐻 는 이미지의 행의 수, 𝑊 는 포개어진 영역의 열의 수를 나타내는 자연수이다. n 이 문제는 포개어질 영역의 색상 값만 주어짐에 유의한다. 입력으로 주어지는 두 이미 지는 모두 𝐻 행 𝑊 열이다. l 그 후 𝐻 줄에 걸쳐서 B1 이미지의 색상값이 주어진다. n 각 줄은 영상의 행이며 𝑊 개의 픽셀의 색상 값이 0~255 범위의 자연수로 주어진다. n 입력으로 주어지는 행/열의 순서와 실제 영상의 행/열의 순서는 일치한다. l 그 후 𝐻 줄에 걸쳐서 B2 이미지의 색상값이 주어진다. 입력 형식은 위의 B1 이미지와 같다. Input Value Small Dataset Large Dataset 𝐻 1 ≤ 𝐻 ≤ 10 1 ≤ 𝐻 ≤ 100 𝑊 1 ≤ 𝑊 ≤ 10 1 ≤ 𝑊 ≤ 100 출력 조건 각 테스트 케이스별로 답을 출력한다. l 각 테스트 케이스의 첫 줄에는 Case #1, Case #2 … 형태로 테스트 케이스의 번호를 출력한다. l 각 케이스마다 두 이미지에서 선택할 수 있는 경계선이 가지는 최소의 부자연스러운 정도를 한 줄에 출력한다. 예제 데이터1 예시 입력 예상 출력 1 4 3 0 79 240 10 110 230 9 130 213 30 70 235 50 62 237 16 58 99 25 120 170 90 120 240 Case #1 450
  • 10. 10 [D] 인공지능 테트리스 [small: 30pt, Large: 60pt] 문제 설명 초보 게임개발자 동이는 프로그래밍을 공부하며 자신만의 테트리스 게임을 개발하고 있다. 테트리스는 이미 세계적으로 유명한 게임으로, 20 행 10 열의 그리드 게임판에서 위에서부터 추락하는 블럭 도형을 회전시키거나 좌우로 위치를 옮겨가며 쌓아 올리는 게임이다. 게임을 진행하는 중에 블럭이 아래위로 충돌하여 멈추게 되면 블럭으로 가득 찬 행은 삭제되고 삭제된 한 줄마다 사용자는 1 점을 얻는다. 이때 그 행 위의 행들은 모양을 유지한 채로 내려온다. 블럭 도형은 총 7 가지 종류가 있으며 사용자는 각각 90, 180, 270 도로 회전시켜 사용할 수도 있다. <20 행 10 열의 게임판 예시(좌)와 일곱가지 테트리스 블럭 도형(우)> 테트리스 게임의 규칙은 비교적 단순하므로 동이는 생각보다 이른 시간 안에 게임을 완성할 수 있었다. 동이는 자신이 만든 테트리스 게임을 손수 플레이하며 테스트하려고 한다. 다만 동이는 평소 손이 느리기로 유명해서 어느 정도 이상의 난이도는 도저히 스스로 클리어할 수가 없었다. 그래서 동이는 자신만을 위해서 아래와 같은 치트 기능을 개발하기로 했다.
  • 11. 11 l 현재 동이가 조작하던 블럭 도형은 제거된다. l 다음번 등장하는 블럭 도형은 동이가 조작할 수 없으며, 자동으로 최적의 위치에 등장하여 최적의 경로로 이동한다. l 다음번 등장하는 블럭은 7가지 도형 중 위와 같이 움직여서 가장 많은 줄을 제거할 수 있 는 도형과 방향이 자동으로 선택된다. l 다만 이동하는 과정에서 도형은 처음 등장한 모양에서 변경되거나 회전하지 않는다. 이를 고려하여 최적의 도형이 등장한다. 예를 들어서 위의 예시로 주어진 게임판에서 치트 기능을 사용하면 4 행 1 열짜리 길쭉한 블럭 도형이 오른쪽 끝 칸에 등장해 자동으로 수직으로 하강한다. 이때 플레이어는 두 줄을 제거하고 2 점을 얻을 수 있다. 다른 도형으로 두 줄 넘게 제거하는 것이 불가능하다. 현재 플레이어의 게임판 정보가 주어질 때 치트 기능을 사용하면 최대 몇 줄을 제거할 수 있을지 계산하는 프로그램을 작성하시오. 단, 현재 가장 위의 네 줄은 항상 모두 비어있음이 보장된다. 입력 조건 가장 첫 줄에는 테스트 케이스의 수 𝑇 가 100 이하의 자연수로 주어진다. 이후 각 테스트 케이스에 대하여 아래와 같은 형식으로 입력이 주어진다. l 총 20줄에 걸쳐서 게임판의 각 줄의 상태를 나타내는 문자열이 0과 1로 구성되어 주어진다. n 각 줄은 10글자이며, 0은 비어있는 칸을 나타내고 1은 블럭이 채워져 있는 칸을 나타 낸다. n 먼저(위에) 입력 된 문자열이 게임판의 위쪽 줄을 나타낸다. n 위에서 1~4번째 줄에는 항상 0으로 채워져 있음이 보장된다. n 각 행마다 적어도 한 칸이 비어있음이 보장된다. Input Value Small Dataset Large Dataset 판의 모양 시작 위치를 잘 잡으면 블록을 좌우로 움직일 필요가 없음 블록이 내려오는 중에 좌우로 움직여야 답을 구할 수 있음
  • 12. 12 출력 조건 각 테스트 케이스별로 답을 출력한다. l 각 테스트 케이스의 첫 줄에는 Case #1, Case #2 … 형태로 테스트 케이스의 번호를 출력한다. l 각 케이스마다 인공지능 기능으로 제거할 수 있는 최대 줄의 수를 한 줄에 출력한다. 예제 데이터1 예시 입력 예상 출력 1 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 1111111110 1111110110 1111111110 1111101110 1111111110 1111011110 1111101110 1111111110 1111111110 Case #1 2 문제 설명에 등장한 예시와 같다. 긴 막대를 오른쪽 끝 줄에 배치하여 수직으로 하강시키면 두 줄을 제거할 수 있다.
  • 13. 13 예제 데이터2 예시 입력 예상 출력 1 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000011 0000000001 0000000001 0000000001 0000000001 1111111101 1111111101 1111111101 1111111101 1111111101 1111111101 1111111101 1111111101 1111111101 Case #1 4 긴 막대를 세운 모양으로 왼쪽 끝 줄에서 하강하다가 모서리를 지나쳐 우측으로 이동시킨 후 다시 하강시키면 4 줄을 제거할 수 있다.
  • 14. 14 [E] 소금과 후추 [small: 30pt, Large: 80pt] 문제 설명 갑과 을은 사귀는 사이입니다. 둘은 근사한 저녁을 먹기로 했습니다. 갑과 을은 저녁에 크림 치즈 스파게티를 먹으러 서*앤*이라는 식당에 들어갔습니다. 먹음직스러운 크림 치즈 스파게티를 보고 예쁘다는 생각이 든 갑은, 스마트폰을 들어 스파게티 사진을 찍었습니다. 그리고 갑은 SNS 중 하나인 인*타*램에 사진을 올리려 하였는데, 그때 사진 속 스파게티 위에 뿌려진 소금과 후추가 갑의 눈에 띄었습니다. 갑은 소금과 후추가 마음에 들지 않았습니다. 사진 속에서 소금과 후추 부분을 제거하고 싶었던 갑은 을에게 사진 속 소금과 후추를 제거해줄 수 있냐고 물었습니다. 을은 바로 해줄 수 있다고 자신감 넘치게 대답하고는 가방에서 A4 용지와 펜을 꺼냈습니다. 그리고 사진 속 소금과 후추를 제거해 줄 방법을 고민하기 시작했습니다. 을은 먼저 문제를 정의하여 A4 용지에 다음과 같이 정리하였습니다. l 입력으로 사진을 나타내는 𝑀x𝑁 행렬 𝐴 가 주어진다. 행렬의 각 원소는 사진 속 한 픽셀의 밝기를 나타내는데, 0이면 가장 어두운 것을 의미하고, 𝐾 면 가장 밝은 것을 의미한다. l 또 다른 입력으로 정수 𝑊 가 주어진다. 𝑊 를 이용해 행렬 𝐵 를 아래와 같이 정의한다. 𝐵 𝑖 𝑗 = 𝑚𝑒𝑑𝑖𝑎𝑛 𝐴 𝑖 + 𝑥 𝑗 + 𝑦 , 𝑤ℎ𝑒𝑟𝑒 1 ≤ 𝑖 ≤ 𝑀 − 𝑊 + 1, 1 ≤ 𝑗 ≤ 𝑁 − 𝑊 + 1, 0 ≤ 𝑥, 𝑦 < 𝑊 (𝐴 𝑖 + 𝑥 𝑗 + 𝑦 는 행렬 𝐴 의 𝑖 + 𝑥 행 𝑗 + 𝑦열에 위치한 원소, 𝑚𝑒𝑑𝑖𝑎𝑛 은 중앙값*) l 주어진 행렬 𝐴와 정수 𝑊를 이용하여 행렬 𝐵를 구한다. <행렬 𝐴와 𝑊로 행렬 𝐵가 만들어지는 과정>
  • 15. 15 을은 위의 문제를 컴퓨터 프로그램으로 해결하기 위해 가방에서 노트북을 꺼내 식탁 위에 펼쳤습니다. 을은 프로그램을 작성하기 시작했습니다. 하지만 잘 되지 않았고 스파게티는 불기 시작했습니다. 스파게티가 모두 불어 버리기 전에, 을을 위해 위의 문제를 해결하는 프로그램을 작성해주세요! (중앙값*: 중앙값은 어떤 주어진 값들을 크기의 순서대로 정렬했을 때 가장 중앙에 위치하는 값을 의미합니다. 예를 들어, 1, 2, 3, 3, 100 의 다섯 값이 있을 때, 3 이 가장 중앙에 있기 때문에 3 이 중앙값입니다.) 입력 조건 가장 첫 줄에는 테스트 케이스의 수 𝑇 가 100 이하의 자연수로 주어진다. 이후 각 테스트 케이스에 대하여 아래와 같은 형식으로 입력이 주어진다. l 첫 번째 줄에는 행렬의 크기를 나타내는 정수 𝑀 과 𝑁, 최고 밝기 𝐾, 정수 𝑊가 공백으로 구분되어 차례로 주어진다. (단, 𝑊는 홀수) l 두 번째 줄부터 1 + 𝑀 번째 줄까지, 각 줄마다 𝑁 개의 0이상 𝐾 이하 정수가 주어진다. 입력 의 1 + 𝑖 번째 줄의 𝑗 번째 정수는 행렬 𝐴 의 𝑖 번째 행, 𝑗 번째 열에 위치한 원소를 의미한다. Input Value Small Dataset Large Dataset 𝑀, 𝑁 1 ≤ 𝑀, 𝑁 ≤ 30 1 ≤ 𝑀, 𝑁 ≤ 300 𝐾 1 ≤ 𝐾 ≤ 10,000 1 ≤ 𝐾 ≤ 100,000 𝑊 1 ≤ 𝑊 ≤ 𝑚𝑖𝑛(𝑀, 𝑁) 출력 조건 각 테스트 케이스별로 답을 출력한다. l 각 테스트 케이스의 첫 줄에는 Case #1, Case #2 … 형태로 테스트 케이스의 번호를 출력한다. l 이후 𝑀 − 𝑊 + 1줄에 걸쳐 정답 행렬 𝐵를 출력한다.
  • 16. 16 예제 데이터1 예시 입력 예상 출력 2 3 3 10 1 1 2 3 4 5 6 7 8 9 3 3 10 3 1 2 3 4 5 6 7 8 9 Case #1 1 2 3 4 5 6 7 8 9 Case #2 5 Case #1 에서, w = 1, median(1) = 1, median(2) = 2, …, median(9) = 9 이므로 입력된 행렬과 동일한 행렬이 답입니다. Case #2 에서 w = 3 이므로 median(1, 2, 3, 4, 5, 6, 7, 8, 9) = 5 가 답입니다. 예제 데이터2 예시 입력 예상 출력 1 5 5 20 3 5 1 2 8 10 12 10 3 20 7 8 12 19 18 15 17 19 2 5 13 11 2 4 14 16 Case #1 8 10 10 12 12 13 11 12 14 Case #1 정답 행렬의 1 행 1 열에 위치한 8 은 median(5, 1, 2, 12, 10, 3, 8, 12, 19) = 8 연산 과정을 통해 얻어졌습니다.
  • 17. 17 [F] Over Fitting [small: 40pt, Large: 90pt] 문제 설명 요즘은 바야흐로 빅데이터 전성시대. 너도나도 머신러닝과 데이터사이언스를 배우기 위하여 노력하고 있다. 급하게 데이터마이닝과 머신러닝을 공부한 동이는 자신이 배운 내용을 바탕으로 주어진 데이터들을 분류할 수 있는 선형 분류기(Linear Classifier)를 찾는 알고리즘을 설계하고자 한다. 선형 분류기란 쉽게 말해서 어떤 데이터가 가지고 있는 두 특징 값(x1, x2)을 통하여 올바르게 데이터의 유형을 분류할 수 있는 직선의 방정식을 의미한다. 실제로 주어진 데이터들 사이에서 이러한 방정식 중 최적의 방정식을 자동으로 찾기 위해 수많은 알고리즘들이 개발되었다. <행렬 𝐴와 𝑊로 행렬 𝐵가 만들어지는 과정> 위의 예시를 보자 H1 과 H2 라는 직선은 두 특징 x1 과 x2 를 통해 흰 그룹과 검은 그룹을 완전히 분류할 수 있으므로 좋은 분류기이다. 하지만 H3 은 직선만으로 두 그룹을 분류할 수 없으므로 좋은 분류기가 아니다. 하지만 항상 이렇게 정확하게 분류할 수 있는 선형 분류기가 존재하는 것은 아니다. 현실의 데이터들은 수많은 예외와 오차가 존재하고 이에 반해서 선형 분류기는 너무 단순하기 때문이다.
  • 18. 18 <위의 데이터들은 선형 분류기를 이용해 두 그룹으로 정확히 나눌 수 있다> 동이는 N 명의 사람을 표현할 수 있는 두 특징값과 각 사람이 가장 좋아하는 걸그룹 정보를 수집하였다. 이를 바탕으로 동이는 두 특징값을 이용해 러블리즈를 가장 좋아하는 사람을 분류할 수 있는 선형 분류기를 찾고자 한다. 동이가 찾고자 하는 선형 분류기는 아래와 같은 조건을 만족하여야 한다. l 선형 분류기는 특징값을 바탕으로 두 그룹 (Positive, Negative)으로 데이터를 분류한다. l 직선의 방정식을 기준으로 어떤 방향을 Positive, Negative로 분류할 것인지는 마음대로 설 정할 수 있다. l Positive 그룹에는 오직 러블리즈가 가장 좋다고 응답한 사람만 포함되어야 한다. l Negative 그룹에 속한 사람 중 러블리즈가 가장 좋다고 응답한 사람의 수가 적을수록 좋은 선형 분류기이다. 동이는 다양한 알고리즘을 도입하여 자동으로 최적의 선형분류기를 컴퓨터가 찾아낼 수 있도록 할 예정이었지만, 그 전에 자신이 가진 데이터상에서 이론적으로 위의 조건을 만족하는 최적의 선형분류기는 어느 정도의 성능을 가지는지 궁금해졌다. 그래야만 동이의 프로그램이 찾아낸 선형 분류기와 비교하여 성능 평가가 가능하기 때문이다. 동이가 선형 분류기를 만드는 데 사용할 데이터들이 주어질 때, 위의 조건을 만족하며 가장 좋은 선형분류기는 러블리즈를 가장 좋아하는 사람 중 몇 명을 Positive 그룹으로 분류할 수 있는지 계산하는 프로그램을 작성해주자.
  • 19. 19 <흰 점을 가장 많이 Positive 에 포함시키는 선형분류기는 L 이다> 위의 예시를 보자. 흰점이 러블리즈가 가장 좋다고 응답한 사람의 이고 검은 점이 다른 그룹이 가장 좋다고 응답한 데이터라고 하자. Positive 에 흰 점을 가장 많이 포함하는 선형 분류기가 가장 좋은 분류기이므로 Lx 를 설정하고 아래를 Positive, 위를 Negative 로 설정하면 가장 좋은 선형 분류기가 된다. 이때 정답은 7 이 된다. 입력 조건 가장 첫 줄에는 테스트 케이스의 수 𝑇 가 100 이하의 자연수로 주어진다. 이후 각 테스트 케이스에 대하여 아래와 같은 형식으로 입력이 주어진다. l 첫 번째 응답 데이터 수를 나타내는 자연수 𝑁이 주어진다. l 이후 N줄에 걸쳐서 각 사람의 두 특징과 가장 좋아하는 그룹의 이름이 공백으로 구분되어 주어진다. n 𝑥1 𝑥2 𝑁𝐴𝑀𝐸 형식으로 데이터가 주어진다. n 𝑥1과 𝑥2는 각각 그 사람의 특징을 나타내는 두 정수값이다. n 그룹의 이름은 공백없이 알파벳 대문자로 주어진다. n 러블리즈를 가장 좋아한다고 응답한 사람은 항상 그룹 이름이 “LOVELYZ”이다. l 러블리즈를 가장 좋아하는 사람과 그렇지 않은 사람은 각각 최소 3명씩은 존재한다. l 각 사람의 특징을 좌표로 2차원 평면 위에 데이터를 나타내었을 때 세 개 이상의 점이 한 직선 위에 놓이는 경우는 없다.
  • 20. 20 Input Value Small Dataset Large Dataset 𝑁 6 ≤ 𝑁 ≤ 100 6 ≤ 𝑁 ≤ 5,000 𝑥1, 𝑥2 −1,000 ≤ 𝑥1, 𝑥2 ≤ 1,000 −10N ≤ 𝑥1, 𝑥2 ≤ 10N 𝑁𝐴𝑀𝐸 1 ≤ 𝐿𝑒𝑛𝑔𝑡ℎ 𝑜𝑓 𝑁𝐴𝑀𝐸 ≤ 15 출력 조건 각 테스트 케이스별로 답을 출력한다. l 각 테스트 케이스의 첫 줄에는 Case #1, Case #2 … 형태로 테스트 케이스의 번호를 출력한다. l 이후 최적의 선형분류기가 러블리즈를 좋아하는 사람을 Positive로 분류할 수 있는 수를 한 줄에 출력한다. 예제 데이터1 예시 입력 예상 출력 2 6 1 1 GIRLFRIEND 2 3 GIRLSDAY 3 6 GIRLSGENERATION 3 2 LOVELYZ 4 4 LOVELYZ 6 3 LOVELYZ 7 1 1 WOOLLIM 2 3 LOVELYZ 1 6 EPIKHIGH 5 4 LOVELYZ 6 1 NELL 4 5 LOVELYZ 6 6 INFINITE Case #1 3 Case #2 0