Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

5,291 views

Published on

부산대학교 알고리즘 동아리 Alcall 주최의 교내 프로그래밍 경시대회 문제 입니다.

Published in: Engineering
  • Login to see the comments

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

  1. 1. 1/17 TEAMNAME member_id member_name member_id member_name member_id member_name 아래의 계정을 이용하세요. TEAM ID: cr1001_1 TEAM PW: PASSWORD
  2. 2. 2/17 PROBLEMS OVERVIEW Problem A : FATB 러브 트라이앵글Problem B : 배열 연산Problem C : 무지개 퍼즐Problem D : 개구리Problem E : 가스레인지Problem F : 피라미드Problem G : 최소공배수Problem H :
  3. 3. 3/17 A FATB 언어 C C++ Java Python 메모리 제한 128MB 128MB 128MB 128MB 시간 제한 1s 1s 2s 3s 문제 명세 두 수 A와 B를 입력받은 다음, A부터 B까지의 합을 출력하는 프로그램을 작성하시오. 입력 명세 첫 번째 줄에 A와 B가 주어진다. (0≤A<B 100)≤ 출력 명세 첫 째 줄에 A부터 B까지의 합을 출력한다. 예제 입력 예제 출력 1 5 15
  4. 4. 4/17 B 러브 트라이앵글 언어 C C++ Java Python 메모리 제한 128MB 128MB 128MB 128MB 시간 제한 1s 1s 2s 3s 문제 명세 러브 트라이앵글은 두 명의 이름을 이용해 둘의 궁합 점수를 계산하는 방법이다, . 러브 트라이앵글은 다음과 같이 궁합 점수를 계산한다. 두 명의 이름을 교차로 배열한다1. . 교차로 배열된 이름의 획 수를 구한다2. . 배열 상에서 인접한 숫자끼리 더하고 을 나눈 나머지 값을 다음 값으로 둔다3. , 10 . 두 개의 값만이 남을 때까지 과정을 반복한다4. 3. . 이해를 돕기위해 김철수와 김영희의 러브 트라이앵글을 계산해보자. 위와 같이 계산하면 김철수와 김영희의 러브 트라이앵글은 이다78% . 참고로 김김영철희수 로 하면 다른 결과가 나온다( " " .) 만약 두 사람의 이름이 길다면 러브 트라이앵글을 계산하는 것은 상당히 귀찮다. 두 사람의 이름의 획 수를 계산해 놓은 배열이 주어질 때 두 사람의 러브 트라이앵글, 점수를 계산하는 프로그램을 작성하시오.
  5. 5. 5/17 입력 명세 첫 번째 줄에 두 사람의 이름의 길이 합 N이 주어진다. 두 번째 줄에는 두 사람의 이름의 획 수를 교차로 계산해 놓은 배열이 주어진다. (4≤N<B 1000,≤ 한 글자당 획수는 9이하) 출력 명세 첫째 줄에 두 자리 정수로 러브 트라이앵글 점수를 출력한다. 단 러브 트라이앵글의 값이, 10보다 작다면 앞에 0을 붙여 출력하라. 예제 입력 예제 출력 6 5 5 8 5 4 5 78 8 5 6 1 7 4 7 2 4 08
  6. 6. 6/17 C 배열 연산 언어 C C++ Java Python 메모리 제한 128MB 128MB 128MB 128MB 시간 제한 1s 1s 2s 3s 문제 명세 길이 인 배열이 주어진다 초기에 배열의 원소는 다음과 같다N . . {0, 1, 2, ... , N 1}− 이 배열에 대해 우리는 가지 연산을 정의한다Left shift, Right shift, Reverse 3 . 해당하는 구간의 첫 번째 원소를 구간의 마지막으로 옮기고 나머지 원소는Left shift : , 한 칸씩 왼쪽으로 옮긴다. 예를 들어 {0, 1, 2, 3, 4}의 [1, 3]구간에 를 적용하면Left shift {0, 2, 3, 1, 4}가 된 다. 해당하는 구간의 마지막 원소를 구간의 처음으로 옮기고 나머지 원소는 한Right shift : , 칸씩 오른쪽으로 옮긴다. 예를 들어 {0, 1, 2, 3, 4}의 [2, 4] 구간에 를 적용하면Right shift {0, 1, 4, 2, 3}가 된다. 해당하는 구간의 원소의 순서를 뒤집는다 예를 들어Reverse : . {0, 1, 2, 3, 4}의 [0,3] 구간에 대해 를 적용하면Reverse {3, 2, 1, 0, 4}가 된다 모든 연산은 아래와 같이 세. 정수로 표현된다. op, l, r (0 ≤ op 2, 0≤ ≤l ≤ r <N) op는 연산의 종류(0: Left shift, 1: Right shift, 2 를 의미하고: Reverse) l, r은 연산을 적용할 배열의 구간을 의미한다. 우리는 초기 배열에 대해 M 개의 연산을 적용하고 난 뒤의 배열의 상태가 궁금하다. 초기 배열의 길이 N 과 연산의 수, M 그리고 배열에 적용한 연산이 순서대로 주어질 때 연산을 적용하고 난 뒤 최종 배열의 상태를 출력하라, .
  7. 7. 7/17 입력 명세 첫 번째 줄에 배열의 길이 N 과 적용한 연산의 수 M 이 주어진다. 다음 M 개의 줄에 적용한 연산이 순서대로 주어진다 각 연산은 세 정수. (op, l, r)로 표현된다. (1 ≤ N, M 1000), (0≤ ≤ op 2 ), (0≤ ≤ l < r < N) 출력 명세 첫 번째 줄에 M 개의 연산을 적용하고 난 뒤의 배열의 상태를 출력하라. 예제 입력 예제 출력 7 3 0 0 3 1 4 6 2 1 5 1 4 6 0 3 2 5
  8. 8. 8/17 D 무지개 퍼즐 언어 C C++ Java Python 메모리 제한 128MB 128MB 128MB 128MB 시간 제한 2s 2s 3s 4s 문제 명세 철수는 한 가지 퍼즐 게임을 생각해냈다 일명 무지개 퍼즐은 숫자가 적힌. n * n 모양 의 퍼즐판에 해당하는 규칙에 따라, 7가지 색의 돌을 놓아 얻을 수 있는 가장 큰 점수 값을 추리하는 게임이다. 게임의 자세한 규칙은 다음과 같다. 놓인 돌끼리는 서로 인접해야 한다1. . 다시 말해 어떤 돌의 상 하 좌 우 중 적어도 한 곳에는 돌이 있어야 한다, , , , . 각 돌은 무지개 색으로 자신에게 해당하는 색깔 점수가 있다2. , . 모든 게임 바닥에는 바닥 점수가 있다3. . 게임의 점수는 색깔 점수 바닥 점수 들을 합한 값 중 최대 값이다4. ( ) * ( ) . 아래 그림은 돌과 퍼즐판 그리고 돌을 놓은 예이다. 철수는 이 게임을 고안하고 10 * 10 크기의 퍼즐판에서 추리를 시작했지만, 10년이 지나 늙도록 끝내지 못 했다 철수는 포기하고. 3 * 3 크기의 퍼즐판부터 정복하기로 마 음먹었다. 여러분은 철수를 도와 3 * 3 크기의 퍼즐판 바닥 점수와 7개 돌의 색깔 점수가 주어질 때 게임 점수를 출력하는 프로그램을 작성하시오.
  9. 9. 9/17 입력 명세 세 개의 줄에 세 개의 숫자씩 퍼즐판의 바닥 점수가 주어진다 다음 줄에는. 7개의 숫자 로 돌의 색깔 점수가 주어진다. 바닥 점수와 색깔 점수는 모두 -100 이상, 100 이하의 정수이다. 출력 명세 주어진 퍼즐판의 게임 점수를 출력하라. 예제 입력 예제 출력 1 2 1 4 5 2 -2 5 1 1 -1 8 4 5 6 3 107
  10. 10. 10/17 E 개구리 언어 C C++ Java Python 메모리 제한 256MB 256MB 256MB 256MB 시간 제한 2s 2s 5s 5s 문제 명세 n 마리의 개구리가 살고 있는 개구리 마을이 있다 그러던 어느 날 갑자기 개구리 마을. 에 포식자가 나타났다 다행히 개구리들은 이런 상황을 대비해 구멍을. m 개 파놓았다. 개구리는 각자 a 의 위치에 있고 임의의 구멍, b 에 숨을 수 있다. 생명을 사랑하는 우리들은 개구리들이 가장 가까운 구멍으로 도망칠 수 있도록 해야 한 다 하지만 안타깝게도 개구리들은 가지 제약을 가지고 있다. 2 . 개구리들은 항상1. k 만큼만 점프할 수 있다. 주어진 개구리 위치에 구멍이 있거나 개구리가 착지한 위치에 구멍이 있어야만 숨2. , 을 수 있다. 만약 위 조건대로라면 아래의 상황에서 개구리는 두 번 점프해서 구멍에 들어갈 수 있, 다. 개구리의 위치 n 개와 구멍의 위치 m 개가 주어질 때 모든 개구리들이 구멍에 숨기, 위해 점프한 거리의 합을 최소로 하여 출력하는 프로그램을 작성하시오. 모든 개구리는 구멍에 들어갈 수 있다고 가정해도 된다( .)
  11. 11. 11/17 입력 명세 n, m, k가 차례대로 주어진다 이어서 개구리들의 위치가. n개의 정수로 구멍의 위치가, m개의 정수로 주어진다. 한 위치에 두 마리 이상의 개구리나 둘 이상의 구멍은 없다 하지만 같은 위치에 개구리. 와 구멍은 있을 수 있다. (1 ≤ n, m, k 100,000), (0≤ ≤ ai, bi 2,000,000),≤ (1 ≤ i ≤ n, 1 ≤ j ≤ m) 출력 명세 모든 개구리들이 구멍에 숨기 위해 점프한 거리의 합의 최소를 출력한다. 예제 입력 예제 출력 1 3 3 8 2 6 9 6 10 3 3 5 7 9 6 1 4 16 3 19 11 8 7 18 72
  12. 12. 12/17 F 가스레인지 언어 C C++ Java Python 메모리 제한 256MB 256MB 256MB 256MB 시간 제한 2s 2s 3s 5s 문제 명세 닥터 스트레인지의 제자 닥터 가스레인지는 아무런 능력이 없지만 닥터 스트레인지를 대신해 자신의 행성을 수호해야 한다. 불쌍한 닥터 가스레인지에게 스승인 닥터 스트레인지는 떠나기 전 시간을 되돌릴 수, 있는 아가모토의 눈 을 빌려주고 갔다 닥터 가스레인지가 거주하고 있는 행성에는" " . n  개의 도시와 (a+b) 개의 도로가 있다. 그런데 어느날 갑자기 n 번 도시에 외계인이 침공하면서, (a+b) 개의 도로 중 b 개 의 도로를 파괴해버렸다. 1 번 도시에 있는 닥터 가스레인지는 n 번 도시를 수호하기 위 해 이동해야한다. 하지만 b 개의 도로가 파괴되어버리면서 n 번 도시로 이동할 수 없게 되었다 닥터 가. 스레인지는 아가모토의 눈 을 사용하여 파괴된 도로의 시간을 파괴되기 전 멀쩡한 도로" " 의 시간으로 되돌릴 수 있다 그러나 시간을 되돌리는 아가모토의 눈 을 사용하는 것은. " " 자연의 법칙을 깨트리는 것이기 때문에 이를 최소화 하고자 한다.
  13. 13. 13/17 예를 들어 닥터 가스레인지의 행성이 위 그림과 같이 생겼다고 하자. 실선은 파괴되지 않은 도로이고 점선은 파괴된 도로이다 닥터 가스레인지는, . {(4, 5), (6, 8)} 또는 {(4, 5), (7, 8)} 도로를 복구하여 n 번 도시까지 갈 수 있으며 이보다 적게 도로를 복구하여, n 번 도시에 가는 방법은 없다. 닥터 가스레인지가 1 번 도시에서 n 번 도시로 갈 수 있도록 도로를 복구하는데 필요 한 아가모토의 눈 의 최소 사용 횟수를 출력하라 단 능력이 부족한 닥터 가스레인지는" " . ( , 아가모토의 눈 을 한 번 사용할 때 한 개의 도로만을 복구할 수 있다" " , .) 입력 명세 첫 번째 줄에 n, a, b 가 주어진다. 다음 a 개의 줄에 두 개의 정수로 파괴되지 않은 도로가 주어지며 두 정수는 도로의, 끝에 있는 두 도시의 번호를 의미한다. 다음 b 개의 줄에 두 개의 정수로 파괴된 도로가 주어지며 두 정수는 도로의 끝에 있, 는 두 도시의 번호를 의미한다. 모든 도시는 1  ~ n 의 서로 다른 번호를 가진다. a 개의 도로와 b 개의 도로 사이에 는 교집합이 없으며 같은 도로는 한 번 보다 많이 주어지지 않는다 또한 모든 도로를, . 복구한다면 1 번 도시에서 n 번 도시로 항상 갈 수 있음이 보장된다. (1 ≤ n 100,000)≤  (1 ≤ a, b 200,000)≤   출력 명세 닥터 가스레인지가 1 번 도시에서 n 번 도시로 갈 수 있도록 도로를 복구하는데 필요 한 아가모토의 눈 의 최소 사용 횟수를 한 개의 정수로 출력하라" " . 예제 입력 예제 출력 8 6 3 1 2 1 3 2 4 3 4 5 6 5 7 4 5 6 8 7 8 2
  14. 14. 14/17 G 피라미드 언어 C C++ Java Python 메모리 제한 256MB 256MB 256MB 256MB 시간 제한 2s 2s 5s 5s 문제 명세 어느 사막에서 거대한 피라미드가 발견되었다 긴급히 파견된 탐사대는 이 피라미드에. 서 n * n 개의 기둥을 발견하였다 탐사대는 모든 기둥이 발견된 위치. (i, j) 와 기둥의 높이 mi,j 를 기록하였다 안타깝게도 탐사대는 피라미드가 너무 거대한 나머지 피라미. , , 드의 높이를 측정할 수 없었다. 여러 방면에서 뛰어난 탐사대 대장은 아래와 같은 기둥의 위치와 높이의 특징을 이용해 피라미드의 높이를 추측해냈다. 1. n * n 개의 기둥은 정사각형 모양에 밀집되어 있다. 피라미드의 바닥면은 정사각형 모양이다 또한 피라미드와 기둥의 정사각형의 변들은2. . x 축이나 y 축에 평행이다. 피라미드는 모든 기둥을 감싸고 있고 높이가3. , 1 인 계단들로 이루어진 사각뿔 모양 을 가진다 피라미드 한 칸의 높이가 기둥의 높이보다 크거나 같다면 감싼다고 한다. ( , .) 피라미드의 최상단 꼭짓점은 항상4. 1 * 1 크기이고 바닥에서 최상단 꼭지점 까지의, 거리를 피라미드의 높이라고 한다.
  15. 15. 15/17 탐사대가 복귀한 후 탐사대 대장은 앞으로 피라미드가 더 발견될 것이라고 생각하여 여, 러분들에게 피라미드의 높이를 구해주는 프로그램 제작을 의뢰하였다. 피라미드 내의 n * n 개의 기둥과 높이가 주어질 때 위 특징을 모두 만족하는 피라미, 드의 높이 중 가장 작은 값을 출력하는 프로그램을 작성하시오. 입력 명세 첫 번째 줄에 n 이 주어지고 이어서 기둥의 높이가, n 줄에 걸쳐 n 개의 정수로 입력 된다. mi,j 는 i 번째 줄의 j 번째 수이다. (3 ≤ n 500)(0≤ ≤ m i,j  1,000,000)≤ 길이가 인 기둥도 있을 수 있음에 주의하라( 0 .) 출력 명세 본문에서 제시한 특징을 모두 만족하는 피라미드의 높이 중 가장 작은 값을 정수 한 개 로 출력하라. 예제 입력 예제 출력 3 8 1 8 1 1 1 8 1 8 9 4 2 3 3 3 2 3 4 3 2 3 3 3 2 2 2 2 4
  16. 16. 16/17 H 최소공배수 언어 C C++ Java Python 메모리 제한 256MB 256MB 256MB 256MB 시간 제한 2s 2s 5s 15s 문제 명세 모든 자연수는 자신보다 작거나 같은 자연수들의 곱으로 나타낼 수 있다 우리는 위 방. 법으로 표현된 두 자연수 x 와 y 의 최소공배수를 구하려고 한다 여기서 두 자연수의.( 최소공배수는 두 자연수의 공배수 중 가장 작은 자연수라 정의한다.) x 와 y 가 아래와 같이 주어졌을 때, x 와 y 의 최소공배수를 출력하는 프로그램을 작성하시오.     ×  ×⋯ ×    ×      ×  ×⋯ ×    ×  단 답이 매우 커질 있으므로( , 1,000,000,007 으로 나눈 나머지를 출력하시오.) 입력 명세 첫 번째 줄에 n, m 이 주어진다 다음. n 개의 줄에는 ai , pi 가 주어진다 다음  . m 개 의 줄에는 bi , qi 가 주어진다. (1 ≤ n, m ≤   ) (1 ≤ ai , bi  ≤ ) (1 ≤ pi , qi ≤  ) 출력 명세 x 와 y 의 최소 공배수를   로 나눈 나머지를 출력하라.
  17. 17. 17/17 예제 입력 예제 출력 2 3 2 3 3 2 4 1 1 9 6 2 144 3 5 9 8 4 9 3 10 2 39 20 3 8 10 14 5 6 10 201253769

×