문제
+두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.
+diff --git a/storage/zeta/_static/1000.html b/storage/zeta/_static/1000.html new file mode 100644 index 0000000..9d626fe --- /dev/null +++ b/storage/zeta/_static/1000.html @@ -0,0 +1,151 @@ + + +
+ + +두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.
+첫째 줄에 A와 B가 주어진다. (0 < A, B < 10)
+첫째 줄에 A+B를 출력한다.
+여기를 누르면 1000번 예제 소스를 볼 수 있습니다.
+1 2 ++
3 ++
두 정수 A와 B를 입력받은 다음, A-B를 출력하는 프로그램을 작성하시오.
+첫째 줄에 A와 B가 주어진다. (0 < A, B < 10)
+첫째 줄에 A-B를 출력한다.
+3 2 ++
1+
조규현과 백승환은 터렛에 근무하는 직원이다. 하지만 워낙 존재감이 없어서 인구수는 차지하지 않는다. 다음은 조규현과 백승환의 사진이다.
+ +이석원은 조규현과 백승환에게 상대편 마린(류재명)의 위치를 계산하라는 명령을 내렸다. 조규현과 백승환은 각각 자신의 터렛 위치에서 현재 적까지의 거리를 계산했다.
+ +조규현의 좌표 와 백승환의 좌표 가 주어지고, 조규현이 계산한 류재명과의 거리 과 백승환이 계산한 류재명과의 거리 가 주어졌을 때, 류재명이 있을 수 있는 좌표의 수를 출력하는 프로그램을 작성하시오.
+첫째 줄에 테스트 케이스의 개수 가 주어진다. 각 테스트 케이스는 다음과 같이 이루어져 있다.
+ +한 줄에 공백으로 구분 된 여섯 정수 , , , , , 가 주어진다.
+각 테스트 케이스마다 류재명이 있을 수 있는 위치의 수를 출력한다. 만약 류재명이 있을 수 있는 위치의 개수가 무한대일 경우에는 출력한다.
+3 +0 0 13 40 0 37 +0 0 3 0 7 4 +1 1 1 1 1 5 ++
2 +1 +0 ++
다음 소스는 N번째 피보나치 수를 구하는 C++ 함수이다.
+ +int fibonacci(int n) {
+ if (n == 0) {
+ printf("0");
+ return 0;
+ } else if (n == 1) {
+ printf("1");
+ return 1;
+ } else {
+ return fibonacci(n‐1) + fibonacci(n‐2);
+ }
+}
+
+
+fibonacci(3)을 호출하면 다음과 같은 일이 일어난다.
fibonacci(3)은 fibonacci(2)와 fibonacci(1) (첫 번째 호출)을 호출한다.fibonacci(2)는 fibonacci(1) (두 번째 호출)과 fibonacci(0)을 호출한다.fibonacci(1)은 1을 출력하고 1을 리턴한다.fibonacci(0)은 0을 출력하고, 0을 리턴한다.fibonacci(2)는 fibonacci(1)과 fibonacci(0)의 결과를 얻고, 1을 리턴한다.fibonacci(1)은 1을 출력하고, 1을 리턴한다.fibonacci(3)은 fibonacci(2)와 fibonacci(1)의 결과를 얻고, 2를 리턴한다.1은 2번 출력되고, 0은 1번 출력된다. N이 주어졌을 때, fibonacci(N)을 호출했을 때, 0과 1이 각각 몇 번 출력되는지 구하는 프로그램을 작성하시오.
첫째 줄에 테스트 케이스의 개수 T가 주어진다.
+ +각 테스트 케이스는 한 줄로 이루어져 있고, N이 주어진다. N은 40보다 작거나 같은 자연수 또는 0이다.
+각 테스트 케이스마다 0이 출력되는 횟수와 1이 출력되는 횟수를 공백으로 구분해서 출력한다.
+3 +0 +1 +3 ++
2 +6 +22 ++
1 0 +0 1 +1 2 ++
5 8 +10946 17711 ++
어린 왕자는 소혹성 B-664에서 자신이 사랑하는 한 송이 장미를 위해 살아간다. 어느 날 장미가 위험에 빠지게 된 것을 알게 된 어린 왕자는, 장미를 구하기 위해 은하수를 따라 긴 여행을 하기 시작했다. 하지만 어린 왕자의 우주선은 그렇게 좋지 않아서 행성계 간의 이동을 최대한 피해서 여행해야 한다. 아래의 그림은 어린 왕자가 펼쳐본 은하수 지도의 일부이다.
+ +빨간 실선은 어린 왕자가 출발점에서 도착점까지 도달하는데 있어서 필요한 행성계 진입/이탈 횟수를 최소화하는 경로이며, 원은 행성계의 경계를 의미한다. 이러한 경로는 여러 개 존재할 수 있지만 적어도 3번의 행성계 진입/이탈이 필요하다는 것을 알 수 있다.
+ +위와 같은 은하수 지도, 출발점, 도착점이 주어졌을 때 어린 왕자에게 필요한 최소의 행성계 진입/이탈 횟수를 구하는 프로그램을 작성해 보자. 행성계의 경계가 맞닿거나 서로 교차하는 경우는 없다. 또한, 출발점이나 도착점이 행성계 경계에 걸쳐진 경우 역시 입력으로 주어지지 않는다.
+입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다. 그 다음 줄부터 각각의 테스트케이스에 대해 첫째 줄에 출발점 (x1, y1)과 도착점 (x2, y2)이 주어진다. 두 번째 줄에는 행성계의 개수 n이 주어지며, 세 번째 줄부터 n줄에 걸쳐 행성계의 중점과 반지름 (cx, cy, r)이 주어진다.
+각 테스트 케이스에 대해 어린 왕자가 거쳐야 할 최소의 행성계 진입/이탈 횟수를 출력한다.
+2 +-5 1 12 1 +7 +1 1 8 +-3 -1 1 +2 2 2 +5 5 1 +-4 5 1 +12 1 1 +12 1 2 +-5 1 5 1 +1 +0 0 2 ++
3 +-5 1 5 1 +3 +0 0 2 +-6 1 2 +6 2 2 +2 3 13 2 +8 +-3 -1 1 +2 2 3 +2 3 1 +0 1 7 +-4 5 1 +12 1 1 +12 1 2 +12 1 3 +102 16 19 -108 +12 +-107 175 135 +-38 -115 42 +140 23 70 +148 -2 39 +-198 -49 89 +172 -151 39 +-179 -52 43 +148 42 150 +176 0 10 +153 68 120 +-56 109 16 +-187 -174 8 ++
3 +0 ++
2 +5 +3 ++
서기 2012년! 드디어 2년간 수많은 국민들을 기다리게 한 게임 ACM Craft (Association of Construction Manager Craft)가 발매되었다.
+ +이 게임은 지금까지 나온 게임들과는 다르게 ACM크래프트는 다이나믹한 게임 진행을 위해 건물을 짓는 순서가 정해져 있지 않다. 즉, 첫 번째 게임과 두 번째 게임이 건물을 짓는 순서가 다를 수도 있다. 매 게임시작 시 건물을 짓는 순서가 주어진다. 또한 모든 건물은 각각 건설을 시작하여 완성이 될 때까지 Delay가 존재한다.
+ ++ +
위의 예시를 보자.
+ +이번 게임에서는 다음과 같이 건설 순서 규칙이 주어졌다. 1번 건물의 건설이 완료된다면 2번과 3번의 건설을 시작할수 있다. (동시에 진행이 가능하다) 그리고 4번 건물을 짓기 위해서는 2번과 3번 건물이 모두 건설 완료되어야지만 4번건물의 건설을 시작할수 있다.
+ +따라서 4번건물의 건설을 완료하기 위해서는 우선 처음 1번 건물을 건설하는데 10초가 소요된다. 그리고 2번 건물과 3번 건물을 동시에 건설하기 시작하면 2번은 1초뒤에 건설이 완료되지만 아직 3번 건물이 완료되지 않았으므로 4번 건물을 건설할 수 없다. 3번 건물이 완성되고 나면 그때 4번 건물을 지을수 있으므로 4번 건물이 완성되기까지는 총 120초가 소요된다.
+ +프로게이머 최백준은 애인과의 데이트 비용을 마련하기 위해 서강대학교배 ACM크래프트 대회에 참가했다! 최백준은 화려한 컨트롤 실력을 가지고 있기 때문에 모든 경기에서 특정 건물만 짓는다면 무조건 게임에서 이길 수 있다. 그러나 매 게임마다 특정건물을 짓기 위한 순서가 달라지므로 최백준은 좌절하고 있었다. 백준이를 위해 특정건물을 가장 빨리 지을 때까지 걸리는 최소시간을 알아내는 프로그램을 작성해주자.
+첫째 줄에는 테스트케이스의 개수 T가 주어진다. 각 테스트 케이스는 다음과 같이 주어진다. 첫째 줄에 건물의 개수 N과 건물간의 건설순서 규칙의 총 개수 K이 주어진다. (건물의 번호는 1번부터 N번까지 존재한다)
+ +둘째 줄에는 각 건물당 건설에 걸리는 시간 D1, D2, ..., DN이 공백을 사이로 주어진다. 셋째 줄부터 K+2줄까지 건설순서 X Y가 주어진다. (이는 건물 X를 지은 다음에 건물 Y를 짓는 것이 가능하다는 의미이다)
+ +마지막 줄에는 백준이가 승리하기 위해 건설해야 할 건물의 번호 W가 주어진다.
+건물 W를 건설완료 하는데 드는 최소 시간을 출력한다. 편의상 건물을 짓는 명령을 내리는 데는 시간이 소요되지 않는다고 가정한다.
+ +건설순서는 모든 건물이 건설 가능하도록 주어진다.
+2 +4 4 +10 1 100 10 +1 2 +1 3 +2 4 +3 4 +4 +8 8 +10 20 1 5 8 7 1 43 +1 2 +1 3 +2 4 +2 5 +3 6 +5 7 +6 7 +7 8 +7 ++
5 +3 2 +1 2 3 +3 2 +2 1 +1 +4 3 +5 5 5 5 +1 2 +1 3 +2 3 +4 +5 10 +100000 99999 99997 99994 99990 +4 5 +3 5 +3 4 +2 5 +2 4 +2 3 +1 5 +1 4 +1 3 +1 2 +4 +4 3 +1 1 1 1 +1 2 +3 2 +1 4 +4 +7 8 +0 0 0 0 0 0 0 +1 2 +1 3 +2 4 +3 4 +4 5 +4 6 +5 7 +6 7 +7 ++
120 +39 ++
6 +5 +399990 +2 +0 ++
A permutation of integers from 1 to n is a sequence a1, a2, ..., an, such that each integer from 1 to n is appeared in the sequence exactly once.
+ +Two integers in а permutation form an inversion, when the bigger one is before the smaller one.
+ +As an example, in the permutation 4 2 7 1 5 6 3, there are 10 inversions in total. They are the following pairs: 4–2, 4–1, 4–3, 2–1, 7–1, 7–5, 7–6, 7–3, 5–3, 6–3.
+ +Write program invcnt that computes the number of the inversions in a given permutation.
+The value for the number n is written on the first line of the standard input. The permutation is written on the second line: n numbers, delimited by spaces.
+Write the count of inversions on the standard output.
+7 +4 2 7 1 5 6 3 ++
10 ++
재원이는 한 도시의 시장이 되었다. 이 도시에는 도시를 동쪽과 서쪽으로 나누는 큰 일직선 모양의 강이 흐르고 있다. 하지만 재원이는 다리가 없어서 시민들이 강을 건너는데 큰 불편을 겪고 있음을 알고 다리를 짓기로 결심하였다. 강 주변에서 다리를 짓기에 적합한 곳을 사이트라고 한다. 재원이는 강 주변을 면밀히 조사해 본 결과 강의 서쪽에는 N개의 사이트가 있고 동쪽에는 M개의 사이트가 있다는 것을 알았다. (N ≤ M)
+ +재원이는 서쪽의 사이트와 동쪽의 사이트를 다리로 연결하려고 한다. (이때 한 사이트에는 최대 한 개의 다리만 연결될 수 있다.) 재원이는 다리를 최대한 많이 지으려고 하기 때문에 서쪽의 사이트 개수만큼 (N개) 다리를 지으려고 한다. 다리끼리는 서로 겹쳐질 수 없다고 할 때 다리를 지을 수 있는 경우의 수를 구하는 프로그램을 작성하라.
+ +입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다. 그 다음 줄부터 각각의 테스트케이스에 대해 강의 서쪽과 동쪽에 있는 사이트의 개수 정수 N, M (0 < N ≤ M < 30)이 주어진다.
+각 테스트 케이스에 대해 주어진 조건하에 다리를 지을 수 있는 경우의 수를 출력한다.
+3 +2 2 +1 5 +13 29 ++
1 +5 +67863915 ++
창영이는 삼각형의 종류를 잘 구분하지 못한다. 따라서 프로그램을 이용해 이를 외우려고 한다.
+ +삼각형의 세 각을 입력받은 다음,
+ +를 출력하는 프로그램을 작성하시오.
+총 3개의 줄에 걸쳐 삼각형의 각의 크기가 주어진다. 모든 정수는 0보다 크고, 180보다 작다.
+문제의 설명에 따라 Equilateral, Isosceles, Scalene, Error 중 하나를 출력한다.
+60 +70 +50 ++
Scalene ++
우현이는 어린 시절, 지구 외의 다른 행성에서도 인류들이 살아갈 수 있는 미래가 오리라 믿었다. 그리고 그가 지구라는 세상에 발을 내려 놓은 지 23년이 지난 지금, 세계 최연소 ASNA 우주 비행사가 되어 새로운 세계에 발을 내려 놓는 영광의 순간을 기다리고 있다.
+ +그가 탑승하게 될 우주선은 Alpha Centauri라는 새로운 인류의 보금자리를 개척하기 위한 대규모 생활 유지 시스템을 탑재하고 있기 때문에, 그 크기와 질량이 엄청난 이유로 최신기술력을 총 동원하여 개발한 공간이동 장치를 탑재하였다. 하지만 이 공간이동 장치는 이동 거리를 급격하게 늘릴 경우 기계에 심각한 결함이 발생하는 단점이 있어서, 이전 작동시기에 k광년을 이동하였을 때는 k-1 , k 혹은 k+1 광년만을 다시 이동할 수 있다. 예를 들어, 이 장치를 처음 작동시킬 경우 -1 , 0 , 1 광년을 이론상 이동할 수 있으나 사실상 음수 혹은 0 거리만큼의 이동은 의미가 없으므로 1 광년을 이동할 수 있으며, 그 다음에는 0 , 1 , 2 광년을 이동할 수 있는 것이다. ( 여기서 다시 2광년을 이동한다면 다음 시기엔 1, 2, 3 광년을 이동할 수 있다. )
+ +김우현은 공간이동 장치 작동시의 에너지 소모가 크다는 점을 잘 알고 있기 때문에 x지점에서 y지점을 향해 최소한의 작동 횟수로 이동하려 한다. 하지만 y지점에 도착해서도 공간 이동장치의 안전성을 위하여 y지점에 도착하기 바로 직전의 이동거리는 반드시 1광년으로 하려 한다.
+ +김우현을 위해 x지점부터 정확히 y지점으로 이동하는데 필요한 공간 이동 장치 작동 횟수의 최솟값을 구하는 프로그램을 작성하라.
+입력의 첫 줄에는 테스트케이스의 개수 T가 주어진다. 각각의 테스트 케이스에 대해 현재 위치 x 와 목표 위치 y 가 정수로 주어지며, x는 항상 y보다 작은 값을 갖는다. (0 ≤ x < y < 231)
+각 테스트 케이스에 대해 x지점으로부터 y지점까지 정확히 도달하는데 필요한 최소한의 공간이동 장치 작동 횟수를 출력한다.
+3 +0 3 +1 5 +45 50 ++
3 +3 +4 ++
차세대 영농인 한나는 강원도 고랭지에서 유기농 배추를 재배하기로 하였다. 농약을 쓰지 않고 배추를 재배하려면 배추를 해충으로부터 보호하는 것이 중요하기 때문에, 한나는 해충 방지에 효과적인 배추흰지렁이를 구입하기로 결심한다. 이 지렁이는 배추근처에 서식하며 해충을 잡아 먹음으로써 배추를 보호한다. 특히, 어떤 배추에 배추흰지렁이가 한 마리라도 살고 있으면 이 지렁이는 인접한 다른 배추로 이동할 수 있어, 그 배추들 역시 해충으로부터 보호받을 수 있다. 한 배추의 상하좌우 네 방향에 다른 배추가 위치한 경우에 서로 인접해있는 것이다.
+ +한나가 배추를 재배하는 땅은 고르지 못해서 배추를 군데군데 심어 놓았다. 배추들이 모여있는 곳에는 배추흰지렁이가 한 마리만 있으면 되므로 서로 인접해있는 배추들이 몇 군데에 퍼져있는지 조사하면 총 몇 마리의 지렁이가 필요한지 알 수 있다. 예를 들어 배추밭이 아래와 같이 구성되어 있으면 최소 5마리의 배추흰지렁이가 필요하다. 0은 배추가 심어져 있지 않은 땅이고, 1은 배추가 심어져 있는 땅을 나타낸다.
+ +| 1 | +1 | +0 | +0 | +0 | +0 | +0 | +0 | +0 | +0 | +
| 0 | +1 | +0 | +0 | +0 | +0 | +0 | +0 | +0 | +0 | +
| 0 | +0 | +0 | +0 | +1 | +0 | +0 | +0 | +0 | +0 | +
| 0 | +0 | +0 | +0 | +1 | +0 | +0 | +0 | +0 | +0 | +
| 0 | +0 | +1 | +1 | +0 | +0 | +0 | +1 | +1 | +1 | +
| 0 | +0 | +0 | +0 | +1 | +0 | +0 | +1 | +1 | +1 | +
입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다. 그 다음 줄부터 각각의 테스트 케이스에 대해 첫째 줄에는 배추를 심은 배추밭의 가로길이 M(1 ≤ M ≤ 50)과 세로길이 N(1 ≤ N ≤ 50), 그리고 배추가 심어져 있는 위치의 개수 K(1 ≤ K ≤ 2500)이 주어진다. 그 다음 K줄에는 배추의 위치 X(0 ≤ X ≤ M-1), Y(0 ≤ Y ≤ N-1)가 주어진다. 두 배추의 위치가 같은 경우는 없다.
+각 테스트 케이스에 대해 필요한 최소의 배추흰지렁이 마리 수를 출력한다.
+2 +10 8 17 +0 0 +1 0 +1 1 +4 2 +4 3 +4 5 +2 4 +3 4 +7 4 +8 4 +9 4 +7 5 +8 5 +9 5 +7 6 +8 6 +9 6 +10 10 1 +5 5 ++
1 +5 3 6 +0 2 +1 2 +2 2 +3 2 +4 2 +4 0 ++
5 +1 ++
2 ++
아래 예제와 같이 고양이를 출력하시오.
+없음.
+고양이를 출력한다.
+\ /\ + ) ( ') +( / ) + \(__)| ++
지민이는 자신의 저택에서 MN개의 단위 정사각형으로 나누어져 있는 M×N 크기의 보드를 찾았다. 어떤 정사각형은 검은색으로 칠해져 있고, 나머지는 흰색으로 칠해져 있다. 지민이는 이 보드를 잘라서 8×8 크기의 체스판으로 만들려고 한다.
+ +체스판은 검은색과 흰색이 번갈아서 칠해져 있어야 한다. 구체적으로, 각 칸이 검은색과 흰색 중 하나로 색칠되어 있고, 변을 공유하는 두 개의 사각형은 다른 색으로 칠해져 있어야 한다. 따라서 이 정의를 따르면 체스판을 색칠하는 경우는 두 가지뿐이다. 하나는 맨 왼쪽 위 칸이 흰색인 경우, 하나는 검은색인 경우이다.
+ +보드가 체스판처럼 칠해져 있다는 보장이 없어서, 지민이는 8×8 크기의 체스판으로 잘라낸 후에 몇 개의 정사각형을 다시 칠해야겠다고 생각했다. 당연히 8*8 크기는 아무데서나 골라도 된다. 지민이가 다시 칠해야 하는 정사각형의 최소 개수를 구하는 프로그램을 작성하시오.
+첫째 줄에 N과 M이 주어진다. N과 M은 8보다 크거나 같고, 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 보드의 각 행의 상태가 주어진다. B는 검은색이며, W는 흰색이다.
+첫째 줄에 지민이가 다시 칠해야 하는 정사각형 개수의 최솟값을 출력한다.
+8 8 +WBWBWBWB +BWBWBWBW +WBWBWBWB +BWBBBWBW +WBWBWBWB +BWBWBWBW +WBWBWBWB +BWBWBWBW ++
10 13 +BBBBBBBBWBWBW +BBBBBBBBBWBWB +BBBBBBBBWBWBW +BBBBBBBBBWBWB +BBBBBBBBWBWBW +BBBBBBBBBWBWB +BBBBBBBBWBWBW +BBBBBBBBBWBWB +WWWWWWWWWWBWB +WWWWWWWWWWBWB ++
8 8 +BWBWBWBW +WBWBWBWB +BWBWBWBW +WBWBWBWB +BWBWBWBW +WBWBWBWB +BWBWBWBW +WBWBWBWB ++
9 23 +BBBBBBBBBBBBBBBBBBBBBBB +BBBBBBBBBBBBBBBBBBBBBBB +BBBBBBBBBBBBBBBBBBBBBBB +BBBBBBBBBBBBBBBBBBBBBBB +BBBBBBBBBBBBBBBBBBBBBBB +BBBBBBBBBBBBBBBBBBBBBBB +BBBBBBBBBBBBBBBBBBBBBBB +BBBBBBBBBBBBBBBBBBBBBBB +BBBBBBBBBBBBBBBBBBBBBBW ++
10 10 +BBBBBBBBBB +BBWBWBWBWB +BWBWBWBWBB +BBWBWBWBWB +BWBWBWBWBB +BBWBWBWBWB +BWBWBWBWBB +BBWBWBWBWB +BWBWBWBWBB +BBBBBBBBBB ++
8 8 +WBWBWBWB +BWBWBWBW +WBWBWBWB +BWBBBWBW +WBWBWBWB +BWBWBWBW +WBWBWWWB +BWBWBWBW ++
11 12 +BWWBWWBWWBWW +BWWBWBBWWBWW +WBWWBWBBWWBW +BWWBWBBWWBWW +WBWWBWBBWWBW +BWWBWBBWWBWW +WBWWBWBBWWBW +BWWBWBWWWBWW +WBWWBWBBWWBW +BWWBWBBWWBWW +WBWWBWBBWWBW ++
1 ++
12 ++
0 ++
31 ++
0 ++
2 ++
15 ++
크기가 무한인 정사각형 모눈종이가 있다. 모눈종이의 각 정사각형은 행과 열의 쌍으로 표현할 수 있다.
+ +이 모눈종이 전체를 양의 정수의 소용돌이 모양으로 채울 것이다. 일단 숫자 1을 0행 0열에 쓴다. 그리고 나서 0행 1열에 숫자 2를 쓴다. 거기서 부터 소용돌이는 반시계 방향으로 시작된다. 다음 숫자는 다음과 같이 채우면 된다.
+ ++ -3 -2 -1 0 1 2 3 + -------------------- +-3 |37 36 35 34 33 32 31 +-2 |38 17 16 15 14 13 30 +-1 |39 18 5 4 3 12 29 + 0 |40 19 6 1 2 11 28 + 1 |41 20 7 8 9 10 27 + 2 |42 21 22 23 24 25 26 + 3 |43 44 45 46 47 48 49+ +
이 문제는 위와 같이 채운 것을 예쁘게 출력하면 된다. r1, c1, r2, c2가 입력으로 주어진다. r1, c1은 가장 왼쪽 위 칸이고, r2, c2는 가장 오른쪽 아래 칸이다.
+ +예쁘게 출력한다는 것은 다음과 같이 출력하는 것이다.
+ +첫째 줄에 네 정수 r1, c1, r2, c2가 주어진다.
+r2 - r1 + 1개의 줄에 소용돌이를 예쁘게 출력한다.
+-3 -3 2 0 ++
-2 2 0 3 ++
-1 -2 -1 1 ++
0 0 0 0 ++
37 36 35 34 +38 17 16 15 +39 18 5 4 +40 19 6 1 +41 20 7 8 +42 21 22 23 ++
13 30 +12 29 +11 28 ++
18 5 4 3 ++
1 ++
VAT (value-added tax) is a tax imposed at a certain rate proportional to the sale price.
+ +Our store uses the following rules to calculate the after-tax prices.
+ +The VAT rate is changed quite often. Our accountant has become aware that "different pairs of items that had the same total after-tax price may have different total after-tax prices after VAT rate changes." For example, when the VAT rate rises from 5% to 8%, a pair of items that had the total after-tax prices of 105 yen before can now have after-tax prices either of 107, 108, or 109 yen, as shown in the table below.
+ +| Before-tax prices of two items | +After-tax price with 5% VAT | +After-tax price with 8% VAT | +
|---|---|---|
| 20, 80 | +21 + 84 = 105 | +21 + 86 = 107 | +
| 2, 99 | +2 + 103 = 105 | +2 + 106 = 108 | +
| 13, 88 | +13 + 92 = 105 | +14 + 95 = 109 | +
Our accountant is examining effects of VAT-rate changes on after-tax prices. You are asked to write a program that calculates the possible maximum total after-tax price of two items with the new VAT rate, knowing their total after-tax price before the VAT rate change.
+The input consists of multiple datasets. Each dataset is in one line, which consists of three integers x, y, and s separated by a space. x is the VAT rate in percent before the VAT-rate change, y is the VAT rate in percent after the VAT-rate change, and s is the sum of after-tax prices of two items before the VAT-rate change. For these integers, 0 < x < 100, 0 < y < 100, 10 < s < 1000, and x ≠ y hold. For before-tax prices of items, all possibilities of 1 yen through s-1 yen should be considered.
+ +The end of the input is specified by three zeros separated by a space.
+For each dataset, output in a line the possible maximum total after-tax price when the VAT rate is changed to y%.
+In the following table, an instance of a before-tax price pair that has the maximum after-tax price after the VAT-rate change is given for each dataset of the sample input.
+ +| Dataset | +Before-tax prices | +After-tax price with y% VAT | +
|---|---|---|
| 5 8 105 | +13, 88 | +14 + 95 = 109 | +
| 8 5 105 | +12, 87 | +12 + 91 = 103 | +
| 1 2 24 | +1, 23 | +1 + 23 = 24 | +
| 99 98 24 | +1, 12 | +1 + 23 = 24 | +
| 12 13 26 | +1, 23 | +1 + 25 = 26 | +
| 1 22 23 | +1, 22 | +1 + 26 = 27 | +
| 1 13 201 | +1,199 | +1 +224 = 225 | +
| 13 16 112 | +25, 75 | +29 + 87 = 116 | +
| 2 24 50 | +25, 25 | +31 + 31 = 62 | +
| 1 82 61 | +11, 50 | +20 + 91 = 111 | +
| 1 84 125 | +50, 75 | +92 +138 = 230 | +
| 1 99 999 | +92,899 | +183+1789 =1972 | +
| 99 1 999 | +1,502 | +1 +507 = 508 | +
| 98 99 999 | +5,500 | +9 +995 =1004 | +
| 1 99 11 | +1, 10 | +1 + 19 = 20 | +
| 99 1 12 | +1, 6 | +1 + 6 = 7 | +
5 8 105 +8 5 105 +1 2 24 +99 98 24 +12 13 26 +1 22 23 +1 13 201 +13 16 112 +2 24 50 +1 82 61 +1 84 125 +1 99 999 +99 1 999 +98 99 999 +1 99 11 +99 1 12 +0 0 0 ++
109 +103 +24 +24 +26 +27 +225 +116 +62 +111 +230 +1972 +508 +1004 +20 +7 ++
N과 L이 주어질 때, 합이 N이면서, 길이가 적어도 L인 가장 짧은 연속된 음이 아닌 정수 리스트를 구하는 프로그램을 작성하시오.
+첫째 줄에 N과 L이 주어진다. N은 1,000,000,000보다 작거나 같은 자연수이고, L은 2보다 크거나 같고, 100보다 작거나 같은 자연수이다.
+만약 리스트의 길이가 100보다 작거나 같으면, 연속된 수를 첫째 줄에 공백으로 구분하여 출력한다. 만약 길이가 100보다 크거나 그러한 수열이 없을 때는 -1을 출력한다.
+18 2 ++
18 4 ++
18 5 ++
45 10 ++
1000000000 2 ++
5 6 7 ++
3 4 5 6 ++
-1 ++
0 1 2 3 4 5 6 7 8 9 ++
199999998 199999999 200000000 200000001 200000002 ++
N행 M열의 표 A가 있고, 표의 각 칸에는 숫자가 하나씩 적혀있다.
+ +연두는 서로 다른 1개 이상의 칸을 선택하려고 하는데, 행의 번호가 선택한 순서대로 등차수열을 이루고 있어야 하고, 열의 번호도 선택한 순서대로 등차수열을 이루고 있어야 한다. 이렇게 선택한 칸에 적힌 수를 순서대로 이어붙이면 정수를 하나 만들 수 있다.
+ +연두가 만들 수 있는 정수 중에서 가장 큰 완전 제곱수를 구해보자. 완전 제곱수란 어떤 정수를 제곱한 수이다.
+첫째 줄에 N, M이 주어진다. 둘째 줄부터 N개의 줄에는 표에 적힌 숫자가 1번 행부터 N번 행까지 순서대로 한 줄에 한 행씩 주어진다. 한 행에 적힌 숫자는 1번 열부터 M번 열까지 순서대로 주어지고, 공백없이 모두 붙여져 있다.
+첫째 줄에 연두가 만들 수 있는 가장 큰 완전 제곱수를 출력한다. 만약, 완전 제곱수를 만들 수 없는 경우에는 -1을 출력한다.
+2 3 +123 +456 ++
5 5 +00000 +00000 +00200 +00000 +00000 ++
6 7 +3791178 +1283252 +4103617 +8233494 +8725572 +2937261 ++
5 9 +135791357 +357913579 +579135791 +791357913 +913579135 ++
9 9 +553333733 +775337775 +777537775 +777357333 +755553557 +355533335 +373773573 +337373777 +775557777 ++
9 9 +257240281 +197510846 +014345401 +035562575 +974935632 +865865933 +684684987 +768934659 +287493867 ++
64 ++
0 ++
320356 ++
9 ++
-1 ++
95481 ++
ACM 호텔 매니저 지우는 손님이 도착하는 대로 빈 방을 배정하고 있다. 고객 설문조사에 따르면 손님들은 호텔 정문으로부터 걸어서 가장 짧은 거리에 있는 방을 선호한다고 한다. 여러분은 지우를 도와 줄 프로그램을 작성하고자 한다. 즉 설문조사 결과 대로 호텔 정문으로부터 걷는 거리가 가장 짧도록 방을 배정하는 프로그램을 작성하고자 한다.
문제를 단순화하기 위해서 호텔은 직사각형 모양이라고 가정하자. 각 층에 W 개의 방이 있는 H 층 건물이라고 가정하자 (1 ≤ H, W ≤ 99). 그리고 엘리베이터는 가장 왼쪽에 있다고 가정하자(그림 1 참고). 이런 형태의 호텔을 H × W 형태 호텔이라고 부른다. 호텔 정문은 일층 엘리베이터 바로 앞에 있는데, 정문에서 엘리베이터까지의 거리는 무시한다. 또 모든 인접한 두 방 사이의 거리는 같은 거리(거리 1)라고 가정하고 호텔의 정면 쪽에만 방이 있다고 가정한다.
+ +그림 1. H = 6 이고 W = 12 인 H × W 호텔을 간략하게 나타낸 그림
+ +방 번호는 YXX 나 YYXX 형태인데 여기서 Y 나 YY 는 층 수를 나타내고 XX 는 엘리베이터에서부터 세었을 때의 번호를 나타낸다. 즉, 그림 1 에서 빗금으로 표시한 방은 305 호가 된다.
+ +손님은 엘리베이터를 타고 이동하는 거리는 신경 쓰지 않는다. 다만 걷는 거리가 같을 때에는 아래층의 방을 더 선호한다. 예를 들면 102 호 방보다는 301 호 방을 더 선호하는데, 102 호는 거리 2 만큼 걸어야 하지만 301 호는 거리 1 만큼만 걸으면 되기 때문이다. 같은 이유로 102 호보다 2101 호를 더 선호한다.
+ +여러분이 작성할 프로그램은 초기에 모든 방이 비어있다고 가정하에 이 정책에 따라 N 번째로 도착한 손님에게 배정될 방 번호를 계산하는 프로그램이다. 첫 번째 손님은 101 호, 두 번째 손님은 201 호 등과 같이 배정한다. 그림 1 의 경우를 예로 들면, H = 6이므로 10 번째 손님은 402 호에 배정해야 한다.
+프로그램은 표준 입력에서 입력 데이터를 받는다. 프로그램의 입력은 T 개의 테스트 데이터로 이루어져 있는데 T 는 입력의 맨 첫 줄에 주어진다. 각 테스트 데이터는 한 행으로서 H, W, N, 세 정수를 포함하고 있으며 각각 호텔의 층 수, 각 층의 방 수, 몇 번째 손님인지를 나타낸다(1 ≤ H, W ≤ 99, 1 ≤ N ≤ H × W).
+프로그램은 표준 출력에 출력한다. 각 테스트 데이터마다 정확히 한 행을 출력하는데, 내용은 N 번째 손님에게 배정되어야 하는 방 번호를 출력한다.
+2 +6 12 10 +30 50 72 ++
402 +1203 ++
시작 -> 실행 -> cmd를 쳐보자. 검정 화면이 눈에 보인다. 여기서 dir이라고 치면 그 디렉토리에 있는 서브디렉토리와 파일이 모두 나온다. 이때 원하는 파일을 찾으려면 다음과 같이 하면 된다.
+ +dir *.exe라고 치면 확장자가 exe인 파일이 다 나온다. "dir 패턴"과 같이 치면 그 패턴에 맞는 파일만 검색 결과로 나온다. 예를 들어, dir a?b.exe라고 검색하면 파일명의 첫 번째 글자가 a이고, 세 번째 글자가 b이고, 확장자가 exe인 것이 모두 나온다. 이때 두 번째 문자는 아무거나 나와도 된다. 예를 들어, acb.exe, aab.exe, apb.exe가 나온다.
+ +이 문제는 검색 결과가 먼저 주어졌을 때, 패턴으로 뭘 쳐야 그 결과가 나오는지를 출력하는 문제이다. 패턴에는 알파벳과 "." 그리고 "?"만 넣을 수 있다. 가능하면 ?을 적게 써야 한다. 그 디렉토리에는 검색 결과에 나온 파일만 있다고 가정하고, 파일 이름의 길이는 모두 같다.
+첫째 줄에 파일 이름의 개수 N이 주어진다. 둘째 줄부터 N개의 줄에는 파일 이름이 주어진다. N은 50보다 작거나 같은 자연수이고 파일 이름의 길이는 모두 같고 길이는 최대 50이다. 파일이름은 알파벳 소문자와 '.' 로만 이루어져 있다.
+첫째 줄에 패턴을 출력하면 된다.
+3 +config.sys +config.inf +configures ++
2 +contest.txt +context.txt ++
3 +c.user.mike.programs +c.user.nike.programs +c.user.rice.programs ++
4 +a +a +b +b ++
1 +onlyonefile ++
config???? ++
conte?t.txt ++
c.user.?i?e.programs ++
? ++
onlyonefile ++
36진법의 숫자는 0부터 9까지의 수와 알파벳 A에서 Z로 나타낸다. A부터 Z까지 알파벳은 10부터 35에 차례대로 대응한다.
+ +36진법의 수 N개가 주어진다. 36진법 숫자(0-9, A-Z) 중에서 K개의 숫자를 고른다. 그러고 나서 N개의 수 모두에서 나타난 그 숫자를 Z로 바꾼다. 그 이후에 N개의 수를 모두 더한다.
+ +이때 가능한 합의 최댓값을 구하는 프로그램을 작성하시오. 합의 최댓값도 36진수로 출력한다.
+첫째 줄에 수의 개수 N이 주어진다. 둘째 줄부터 N개의 줄에 수가 주어진다. N은 최대 50이고, 수의 길이도 최대 50이다. 마지막 줄에 K가 주어진다. K는 36보다 작거나 같은 자연수 또는 0이다.
+첫째 줄에 문제의 정답을 출력한다.
+5 +GOOD +LUCK +AND +HAVE +FUN +7 ++
1 +HELLO +2 ++
5 +500 +POINTS +FOR +THIS +PROBLEM +5 ++
6 +TO +BE +OR +NOT +TO +BE +0 ++
1 +KEQUALS36 +36 ++
31YUB ++
ZZLLO ++
1100TC85 ++
QNO ++
ZZZZZZZZZ ++
양수 A가 N의 진짜 약수가 되려면, N이 A의 배수이고, A가 1과 N이 아니어야 한다. 어떤 수 N의 진짜 약수가 모두 주어질 때, N을 구하는 프로그램을 작성하시오.
+첫째 줄에 N의 진짜 약수의 개수가 주어진다. 이 개수는 50보다 작거나 같은 자연수이다. 둘째 줄에는 N의 진짜 약수가 주어진다. 1,000,000보다 작거나 같고, 2보다 크거나 같은 자연수이고, 중복되지 않는다.
+첫째 줄에 N을 출력한다. N은 항상 32비트 부호있는 정수로 표현할 수 있다.
+2 +4 2 ++
1 +2 ++
6 +3 4 2 12 6 8 ++
14 +14 26456 2 28 13228 3307 7 23149 8 6614 46298 56 4 92596 ++
8 ++
4 ++
24 ++
185192 ++
창영이는 이번학기에 어떤 교양수업을 듣고 있다. 그런데, 그 교수님은 매우 지각을 자주 하시고 게다가 수업에 지각을 하였을 경우 수업을 일찍 마쳐 주기까지 하는 것을 발견하였다.
+ +창영이는 교수님의 지각시간 0이상의 정수 t와 수업을 일찍 마쳐주는 시간 s 사이에 다음과 같은 관계가 있음을 알았다.
+ +s = t2
+ +문득 창영이는 수업시간 d가 주어졌을 때, 교수님이 얼마나 지각을 할 수 있는지 궁금해졌고, 여러분은 창영이를 도와서 교수님이 지각할 수 있는 최대의 시간을 알아보자. 물론, 교수님이 도착하자마자 수업을 일찍 마쳐서 수업이 끝나는 것도 가능하다. 예를 들어, 수업시간이 6분인 경우, 교수님이 2분 지각을 하면, 4분간 수업을 일찍 마치게 되고, 2+4=6이기 때문에 바로 수업을 끝낼 수 있다. 또 다른 예로, 수업시간이 7분인 경우 교수님이 2분 지각을 하면, 수업을 4분 일찍 마쳐줄 수 있고, 2+4≤7 이므로 가능한 경우가 되고, 교수님이 3분 지각을 하게 되면, 수업을 9분 일찍 마쳐야 되고, 3+9>7 이므로, 교수님이 3분 지각을 하는 것은 불가능하다. 따라서, 교수님은 수업시간이 7분인 경우 교수님은 최대 2분간 지각을 할 수 있다.
+창영이가 궁금한 경우의 수 T(1 ≤ T ≤ 100)가 첫 번째 줄에 주어지고, 이어서 T 개의 줄에 수업시간 d(1 ≤ d ≤ 10,000, d는 정수)가 차례대로 주어진다.
+수업시간에 따른 교수님이 지각할 수 있는 최대 시간 t를 정수로 구해서 출력한다.
+5 +1 +2 +5 +6 +7 ++
0 +1 +1 +2 +2 ++
지민이는 파티에 가서 이야기 하는 것을 좋아한다. 파티에 갈 때마다, 지민이는 지민이가 가장 좋아하는 이야기를 한다. 지민이는 그 이야기를 말할 때, 있는 그대로 진실로 말하거나 엄청나게 과장해서 말한다. 당연히 과장해서 이야기하는 것이 훨씬 더 재미있기 때문에, 되도록이면 과장해서 이야기하려고 한다. 하지만, 지민이는 거짓말쟁이로 알려지기는 싫어한다. 문제는 몇몇 사람들은 그 이야기의 진실을 안다는 것이다. 따라서 이런 사람들이 파티에 왔을 때는, 지민이는 진실을 이야기할 수 밖에 없다. 당연히, 어떤 사람이 어떤 파티에서는 진실을 듣고, 또다른 파티에서는 과장된 이야기를 들었을 때도 지민이는 거짓말쟁이로 알려지게 된다. 지민이는 이런 일을 모두 피해야 한다.
+ +사람의 수 N이 주어진다. 그리고 그 이야기의 진실을 아는 사람이 주어진다. 그리고 각 파티에 오는 사람들의 번호가 주어진다. 지민이는 모든 파티에 참가해야 한다. 이때, 지민이가 거짓말쟁이로 알려지지 않으면서, 과장된 이야기를 할 수 있는 파티 개수의 최댓값을 구하는 프로그램을 작성하시오.
+첫째 줄에 사람의 수 N과 파티의 수 M이 주어진다.
+ +둘째 줄에는 이야기의 진실을 아는 사람의 수와 번호가 주어진다. 진실을 아는 사람의 수가 먼저 주어지고 그 개수만큼 사람들의 번호가 주어진다. 사람들의 번호는 1부터 N까지의 수로 주어진다.
+ +셋째 줄부터 M개의 줄에는 각 파티마다 오는 사람의 수와 번호가 같은 방식으로 주어진다.
+ +N, M은 50 이하의 자연수이고, 진실을 아는 사람의 수는 0 이상 50 이하의 정수, 각 파티마다 오는 사람의 수는 1 이상 50 이하의 정수이다.
+첫째 줄에 문제의 정답을 출력한다.
+4 3 +0 +2 1 2 +1 3 +3 2 3 4 ++
4 1 +1 1 +4 1 2 3 4 ++
4 1 +0 +4 1 2 3 4 ++
4 5 +1 1 +1 1 +1 2 +1 3 +1 4 +2 4 1 ++
10 9 +4 1 2 3 4 +2 1 5 +2 2 6 +1 7 +1 8 +2 7 8 +1 9 +1 10 +2 3 10 +1 4 ++
8 5 +3 1 2 7 +2 3 4 +1 5 +2 5 6 +2 6 8 +1 8 ++
3 4 +1 3 +1 1 +1 2 +2 1 2 +3 1 2 3 ++
3 ++
0 ++
1 ++
2 ++
4 ++
5 ++
0 ++
초등학교 선생님 강산이는 아이들을 데리고 단체로 어떤 일을 할 때 불편함이 없도록 새로 반에 배정받은 아이들에게 키 순서대로 번호를 부여한다. 번호를 부여할 땐 키가 가장 작은 아이가 1번, 그 다음이 2번, ... , 가장 큰 아이가 20번이 된다. 강산이네 반 아이들은 항상 20명이며, 다행히도 같은 키를 가진 학생은 한 명도 없어서 시간이 조금 지나면 아이들은 자기들의 번호를 인지하고 한 줄로 세우면 제대로 된 위치에 잘 서게 된다.
+ +하지만 매년 첫 며칠간 강산이와 강산이네 반 아이들은 자기가 키 순으로 몇 번째인지 잘 알지 못해 아주 혼란스럽다. 자기 위치를 찾지 못하는 아이들을 위해 강산이는 특별한 방법을 생각해냈다.
+ +우선 아무나 한 명을 뽑아 줄의 맨 앞에 세운다. 그리고 그 다음부터는 학생이 한 명씩 줄의 맨 뒤에 서면서 다음 과정을 거친다.
+ +이 과정을 반복하면 결국 오름차순으로 줄을 설 수가 있다.
+ +아이들의 키가 주어지고, 어떤 순서로 아이들이 줄서기를 할 지 주어진다. 위의 방법을 마지막 학생까지 시행하여 줄서기가 끝났을 때 학생들이 총 몇 번 뒤로 물러서게 될까?
+첫 줄에 테스트 케이스의 수 P (1 ≤ P ≤ 1000) 가 주어진다.
+ +각 테스트 케이스는 테스트 케이스 번호 T와 20개의 양의 정수가 공백으로 구분되어 주어진다.
+ +20개의 정수는 줄서기를 할 아이들의 키를 줄서기 차례의 순서대로 밀리미터 단위로 나타낸 것이다.
+ +모든 테스트 케이스는 독립적이다.
+각각의 테스트 케이스에 대해 테스트 케이스의 번호와 학생들이 뒤로 물러난 걸음 수의 총합을 공백으로 구분하여 출력한다.
+4 +1 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 +2 919 918 917 916 915 914 913 912 911 910 909 908 907 906 905 904 903 902 901 900 +3 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 900 +4 918 917 916 915 914 913 912 911 910 909 908 907 906 905 904 903 902 901 900 919 ++
1 0 +2 190 +3 19 +4 171 ++
n개의 정수 수열 a1, a2, a3, ..., an에 대해, 섬이란 다음 조건을 만족하는 연속된 부분수열을 말한다.
+ +아래의 예시에는 각각의 예제 수열에 대한 모든 섬이 표시되어 있다.
+ +이 문제에서 수열은 항상 12개의 음이 아닌 정수로 이루어져 있다.
+ +이때, 총 섬의 개수를 출력하라.
+첫 줄에 테스트 케이스의 수 P가 주어진다. (1 ≤ P ≤ 1000)
+ +각 테스트 케이스는 테스트 케이스의 번호 T와 12개의 음이 아닌 정수로 이루어져 있다. 또한, 12개의 정수 중 첫 수와 마지막 수는 항상 0이다.
+각 테스트 케이스마다 테스트 케이스의 번호와 섬의 수를 공백으로 구분하여 출력한다.
+4 +1 0 0 1 1 2 2 1 1 0 1 2 0 +2 0 1 2 4 3 1 3 4 5 2 1 0 +3 0 1 2 4 4 1 0 2 4 1 0 0 +4 0 1 2 3 4 5 6 7 8 9 10 0 ++
1 4 +2 8 +3 6 +4 10 ++
체스에서 여왕은 강력한 말이다. 여왕은 가로, 세로, 그리고 대각선으로 제한없이 이동하여 상대를 공격할 수 있다.
+ +사이나쁜 여왕 퀴즈는 여덟 여왕을 8x8 체스판 위에 배치하는데, 아무도 서로 공격할 수 없도록 배치하는 퀴즈다. 가운데 그림은 올바르지 않은 풀이인데, 두 여왕이 대각선을 통해서 서로 공격할 수 있기 때문이다. 오른쪽 그림은 올바른 해법이다. 우리는 체스판과 여왕의 배치가 주어질 때 해당 배치가 올바른 사이나쁜 여왕 퀴즈의 해법인지 아닌지를 판단해야 한다.
+ +입력은 하나의 체스판을 8줄에 걸쳐 줄마다 8개의 문자로 나타낸다.
+ +각 문자는 '.' 혹은 '*' 이며 '.'은 빈 칸을, '*'은 여왕이 있음을 나타낸다.
+한 줄에 걸쳐 올바른 해법일 경우 "valid", 올바르지 않은 해법일 경우 "invalid"를 출력한다.
+*....... +..*..... +....*... +......*. +.*...... +.......* +.....*.. +...*.... ++
*....... +......*. +....*... +.......* +.*...... +...*.... +.....*.. +..*..... ++
invalid ++
valid ++
8*8크기의 체스판에 왕이 하나 있다. 킹의 현재 위치가 주어진다. 체스판에서 말의 위치는 다음과 같이 주어진다. 알파벳 하나와 숫자 하나로 이루어져 있는데, 알파벳은 열을 상징하고, 숫자는 행을 상징한다. 열은 가장 왼쪽 열이 A이고, 가장 오른쪽 열이 H까지 이고, 행은 가장 아래가 1이고 가장 위가 8이다. 예를 들어, 왼쪽 아래 코너는 A1이고, 그 오른쪽 칸은 B1이다.
+ +킹은 다음과 같이 움직일 수 있다.
+ +체스판에는 돌이 하나 있는데, 돌과 같은 곳으로 이동할 때는, 돌을 킹이 움직인 방향과 같은 방향으로 한 칸 이동시킨다. 아래 그림을 참고하자.
+ +입력으로 킹이 어떻게 움직여야 하는지 주어진다. 입력으로 주어진 대로 움직여서 킹이나 돌이 체스판 밖으로 나갈 경우에는 그 이동은 건너 뛰고 다음 이동을 한다.
+ +킹과 돌의 마지막 위치를 구하는 프로그램을 작성하시오.
+첫째 줄에 킹의 위치, 돌의 위치, 움직이는 횟수 N이 주어진다. 둘째 줄부터 N개의 줄에는 킹이 어떻게 움직여야 하는지 주어진다. N은 50보다 작거나 같은 자연수이고, 움직이는 정보는 위에 쓰여 있는 8가지 중 하나이다.
+첫째 줄에 킹의 마지막 위치, 둘째 줄에 돌의 마지막 위치를 출력한다.
+A1 A2 5 +B +L +LB +RB +LT ++
A1 H8 1 +T ++
A1 A2 1 +T ++
A1 A2 2 +T +R ++
A8 B7 18 +RB +RB +RB +RB +RB +RB +RB +RB +RB +RB +RB +RB +RB +RB +RB +RB +RB +RB ++
C1 B1 3 +L +T +LB ++
A1 +A2 ++
A2 +H8 ++
A2 +A3 ++
B2 +A3 ++
G2 +H1 ++
B2 +A1 ++
어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력하는 프로그램을 작성하시오.
+첫째 줄에 1,000보다 작거나 같은 자연수 N이 주어진다.
+첫째 줄에 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력한다.
+110 ++
1 ++
210 ++
1000 ++
500 ++
99 ++
1 ++
105 ++
144 ++
119 ++
서울의 오늘 날짜를 출력하는 프로그램을 작성하시오.
+입력은 없다.
+서울의 오늘 날짜를 "YYYY-MM-DD" 형식으로 출력한다.
+채점 서버는 시간대(Timezone)는 UTC+0 이다.
+ +다음은 채점 서버에서 KST 시간으로 2018년 3월 21일 오후 2시 7분 38초에 date 명령어를 실행시킨 결과이다.
+Wed Mar 21 05:07:38 UTC 2018+
2015-01-24 ++
N개의 정수가 주어지면, 이것을 연속된 두 수가 연속된 값이 아니게 정렬(A[i] + 1 ≠ A[i+1])하는 프로그램을 작성하시오. 가능한 것이 여러 가지라면 사전순으로 가장 앞서는 것을 출력한다.
+첫째 줄에 N이 주어진다. N은 50보다 작거나 같은 자연수이다. 둘째 줄에는 N개의 수가 주어진다. N개의 수는 1,000보다 작거나 같은 자연수 또는 0이다.
+첫째 줄에 문제의 정답을 출력한다.
+3 +1 2 3 ++
9 +1 1 1 1 2 2 2 2 2 ++
2 +1 2 ++
6 +1 2 3 4 5 6 ++
6 +1 1 2 2 3 3 ++
1 3 2 ++
2 2 2 2 2 1 1 1 1 ++
2 1 ++
1 3 2 4 6 5 ++
1 1 3 3 2 2 ++
한수는 크기가 2N × 2N인 2차원 배열을 Z모양으로 탐색하려고 한다. 예를 들어, 2×2배열을 왼쪽 위칸, 오른쪽 위칸, 왼쪽 아래칸, 오른쪽 아래칸 순서대로 방문하면 Z모양이다.
+ +N > 1인 경우, 배열을 크기가 2N-1 × 2N-1로 4등분 한 후에 재귀적으로 순서대로 방문한다.
+ +다음 예는 22 × 22 크기의 배열을 방문한 순서이다.
+ +N이 주어졌을 때, r행 c열을 몇 번째로 방문하는지 출력하는 프로그램을 작성하시오.
+ +다음은 N=3일 때의 예이다.
+ +첫째 줄에 정수 N, r, c가 주어진다.
+r행 c열을 몇 번째로 방문했는지 출력한다.
+2 3 1 ++
3 7 7 ++
1 0 0 ++
4 7 7 ++
10 511 511 ++
10 512 512 ++
11 ++
63 ++
0 ++
63 ++
262143 ++
786432 ++
전자 제품에는 저항이 들어간다. 저항은 색 3개를 이용해서 그 저항이 몇 옴인지 나타낸다. 처음 색 2개는 저항의 값이고, 마지막 색은 곱해야 하는 값이다. 저항의 값은 다음 표를 이용해서 구한다.
+ +| 색 | +값 | +곱 | +
|---|---|---|
| black | +0 | +1 | +
| brown | +1 | +10 | +
| red | +2 | +100 | +
| orange | +3 | +1,000 | +
| yellow | +4 | +10,000 | +
| green | +5 | +100,000 | +
| blue | +6 | +1,000,000 | +
| violet | +7 | +10,000,000 | +
| grey | +8 | +100,000,000 | +
| white | +9 | +1,000,000,000 | +
예를 들어, 저항의 색이 yellow, violet, red였다면 저항의 값은 4,700이 된다.
+첫째 줄에 첫 번째 색, 둘째 줄에 두 번째 색, 셋째 줄에 세 번째 색이 주어진다. 위의 표에 있는 색만 입력으로 주어진다.
+입력으로 주어진 저항의 저항값을 계산하여 첫째 줄에 출력한다.
+yellow +violet +red ++
orange +red +blue ++
white +white +white ++
4700 ++
32000000 ++
99000000000 ++
나코더 기장 재민이는 동아리 회식을 준비하기 위해서 장부를 관리하는 중이다.
+ +재현이는 재민이를 도와서 돈을 관리하는 중인데, 애석하게도 항상 정신없는 재현이는 돈을 실수로 잘못 부르는 사고를 치기 일쑤였다.
+ +재현이는 잘못된 수를 부를 때마다 0을 외쳐서, 가장 최근에 재민이가 쓴 수를 지우게 시킨다.
+ +재민이는 이렇게 모든 수를 받아 적은 후 그 수의 합을 알고 싶어 한다. 재민이를 도와주자!
+첫 번째 줄에 정수 K가 주어진다. (1 ≤ K ≤ 100,000)
+ +이후 K개의 줄에 정수가 1개씩 주어진다. 정수는 0에서 1,000,000 사이의 값을 가지며, 정수가 "0" 일 경우에는 가장 최근에 쓴 수를 지우고, 아닐 경우 해당 수를 쓴다.
+ +정수가 "0"일 경우에 지울 수 있는 수가 있음을 보장할 수 있다.
+재민이가 최종적으로 적어 낸 수의 합을 출력한다. 최종적으로 적어낸 수의 합은 231-1보다 작거나 같은 정수이다.
+예제 2의 경우를 시뮬레이션 해보면,
+ +합은 7이다.
+4 +3 +0 +4 +0 ++
10 +1 +3 +5 +4 +0 +0 +7 +0 +0 +6 ++
0 ++
7 ++
아직 글을 모르는 영석이가 벽에 걸린 칠판에 자석이 붙어있는 글자들을 붙이는 장난감을 가지고 놀고 있다.
+ +이 장난감에 있는 글자들은 영어 대문자 ‘A’부터 ‘Z’, 영어 소문자 ‘a’부터 ‘z’, 숫자 ‘0’부터 ‘9’이다. 영석이는 칠판에 글자들을 수평으로 일렬로 붙여서 단어를 만든다. 다시 그 아래쪽에 글자들을 붙여서 또 다른 단어를 만든다. 이런 식으로 다섯 개의 단어를 만든다. 아래 그림 1은 영석이가 칠판에 붙여 만든 단어들의 예이다.
+ ++A A B C D D +a f z z +0 9 1 2 1 +a 8 E W g 6 +P 5 h 3 k x+ +
<그림 1>
+ +한 줄의 단어는 글자들을 빈칸 없이 연속으로 나열해서 최대 15개의 글자들로 이루어진다. 또한 만들어진 다섯 개의 단어들의 글자 개수는 서로 다를 수 있다.
+ +심심해진 영석이는 칠판에 만들어진 다섯 개의 단어를 세로로 읽으려 한다. 세로로 읽을 때, 각 단어의 첫 번째 글자들을 위에서 아래로 세로로 읽는다. 다음에 두 번째 글자들을 세로로 읽는다. 이런 식으로 왼쪽에서 오른쪽으로 한 자리씩 이동 하면서 동일한 자리의 글자들을 세로로 읽어 나간다. 위의 그림 1의 다섯 번째 자리를 보면 두 번째 줄의 다섯 번째 자리의 글자는 없다. 이런 경우처럼 세로로 읽을 때 해당 자리의 글자가 없으면, 읽지 않고 그 다음 글자를 계속 읽는다. 그림 1의 다섯 번째 자리를 세로로 읽으면 D1gk로 읽는다.
+ +그림 1에서 영석이가 세로로 읽은 순서대로 글자들을 공백 없이 출력하면 다음과 같다:
+ +Aa0aPAf985Bz1EhCz2W3D1gkD6x
+ +칠판에 붙여진 단어들이 주어질 때, 영석이가 세로로 읽은 순서대로 글자들을 출력하는 프로그램을 작성하시오.
+총 다섯줄의 입력이 주어진다. 각 줄에는 최소 1개, 최대 15개의 글자들이 빈칸 없이 연속으로 주어진다. 주어지는 글자는 영어 대문자 ‘A’부터 ‘Z’, 영어 소문자 ‘a’부터 ‘z’, 숫자 ‘0’부터 ‘9’ 중 하나이다. 각 줄의 시작과 마지막에 빈칸은 없다.
+영석이가 세로로 읽은 순서대로 글자들을 출력한다. 이때, 글자들을 공백 없이 연속해서 출력한다.
+ABCDE +abcde +01234 +FGHIJ +fghij ++
AABCDD +afzz +09121 +a8EWg6 +P5h3kx ++
Aa0FfBb1GgCc2HhDd3IiEe4Jj ++
Aa0aPAf985Bz1EhCz2W3D1gkD6x ++
총 N개의 정수가 주어졌을 때, 정수 v가 몇 개인지 구하는 프로그램을 작성하시오.
+첫째 줄에 정수의 개수 N(1 ≤ N ≤ 100)이 주어진다. 둘째 줄에는 정수가 공백으로 구분되어져있다. 셋째 줄에는 찾으려고 하는 정수 v가 주어진다. 입력으로 주어지는 정수와 v는 -100보다 크거나 같으며, 100보다 작거나 같다.
+첫째 줄에 입력으로 주어진 N개의 정수 중에 v가 몇 개인지 출력한다.
+11 +1 4 1 2 4 2 4 2 3 4 4 +2 ++
11 +1 4 1 2 4 2 4 2 3 4 4 +5 ++
3 ++
0 ++
알파벳 소문자로만 이루어진 단어 S가 주어진다. 각각의 알파벳에 대해서, 단어에 포함되어 있는 경우에는 처음 등장하는 위치를, 포함되어 있지 않은 경우에는 -1을 출력하는 프로그램을 작성하시오.
+첫째 줄에 단어 S가 주어진다. 단어의 길이는 100을 넘지 않으며, 알파벳 소문자로만 이루어져 있다.
+각각의 알파벳에 대해서, a가 처음 등장하는 위치, b가 처음 등장하는 위치, ... z가 처음 등장하는 위치를 공백으로 구분해서 출력한다.
+ +만약, 어떤 알파벳이 단어에 포함되어 있지 않다면 -1을 출력한다. 단어의 첫 번째 글자는 0번째 위치이고, 두 번째 글자는 1번째 위치이다.
+baekjoon ++
1 0 -1 -1 2 -1 -1 -1 -1 4 3 -1 -1 7 5 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 ++
도현이는 바구니를 총 N개 가지고 있고, 각각의 바구니에는 1번부터 N번까지 번호가 매겨져 있다. 또, 1번부터 N번까지 번호가 적혀있는 공을 매우 많이 가지고 있다. 가장 처음 바구니에는 공이 들어있지 않으며, 바구니에는 공을 1개만 넣을 수 있다.
+ +도현이는 앞으로 M번 공을 넣으려고 한다. 도현이는 한 번 공을 넣을 때, 공을 넣을 바구니 범위를 정하고, 정한 바구니에 모두 같은 번호가 적혀있는 공을 넣는다. 만약, 바구니에 공이 이미 있는 경우에는 들어있는 공을 빼고, 새로 공을 넣는다. 공을 넣을 바구니는 연속되어 있어야 한다.
+ +공을 어떻게 넣을지가 주어졌을 때, M번 공을 넣은 이후에 각 바구니에 어떤 공이 들어 있는지 구하는 프로그램을 작성하시오.
+첫째 줄에 N (1 ≤ N ≤ 100)과 M (1 ≤ M ≤ 100)이 주어진다.
+ +둘째 줄부터 M개의 줄에 걸쳐서 공을 넣는 방법이 주어진다. 각 방법은 세 정수 i j k로 이루어져 있으며, i번 바구니부터 j번 바구니까지에 k번 번호가 적혀져 있는 공을 넣는다는 뜻이다. 예를 들어, 2 5 6은 2번 바구니부터 5번 바구니까지에 6번 공을 넣는다는 뜻이다. (1 ≤ i ≤ j ≤ N, 1 ≤ k ≤ N)
+ +도현이는 입력으로 주어진 순서대로 공을 넣는다.
+1번 바구니부터 N번 바구니에 들어있는 공의 번호를 공백으로 구분해 출력한다. 공이 들어있지 않은 바구니는 0을 출력한다.
+5 4 +1 2 3 +3 4 4 +1 4 1 +2 2 2 ++
1 2 1 1 0 ++
도현이는 바구니를 총 N개 가지고 있고, 각각의 바구니에는 1번부터 N번까지 번호가 순서대로 적혀져 있다. 바구니는 일렬로 놓여져 있고, 가장 왼쪽 바구니를 1번째 바구니, 그 다음 바구니를 2번째 바구니, ..., 가장 오른쪽 바구니를 N번째 바구니라고 부른다.
+ +도현이는 앞으로 M번 바구니의 순서를 역순으로 만들려고 한다. 도현이는 한 번 순서를 역순으로 바꿀 때, 순서를 역순으로 만들 범위를 정하고, 그 범위에 들어있는 바구니의 순서를 역순으로 만든다.
+ +바구니의 순서를 어떻게 바꿀지 주어졌을 때, M번 바구니의 순서를 역순으로 만든 다음, 바구니에 적혀있는 번호를 가장 왼쪽 바구니부터 출력하는 프로그램을 작성하시오.
+첫째 줄에 N (1 ≤ N ≤ 100)과 M (1 ≤ M ≤ 100)이 주어진다.
+ +둘째 줄부터 M개의 줄에는 바구니의 순서를 역순으로 만드는 방법이 주어진다. 방법은 i j로 나타내고, 왼쪽으로부터 i번째 바구니부터 j번째 바구니의 순서를 역순으로 만든다는 뜻이다. (1 ≤ i ≤ j ≤ N)
+ +도현이는 입력으로 주어진 순서대로 바구니의 순서를 바꾼다.
+모든 순서를 바꾼 다음에, 가장 왼쪽에 있는 바구니부터 바구니에 적혀있는 순서를 공백으로 구분해 출력한다.
+5 4 +1 2 +3 4 +1 4 +2 2 ++
3 4 1 2 5 ++
도현이는 바구니를 총 N개 가지고 있고, 각각의 바구니에는 1번부터 N번까지 번호가 매겨져 있다. 바구니에는 공이 1개씩 들어있고, 처음에는 바구니에 적혀있는 번호와 같은 번호가 적힌 공이 들어있다.
+ +도현이는 앞으로 M번 공을 바꾸려고 한다. 도현이는 공을 바꿀 바구니 2개를 선택하고, 두 바구니에 들어있는 공을 서로 교환한다.
+ +공을 어떻게 바꿀지가 주어졌을 때, M번 공을 바꾼 이후에 각 바구니에 어떤 공이 들어있는지 구하는 프로그램을 작성하시오.
+첫째 줄에 N (1 ≤ N ≤ 100)과 M (1 ≤ M ≤ 100)이 주어진다.
+ +둘째 줄부터 M개의 줄에 걸쳐서 공을 교환할 방법이 주어진다. 각 방법은 두 정수 i j로 이루어져 있으며, i번 바구니와 j번 바구니에 들어있는 공을 교환한다는 뜻이다. (1 ≤ i ≤ j ≤ N)
+ +도현이는 입력으로 주어진 순서대로 공을 교환한다.
+1번 바구니부터 N번 바구니에 들어있는 공의 번호를 공백으로 구분해 출력한다.
+5 4 +1 2 +3 4 +1 4 +2 2 ++
3 1 4 2 5 ++
온라인 저지에 가입한 사람들의 나이와 이름이 가입한 순서대로 주어진다. 이때, 회원들을 나이가 증가하는 순으로, 나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로 정렬하는 프로그램을 작성하시오.
+첫째 줄에 온라인 저지 회원의 수 N이 주어진다. (1 ≤ N ≤ 100,000)
+ +둘째 줄부터 N개의 줄에는 각 회원의 나이와 이름이 공백으로 구분되어 주어진다. 나이는 1보다 크거나 같으며, 200보다 작거나 같은 정수이고, 이름은 알파벳 대소문자로 이루어져 있고, 길이가 100보다 작거나 같은 문자열이다. 입력은 가입한 순서로 주어진다.
+첫째 줄부터 총 N개의 줄에 걸쳐 온라인 저지 회원을 나이 순, 나이가 같으면 가입한 순으로 한 줄에 한 명씩 나이와 이름을 공백으로 구분해 출력한다.
+3 +21 Junkyu +21 Dohyun +20 Sunyoung ++
20 Sunyoung +21 Junkyu +21 Dohyun ++
숫자 카드는 정수 하나가 적혀져 있는 카드이다. 상근이는 숫자 카드 N개를 가지고 있다. 정수 M개가 주어졌을 때, 이 수가 적혀있는 숫자 카드를 상근이가 가지고 있는지 아닌지를 구하는 프로그램을 작성하시오.
+첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다. 숫자 카드에 적혀있는 수는 -10,000,000보다 크거나 같고, 10,000,000보다 작거나 같다. 두 숫자 카드에 같은 수가 적혀있는 경우는 없다.
+ +셋째 줄에는 M(1 ≤ M ≤ 500,000)이 주어진다. 넷째 줄에는 상근이가 가지고 있는 숫자 카드인지 아닌지를 구해야 할 M개의 정수가 주어지며, 이 수는 공백으로 구분되어져 있다. 이 수도 -10,000,000보다 크거나 같고, 10,000,000보다 작거나 같다
+첫째 줄에 입력으로 주어진 M개의 수에 대해서, 각 수가 적힌 숫자 카드를 상근이가 가지고 있으면 1을, 아니면 0을 공백으로 구분해 출력한다.
+5 +6 3 2 10 -10 +8 +10 9 -5 2 3 4 5 -10 ++
1 0 0 1 1 0 0 1 ++
숫자 카드는 정수 하나가 적혀져 있는 카드이다. 상근이는 숫자 카드 N개를 가지고 있다. 정수 M개가 주어졌을 때, 이 수가 적혀있는 숫자 카드를 상근이가 몇 개 가지고 있는지 구하는 프로그램을 작성하시오.
+첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다. 숫자 카드에 적혀있는 수는 -10,000,000보다 크거나 같고, 10,000,000보다 작거나 같다.
+ +셋째 줄에는 M(1 ≤ M ≤ 500,000)이 주어진다. 넷째 줄에는 상근이가 몇 개 가지고 있는 숫자 카드인지 구해야 할 M개의 정수가 주어지며, 이 수는 공백으로 구분되어져 있다. 이 수도 -10,000,000보다 크거나 같고, 10,000,000보다 작거나 같다.
+첫째 줄에 입력으로 주어진 M개의 수에 대해서, 각 수가 적힌 숫자 카드를 상근이가 몇 개 가지고 있는지를 공백으로 구분해 출력한다.
+10 +6 3 2 10 10 10 -10 -10 7 3 +8 +10 9 -5 2 3 4 5 -10 ++
3 0 0 1 2 0 0 2 ++
N개의 정수가 주어진다. 이때, 최솟값과 최댓값을 구하는 프로그램을 작성하시오.
+첫째 줄에 정수의 개수 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 N개의 정수를 공백으로 구분해서 주어진다. 모든 정수는 -1,000,000보다 크거나 같고, 1,000,000보다 작거나 같은 정수이다.
+첫째 줄에 주어진 정수 N개의 최솟값과 최댓값을 공백으로 구분해 출력한다.
+5 +20 10 35 30 7 ++
7 35 ++
숫자와 콤마로만 이루어진 문자열 S가 주어진다. 이때, S에 포함되어있는 정수의 개수를 구하는 프로그램을 작성하시오.
+ +S의 첫 문자와 마지막 문자는 항상 숫자이고, 콤마는 연속해서 주어지지 않는다. 또, 0으로 시작하는 정수는 주어지지 않는다.
+첫째 줄에 문자열 S가 주어진다. S의 길이는 최대 100이다.
+문자열 S에 포함되어 있는 정수의 개수를 출력한다.
+10,20,30,50,100 ++
5 ++
피보나치 수는 0과 1로 시작한다. 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1이다. 그 다음 2번째 부터는 바로 앞 두 피보나치 수의 합이 된다.
+ +이를 식으로 써보면 Fn = Fn-1 + Fn-2 (n ≥ 2)가 된다.
+ +n=17일때 까지 피보나치 수를 써보면 다음과 같다.
+ +0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597
+ +n이 주어졌을 때, n번째 피보나치 수를 구하는 프로그램을 작성하시오.
+첫째 줄에 n이 주어진다. n은 10,000보다 작거나 같은 자연수 또는 0이다.
+첫째 줄에 n번째 피보나치 수를 출력한다.
+10 ++
55 ++
정수를 저장하는 스택을 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.
+ +명령은 총 다섯 가지이다.
+ +첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 않은 명령이 주어지는 경우는 없다.
+출력해야하는 명령이 주어질 때마다, 한 줄에 하나씩 출력한다.
+14 +push 1 +push 2 +top +size +empty +pop +pop +pop +size +empty +pop +push 3 +empty +top ++
7 +pop +top +push 123 +top +pop +top +pop ++
2 +2 +0 +2 +1 +-1 +0 +1 +-1 +0 +3 ++
-1 +-1 +123 +123 +-1 +-1 ++
크기가 N*N인 행렬 A가 주어진다. 이때, A의 B제곱을 구하는 프로그램을 작성하시오. 수가 매우 커질 수 있으니, A^B의 각 원소를 1,000으로 나눈 나머지를 출력한다.
+첫째 줄에 행렬의 크기 N과 B가 주어진다. (2 ≤ N ≤ 5, 1 ≤ B ≤ 100,000,000,000)
+ +둘째 줄부터 N개의 줄에 행렬의 각 원소가 주어진다. 행렬의 각 원소는 1,000보다 작거나 같은 자연수 또는 0이다.
+첫째 줄부터 N개의 줄에 걸쳐 행렬 A를 B제곱한 결과를 출력한다.
+2 5 +1 2 +3 4 ++
3 3 +1 2 3 +4 5 6 +7 8 9 ++
5 10 +1 0 0 0 1 +1 0 0 0 1 +1 0 0 0 1 +1 0 0 0 1 +1 0 0 0 1 ++
69 558 +337 406 ++
468 576 684 +62 305 548 +656 34 412 ++
512 0 0 0 512 +512 0 0 0 512 +512 0 0 0 512 +512 0 0 0 512 +512 0 0 0 512 ++
45656이란 수를 보자.
+ +이 수는 인접한 모든 자리의 차이가 1이다. 이런 수를 계단 수라고 한다.
+ +N이 주어질 때, 길이가 N인 계단 수가 총 몇 개 있는지 구해보자. 0으로 시작하는 수는 계단수가 아니다.
+첫째 줄에 N이 주어진다. N은 1보다 크거나 같고, 100보다 작거나 같은 자연수이다.
+첫째 줄에 정답을 1,000,000,000으로 나눈 나머지를 출력한다.
+1 ++
2 ++
9 ++
17 ++
정수를 저장하는 큐를 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.
+ +명령은 총 여섯 가지이다.
+ +첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 않은 명령이 주어지는 경우는 없다.
+출력해야하는 명령이 주어질 때마다, 한 줄에 하나씩 출력한다.
+15 +push 1 +push 2 +front +back +size +empty +pop +pop +pop +size +empty +pop +push 3 +empty +front ++
1 +2 +2 +0 +1 +2 +-1 +0 +1 +-1 +0 +3 ++
두 자연수 A와 B가 주어진다. 이때, A+B, A-B, A*B, A/B(몫), A%B(나머지)를 출력하는 프로그램을 작성하시오.
+두 자연수 A와 B가 주어진다. (1 ≤ A, B ≤ 10,000)
+첫째 줄에 A+B, 둘째 줄에 A-B, 셋째 줄에 A*B, 넷째 줄에 A/B, 다섯째 줄에 A%B를 출력한다.
+7 3 ++
10 +4 +21 +2 +1 ++
피보나치 수는 0과 1로 시작한다. 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1이다. 그 다음 2번째 부터는 바로 앞 두 피보나치 수의 합이 된다.
+ +이를 식으로 써보면 Fn = Fn-1 + Fn-2 (n ≥ 2)가 된다.
+ +n=17일때 까지 피보나치 수를 써보면 다음과 같다.
+ +0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597
+ +n이 주어졌을 때, n번째 피보나치 수를 구하는 프로그램을 작성하시오.
+첫째 줄에 n이 주어진다. n은 20보다 작거나 같은 자연수 또는 0이다.
+첫째 줄에 n번째 피보나치 수를 출력한다.
+10 ++
55 ++
1에서 N까지 번호가 붙은 N개의 섬이 일렬로 쭉 늘어서 있다. 이 섬들 간에는 아직 다리가 없어서 배로만 이동을 해야 했기에 매우 불편했다. 그렇기에 정부에서는 이 섬들에 다리를 연결하고자 한다. 정부는 섬 i와 섬 i+1을 연결하는 다리를 총 N−1개 지을 계획에 있다. 그러나 다리라는 것이 바로 지어지는 것이 아니다 보니, 짓는 순서에 따라 사람들에게 미치는 영향이 다르다. 정부는 다리가 순서대로 지어지는 순간마다 다음과 같은 것들을 알고 싶다.
+ +정부는 이 문제에 매우 골머리를 썩히고 있다. 그래서 정부는 이런 문제를 전문적으로 해결한다는 당신에게 도움을 요청했다. 정부가 원하는 값들을 구해주자!
+첫 번째 줄에 섬의 개수 N (2 ≤ N ≤ 105)가 주어진다.
+ +다음 N−1개의 줄에는 각 줄마다 정수 i (1 ≤ i < N)이 주어지는데, 이는 섬 i와 i+1을 잇는 다리를 짓겠다는 의미이다. 중복해서 등장하는 수는 없다.
+각 다리를 지을 때마다 정부가 원하는 값을 공백으로 구분하여 각 줄마다 출력한다.
+3 +1 +2 ++
1 1 +3 4 ++
\(a\)의 거듭제곱 \(a^{b}\)를 편하게 \(pow_{a}(b)\)라고 나타내어 보자.
+ +그리고 \(pow_{a}^{0}(a) = a, pow_{a}^{k+1}(a) = pow_{a} (pow_{a}^{k}(a)) (k \ge 0)\)라고 하자.
+ +우리의 일은 \(a\)와 \(k\)가 주어질 때 \(pow_{a}^{k}(a)\)를 계산하는 것이다. 즉
+ +\(a^{a^{a^{a^{a^{...^{{...}^{{a}^{a}}}}}}}}\) (\(a\)가 \(k+1\)개)
+ +을 계산하는 것이다. 주의해야 할 점은 만약 \(k = 2\)이라고 할 때
+ +\((a^{a})^{a} \neq a^{(a^{a})}\)
+ +라는 것이다. 우리가 구하는 것은 후자이다.
+첫 번째 줄에 \(a\)와 \(k\) (1 ≤ \(a\) ≤ 109, 0 ≤ \(k\) ≤ 109)가 공백으로 구분되어 주어진다.
+\(pow_{a}^{k}(a)\)의 값을 출력한다. 답이 매우 커질 수 있으므로 답을 \(a+1\)로 나눈 나머지를 출력한다.
+\(pow_{2}^{3}(2) = 2^{2^{2^{2}}} = 65,536\)이므로, 이를 3으로 나눈 나머지인 1을 출력한다.
+2 3 ++
1 ++
어느 날 재의는 기묘한 대회에 참가하게 되었다. 그 이름은 King of penalty! 이 대회는 ICPC와 거의 비슷한 대회인데, 세부적인 규칙은 다음과 같다.
+ +드디어 대회가 시작되었다! 재의는 문제를 받는 순간에 이 대회에서는 N개의 문제가 출제되었고, 각 문제마다 몇 분을 투자하면 풀 수 있는지 분석을 완료했다. 재의는 코딩머신이기 때문에 소스가 틀리는 일 따위 없으며, 또한 남자이기 때문에 한번 작성을 시작한 소스는 작성을 완료하고 나서야 다른 소스를 작성한다. 재의가 소스를 제출하는데 걸리는 시간은 0초이므로 이에 관해서는 신경 쓸 필요 없다.
+ +예를 들어 P=30, N=3이고 각 문제를 푸는 시간이 2분, 12분, 16분 이라고 하자. 그리고 재의가 2분, 12분, 16분 걸리는 문제 순서대로 소스를 작성한다고 하면, 재의가 첫 번째로 푼 문제의 페널티는 2, 두 번째로 푼 문제의 페널티는 14, 이 될 것이고, 마지막 문제는 작성이 끝난 시간이 딱 30분이기 때문에 대회가 이미 끝나서 제출을 하지 못한다. 그러므로 재의는 총 두 문제를 풀고, 페널티는 16이 되는 것이다. 이 방법은 가장 많은 문제를 푸는 방법이기는 하지만, 가장 많은 페널티를 받는 방법은 아니다. 가장 페널티를 많이 받는 방법은 대회 시작 15분이 되었을 때부터 시작하여, 12분이 걸리는 문제와 2분이 걸리는 문제를 차례대로 해결하는 것이다. 그렇게 되면 총 페널티는 56이 되어 최대가 된다.
+첫 번째 줄에 대회의 시간 P (1 ≤ P ≤ 109)와 문제의 개수 N (1 ≤ N ≤ 100,000)이 공백으로 구분되어 주어진다.
+ +두 번째 줄에는 N개의 정수가 공백으로 구분되어 주어지는데, 이는 각 문제를 재의가 해결하는데 걸리는 시간이다. 각 정수는 0 이상 P 미만이다.
+재의가 대회 시간 내에 최대로 많이 풀 수 있는 문제의 수와 그 때 최대로 받을 수 있 는 페널티의 수치를 출력한다.
+30 3 +2 12 16 ++
2 56 ++
지민이는 항구에서 일한다. 그리고 화물을 배에 실어야 한다. 모든 화물은 박스에 안에 넣어져 있다. 항구에는 크레인이 N대 있고, 1분에 박스를 하나씩 배에 실을 수 있다. 모든 크레인은 동시에 움직인다.
+ +각 크레인은 무게 제한이 있다. 이 무게 제한보다 무거운 박스는 크레인으로 움직일 수 없다. 모든 박스를 배로 옮기는데 드는 시간의 최솟값을 구하는 프로그램을 작성하시오.
+첫째 줄에 N이 주어진다. N은 50보다 작거나 같은 자연수이다. 둘째 줄에는 각 크레인의 무게 제한이 주어진다. 이 값은 1,000,000보다 작거나 같다. 셋째 줄에는 박스의 수 M이 주어진다. M은 10,000보다 작거나 같은 자연수이다. 넷째 줄에는 각 박스의 무게가 주어진다. 이 값도 1,000,000보다 작거나 같은 자연수이다.
+첫째 줄에 모든 박스를 배로 옮기는데 드는 시간의 최솟값을 출력한다. 만약 모든 박스를 배로 옮길 수 없으면 -1을 출력한다.
+3 +6 8 9 +5 +2 5 2 4 7 ++
2 +19 20 +7 +14 12 16 19 16 1 5 ++
4 +23 32 25 28 +10 +5 27 10 16 24 20 2 32 18 7 ++
10 +11 17 5 2 20 7 5 5 20 7 +5 +18 18 15 15 17 ++
2 ++
4 ++
3 ++
2 ++
준하는 사이트에 회원가입을 하다가 joonas라는 아이디가 이미 존재하는 것을 보고 놀랐다. 준하는 놀람을 ??!로 표현한다. 준하가 가입하려고 하는 사이트에 이미 존재하는 아이디가 주어졌을 때, 놀람을 표현하는 프로그램을 작성하시오.
+첫째 줄에 준하가 가입하려고 하는 사이트에 이미 존재하는 아이디가 주어진다. 아이디는 알파벳 소문자로만 이루어져 있으며, 길이는 50자를 넘지 않는다.
+첫째 줄에 준하의 놀람을 출력한다. 놀람은 아이디 뒤에 ??!를 붙여서 나타낸다.
+joonas ++
baekjoon ++
joonas??! ++
baekjoon??! ++
명우는 홍준이와 함께 팰린드롬 놀이를 해보려고 한다.
+ +먼저, 홍준이는 자연수 N개를 칠판에 적는다. 그 다음, 명우에게 질문을 총 M번 한다.
+ +각 질문은 두 정수 S와 E(1 ≤ S ≤ E ≤ N)로 나타낼 수 있으며, S번째 수부터 E번째 까지 수가 팰린드롬을 이루는지를 물어보며, 명우는 각 질문에 대해 팰린드롬이다 또는 아니다를 말해야 한다.
+ +예를 들어, 홍준이가 칠판에 적은 수가 1, 2, 1, 3, 1, 2, 1라고 하자.
+ +자연수 N개와 질문 M개가 모두 주어졌을 때, 명우의 대답을 구하는 프로그램을 작성하시오.
+첫째 줄에 수열의 크기 N (1 ≤ N ≤ 2,000)이 주어진다.
+ +둘째 줄에는 홍준이가 칠판에 적은 수 N개가 순서대로 주어진다. 칠판에 적은 수는 100,000보다 작거나 같은 자연수이다.
+ +셋째 줄에는 홍준이가 한 질문의 개수 M (1 ≤ M ≤ 1,000,000)이 주어진다.
+ +넷째 줄부터 M개의 줄에는 홍준이가 명우에게 한 질문 S와 E가 한 줄에 하나씩 주어진다.
+총 M개의 줄에 걸쳐 홍준이의 질문에 대한 명우의 답을 입력으로 주어진 순서에 따라서 출력한다. 팰린드롬인 경우에는 1, 아닌 경우에는 0을 출력한다.
+7 +1 2 1 3 1 2 1 +4 +1 3 +2 5 +3 3 +5 7 ++
1 +0 +1 +1 ++
두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.
+첫째 줄에 테스트 케이스의 개수 T가 주어진다.
+ +각 테스트 케이스는 한 줄로 이루어져 있으며, 각 줄에 A와 B가 주어진다. (0 < A, B < 10)
+각 테스트 케이스마다 A+B를 출력한다.
+5 +1 1 +2 3 +3 4 +9 8 +5 2 ++
2 +5 +7 +17 +7 ++
두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.
+입력은 여러 개의 테스트 케이스로 이루어져 있다.
+ +각 테스트 케이스는 한 줄로 이루어져 있으며, 각 줄에 A와 B가 주어진다. (0 < A, B < 10)
+각 테스트 케이스마다 A+B를 출력한다.
+1 1 +2 3 +3 4 +9 8 +5 2 ++
2 +5 +7 +17 +7 ++
두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.
+입력은 여러 개의 테스트 케이스로 이루어져 있다.
+ +각 테스트 케이스는 한 줄로 이루어져 있으며, 각 줄에 A와 B가 주어진다. (0 < A, B < 10)
+ +입력의 마지막에는 0 두 개가 들어온다.
+각 테스트 케이스마다 A+B를 출력한다.
+1 1 +2 3 +3 4 +9 8 +5 2 +0 0 ++
2 +5 +7 +17 +7 ++
외판원 순회 문제는 영어로 Traveling Salesman problem (TSP) 라고 불리는 문제로 computer science 분야에서 가장 중요하게 취급되는 문제 중 하나이다. 여러 가지 변종 문제가 있으나, 여기서는 가장 일반적인 형태의 문제를 살펴보자.
+ +1번부터 N번까지 번호가 매겨져 있는 도시들이 있고, 도시들 사이에는 길이 있다. (길이 없을 수도 있다) 이제 한 외판원이 어느 한 도시에서 출발해 N개의 도시를 모두 거쳐 다시 원래의 도시로 돌아오는 순회 여행 경로를 계획하려고 한다. 단, 한 번 갔던 도시로는 다시 갈 수 없다. (맨 마지막에 여행을 출발했던 도시로 돌아오는 것은 예외) 이런 여행 경로는 여러 가지가 있을 수 있는데, 가장 적은 비용을 들이는 여행 계획을 세우고자 한다.
+ +각 도시간에 이동하는데 드는 비용은 행렬 W[i][j]형태로 주어진다. W[i][j]는 도시 i에서 도시 j로 가기 위한 비용을 나타낸다. 비용은 대칭적이지 않다. 즉, W[i][j] 는 W[j][i]와 다를 수 있다. 모든 도시간의 비용은 양의 정수이다. W[i][i]는 항상 0이다. 경우에 따라서 도시 i에서 도시 j로 갈 수 없는 경우도 있으며 이럴 경우 W[i][j]=0이라고 하자.
+ +N과 비용 행렬이 주어졌을 때, 가장 적은 비용을 들이는 외판원의 순회 여행 경로를 구하는 프로그램을 작성하시오.
+첫째 줄에 도시의 수 N이 주어진다. (2 ≤ N ≤ 10) 다음 N개의 줄에는 비용 행렬이 주어진다. 각 행렬의 성분은 1,000,000 이하의 양의 정수이며, 갈 수 없는 경우는 0이 주어진다. W[i][j]는 도시 i에서 j로 가기 위한 비용을 나타낸다.
+ +항상 순회할 수 있는 경우만 입력으로 주어진다.
+첫째 줄에 외판원의 순회에 필요한 최소 비용을 출력한다.
+4 +0 10 15 20 +5 0 9 10 +6 13 0 12 +8 8 9 0 ++
35 ++
1부터 N까지의 수로 이루어진 순열이 있다. 이때, 사전순으로 바로 이전에 오는 순열을 구하는 프로그램을 작성하시오.
+ +사전 순으로 가장 앞서는 순열은 오름차순으로 이루어진 순열이고, 가장 마지막에 오는 순열은 내림차순으로 이루어진 순열이다.
+ +N = 3인 경우에 사전순으로 순열을 나열하면 다음과 같다.
+ +첫째 줄에 N(1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄에 순열이 주어진다.
+첫째 줄에 입력으로 주어진 순열의 이전에 오는 순열을 출력한다. 만약, 사전순으로 가장 처음에 오는 순열인 경우에는 -1을 출력한다.
+4 +1 2 3 4 ++
5 +5 4 3 2 1 ++
-1 ++
5 4 3 1 2 ++
수 N개 A1, A2, ..., AN이 주어진다. 이때, 연속된 부분 구간의 합이 M으로 나누어 떨어지는 구간의 개수를 구하는 프로그램을 작성하시오.
+ +즉, Ai + ... + Aj (i ≤ j) 의 합이 M으로 나누어 떨어지는 (i, j) 쌍의 개수를 구해야 한다.
+첫째 줄에 N과 M이 주어진다. (1 ≤ N ≤ 106, 2 ≤ M ≤ 103)
+ +둘째 줄에 N개의 수 A1, A2, ..., AN이 주어진다. (0 ≤ Ai ≤ 109)
+첫째 줄에 연속된 부분 구간의 합이 M으로 나누어 떨어지는 구간의 개수를 출력한다.
+5 3 +1 2 3 1 2 ++
7 ++
알파벳 소문자로만 이루어진 단어가 주어진다. 이때, 이 단어가 팰린드롬인지 아닌지 확인하는 프로그램을 작성하시오.
+ +팰린드롬이란 앞으로 읽을 때와 거꾸로 읽을 때 똑같은 단어를 말한다.
+ +level, noon은 팰린드롬이고, baekjoon, online, judge는 팰린드롬이 아니다.
+첫째 줄에 단어가 주어진다. 단어의 길이는 1보다 크거나 같고, 100보다 작거나 같으며, 알파벳 소문자로만 이루어져 있다.
+첫째 줄에 팰린드롬이면 1, 아니면 0을 출력한다.
+level ++
baekjoon ++
1 ++
0 ++
N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오.
+첫째 줄에 수의 개수 N(1 ≤ N ≤ 10,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 10,000보다 작거나 같은 자연수이다.
+첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다.
+10 +5 +2 +3 +1 +4 +2 +3 +5 +1 +7 ++
1 +1 +2 +2 +3 +3 +4 +5 +5 +7 ++
예제를 보고 규칙을 유추한 뒤에 별을 찍어 보세요.
+첫째 줄에 N(1 ≤ N ≤ 100)이 주어진다.
+첫째 줄부터 차례대로 별을 출력한다.
+1 ++
2 ++
3 ++
4 ++
* ++
* + * +* + * ++
* * + * +* * + * +* * + * ++
* * + * * +* * + * * +* * + * * +* * + * * ++
수강신청의 마스터 김종혜 선생님에게 새로운 과제가 주어졌다.
+ +김종혜 선생님한테는 Si에 시작해서 Ti에 끝나는 N개의 수업이 주어지는데, 최소의 강의실을 사용해서 모든 수업을 가능하게 해야 한다.
+ +참고로, 수업이 끝난 직후에 다음 수업을 시작할 수 있다. (즉, Ti ≤ Sj 일 경우 i 수업과 j 수업은 같이 들을 수 있다.)
+ +수강신청 대충한 게 찔리면, 선생님을 도와드리자!
+첫 번째 줄에 N이 주어진다. (1 ≤ N ≤ 200,000)
+ +이후 N개의 줄에 Si, Ti가 주어진다. (0 ≤ Si < Ti ≤ 109)
+강의실의 개수를 출력하라.
+3 +1 3 +2 4 +3 5 ++
2 ++
10진법 수 N이 주어진다. 이 수를 B진법으로 바꿔 출력하는 프로그램을 작성하시오.
+ +10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를 사용한다.
+ +A: 10, B: 11, ..., F: 15, ..., Y: 34, Z: 35
+첫째 줄에 N과 B가 주어진다. (2 ≤ B ≤ 36) N은 10억보다 작거나 같은 자연수이다.
+첫째 줄에 10진법 수 N을 B진법으로 출력한다.
+60466175 36 ++
ZZZZZ ++
두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.
+첫째 줄에 테스트 케이스의 개수 T가 주어진다.
+ +각 테스트 케이스는 한 줄로 이루어져 있으며, 각 줄에 A와 B가 주어진다. (0 < A, B < 10)
+각 테스트 케이스마다 "Case #x: "를 출력한 다음, A+B를 출력한다. 테스트 케이스 번호는 1부터 시작한다.
+5 +1 1 +2 3 +3 4 +9 8 +5 2 ++
Case #1: 2 +Case #2: 5 +Case #3: 7 +Case #4: 17 +Case #5: 7 ++
요세푸스 문제는 다음과 같다.
+ +1번부터 N번까지 N명의 사람이 원을 이루면서 앉아있고, 양의 정수 K(≤ N)가 주어진다. 이제 순서대로 K번째 사람을 제거한다. 한 사람이 제거되면 남은 사람들로 이루어진 원을 따라 이 과정을 계속해 나간다. 이 과정은 N명의 사람이 모두 제거될 때까지 계속된다. 원에서 사람들이 제거되는 순서를 (N, K)-요세푸스 순열이라고 한다. 예를 들어 (7, 3)-요세푸스 순열은 <3, 6, 2, 7, 5, 1, 4>이다.
+ +N과 K가 주어지면, 마지막으로 남는 사람의 번호를 구하는 프로그램을 작성하시오.
+첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 5,000,000)
+첫째 줄에 마지막으로 남는 사람의 번호를 출력한다.
+7 3 ++
4 ++
준규가 가지고 있는 동전은 총 N종류이고, 각각의 동전을 매우 많이 가지고 있다.
+ +동전을 적절히 사용해서 그 가치의 합을 K로 만들려고 한다. 이때 필요한 동전 개수의 최솟값을 구하는 프로그램을 작성하시오.
+첫째 줄에 N과 K가 주어진다. (1 ≤ N ≤ 10, 1 ≤ K ≤ 100,000,000)
+ +둘째 줄부터 N개의 줄에 동전의 가치 Ai가 오름차순으로 주어진다. (1 ≤ Ai ≤ 1,000,000, A1 = 1, i ≥ 2인 경우에 Ai는 Ai-1의 배수)
+첫째 줄에 K원을 만드는데 필요한 동전 개수의 최솟값을 출력한다.
+10 4200 +1 +5 +10 +50 +100 +500 +1000 +5000 +10000 +50000 ++
10 4790 +1 +5 +10 +50 +100 +500 +1000 +5000 +10000 +50000 ++
6 ++
12 ++
크기가 N×M인 행렬 A와 M×K인 B를 곱할 때 필요한 곱셈 연산의 수는 총 N×M×K번이다. 행렬 N개를 곱하는데 필요한 곱셈 연산의 수는 행렬을 곱하는 순서에 따라 달라지게 된다.
+ +예를 들어, A의 크기가 5×3이고, B의 크기가 3×2, C의 크기가 2×6인 경우에 행렬의 곱 ABC를 구하는 경우를 생각해보자.
+ +같은 곱셈이지만, 곱셈을 하는 순서에 따라서 곱셈 연산의 수가 달라진다.
+ +행렬 N개의 크기가 주어졌을 때, 모든 행렬을 곱하는데 필요한 곱셈 연산 횟수의 최솟값을 구하는 프로그램을 작성하시오. 입력으로 주어진 행렬의 순서를 바꾸면 안 된다.
+첫째 줄에 행렬의 개수 N(1 ≤ N ≤ 500)이 주어진다.
+ +둘째 줄부터 N개 줄에는 행렬의 크기 r과 c가 주어진다. (1 ≤ r, c ≤ 500)
+ +항상 순서대로 곱셈을 할 수 있는 크기만 입력으로 주어진다.
+첫째 줄에 입력으로 주어진 행렬을 곱하는데 필요한 곱셈 연산의 최솟값을 출력한다. 정답은 231-1 보다 작거나 같은 자연수이다. 또한, 최악의 순서로 연산해도 연산 횟수가 231-1보다 작거나 같다.
+3 +5 3 +3 2 +2 6 ++
90 ++
자연수 \(N\)과 정수 \(K\)가 주어졌을 때 이항 계수 \(\binom{N}{K}\)를 구하는 프로그램을 작성하시오.
+첫째 줄에 \(N\)과 \(K\)가 주어진다. (1 ≤ \(N\) ≤ 10, 0 ≤ \(K\) ≤ \(N\))
+\(\binom{N}{K}\)를 출력한다.
+5 2 ++
10 ++
자연수 \(N\)과 정수 \(K\)가 주어졌을 때 이항 계수 \(\binom{N}{K}\)를 10,007로 나눈 나머지를 구하는 프로그램을 작성하시오.
+첫째 줄에 \(N\)과 \(K\)가 주어진다. (1 ≤ \(N\) ≤ 1,000, 0 ≤ \(K\) ≤ \(N\))
+\(\binom{N}{K}\)를 10,007로 나눈 나머지를 출력한다.
+5 2 ++
10 ++
수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오.
+ +예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이고, 길이는 4이다.
+첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000)이 주어진다.
+ +둘째 줄에는 수열 A를 이루고 있는 Ai가 주어진다. (1 ≤ Ai ≤ 1,000)
+첫째 줄에 수열 A의 가장 긴 증가하는 부분 수열의 길이를 출력한다.
+6 +10 20 10 30 20 50 ++
4 ++
수열 S가 어떤 수 Sk를 기준으로 S1 < S2 < ... Sk-1 < Sk > Sk+1 > ... SN-1 > SN을 만족한다면, 그 수열을 바이토닉 수열이라고 한다.
+ +예를 들어, {10, 20, 30, 25, 20}과 {10, 20, 30, 40}, {50, 40, 25, 10} 은 바이토닉 수열이지만, {1, 2, 3, 2, 1, 2, 3, 2, 1}과 {10, 20, 30, 40, 20, 30} 은 바이토닉 수열이 아니다.
+ +수열 A가 주어졌을 때, 그 수열의 부분 수열 중 바이토닉 수열이면서 가장 긴 수열의 길이를 구하는 프로그램을 작성하시오.
+첫째 줄에 수열 A의 크기 N이 주어지고, 둘째 줄에는 수열 A를 이루고 있는 Ai가 주어진다. (1 ≤ N ≤ 1,000, 1 ≤ Ai ≤ 1,000)
+첫째 줄에 수열 A의 부분 수열 중에서 가장 긴 바이토닉 수열의 길이를 출력한다.
+예제의 경우 {1 5 2 1 4 3 4 5 2 1}이 가장 긴 바이토닉 부분 수열이다.
+10 +1 5 2 1 4 3 4 5 2 1 ++
7 ++
오르막 수는 수의 자리가 오름차순을 이루는 수를 말한다. 이때, 인접한 수가 같아도 오름차순으로 친다.
+ +예를 들어, 2234와 3678, 11119는 오르막 수이지만, 2232, 3676, 91111은 오르막 수가 아니다.
+ +수의 길이 N이 주어졌을 때, 오르막 수의 개수를 구하는 프로그램을 작성하시오. 수는 0으로 시작할 수 있다.
+첫째 줄에 N (1 ≤ N ≤ 1,000)이 주어진다.
+첫째 줄에 길이가 N인 오르막 수의 개수를 10,007로 나눈 나머지를 출력한다.
+1 ++
2 ++
3 ++
10 ++
55 ++
220 ++
크리보드는 kriii가 만든 신기한 키보드이다. 크리보드에는 버튼이 4개만 있으며, 하는 역할은 다음과 같다.
+ +크리보드의 버튼을 총 N번 눌러서 화면에 출력된 A개수를 최대로하는 프로그램을 작성하시오.
+첫째 줄에 N(1 ≤ N ≤ 100)이 주어진다.
+크리보드의 버튼을 총 N번 눌러서 화면에 출력할 수 있는 A 개수의 최댓값을 출력한다.
+N = 3인 경우에 A, A, A를 눌러 A 3개를 출력할 수 있다.
+ +N = 7인 경우에는 A, A, A, Ctrl-A, Ctrl-C, Ctrl-V, Ctrl-V를 눌러 9개를 출력할 수 있다.
+ +N = 11인 경우에는 A, A, A, Ctrl-A, Ctrl-C, Ctrl-V, Ctrl-V, Ctrl-A, Ctrl-C, Ctrl-V, Ctrl-V 를 눌러 27개를 출력할 수 있다.
+3 ++
7 ++
11 ++
3 ++
9 ++
27 ++
수빈이는 TV를 보고 있다. 수빈이는 채널을 돌리려고 했지만, 버튼을 너무 세게 누르는 바람에, 일부 숫자 버튼이 고장났다.
+ +리모컨에는 버튼이 0부터 9까지 숫자, +와 -가 있다. +를 누르면 현재 보고있는 채널에서 +1된 채널로 이동하고, -를 누르면 -1된 채널로 이동한다. 채널 0에서 -를 누른 경우에는 채널이 변하지 않고, 채널은 무한대 만큼 있다.
+ +수빈이가 지금 이동하려고 하는 채널은 N이다. 어떤 버튼이 고장났는지 주어졌을 때, 채널 N으로 이동하기 위해서 버튼을 최소 몇 번 눌러야하는지 구하는 프로그램을 작성하시오.
+ +수빈이가 지금 보고 있는 채널은 100번이다.
+첫째 줄에 수빈이가 이동하려고 하는 채널 N (0 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 고장난 버튼의 개수 M (0 ≤ M ≤ 10)이 주어진다. 고장난 버튼이 있는 경우에는 셋째 줄에는 고장난 버튼이 주어지며, 같은 버튼이 여러 번 주어지는 경우는 없다.
+첫째 줄에 채널 N으로 이동하기 위해 버튼을 최소 몇 번 눌러야 하는지를 출력한다.
+예제 1의 경우 5455++ 또는 5459--
+5457 +3 +6 7 8 ++
100 +5 +0 1 2 3 4 ++
500000 +8 +0 2 3 4 6 7 8 9 ++
100 +3 +1 0 5 ++
14124 +0 ++
1 +9 +1 2 3 4 5 6 7 8 9 ++
80000 +2 +8 9 ++
6 ++
0 ++
11117 ++
0 ++
5 ++
2 ++
2228 ++
새로운 검색 엔진을 만들었다. 이 검색 엔진은 구글을 뛰어넘는 세계 최고의 검색 엔진이기 때문에, 신뢰도가 높은 결과를 보여줘야 한다. 하지만, 사용자가 검색어를 입력했을 때, 이것에 맞는 결과가 수천, 수만개가 될 수 있으므로, 이 중에 어떤 것이 중요하고, 어떤 사이트를 보여줘야 하는지가 큰 문제이다.
+ +구글은 이러한 것을 사이트를 크롤링해서 자체 알고리즘을 이용해서 사이트의 순위를 매긴다.
+ +우리의 검색 엔진은 다음과 같은 방법을 사용할 것이다.
+ +일단 모든 웹사이트에 1점을 준다. 만약에 웹사이트 A에 웹사이트 B로 가는 링크가 있다면, 웹사이트 B의 점수에 웹사이트 A의 점수를 더한다.
+ +예를 들어, 웹사이트가 총 3개가 있다. A, B, C이다. 일단 모든 웹사이트의 점수는 1이다. 이제, 웹사이트 A와 B에 모두 C로 가는 링크가 있다고 하면, C의 점수는 3이 되고, A와 B의 점수는 그대로 1이다. 만약 어떤 검색어가 입력 되었는데, 이 웹사이트 A B C에 모두 해당하는 것이었다면, C가 가장 위에 표시된다.
+ +이런 웹사이트에 점수를 매기는 일이 어려운 이유는 바로, 링크를 교환하는 사이트 들이 있기 때문이다. 이 말은 A가 B를 링크하고, B가 A를 링크하는 것이다. 따라서, 이런 현상으로 점수가 무한대로 늘어나는 것을 방지하기 위해서, A의 점수를 B에 더할 때는, B에서 A로의 링크가 직접적으로 또는 간접적으로 없을 때이다.
+ +링크가 어떻게 되어있는 지가 주어지고, 웹사이트의 이름이 주어질 때, 그 웹사이트의 점수를 출력하는 프로그램을 작성하시오.
+첫째 줄에 링크 정보의 개수 N이 주어진다. 이 N은 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 링크의 정보가 주어진다. 링크의 정보에 처음 등장하는 문자열은 웹사이트의 이름이고, 그 다음에 등장하는 수는 그 웹사이트를 가리키고 있는 웹사이트 이름의 수이다. 예를 들어, "C 2 A B"는 A에서 C로 가는 링크, B에서 C로 가는 링크가 있다는 의미이다. 마지막 줄에는 점수를 조사해야 할 웹사이트의 이름이 주어진다.
+ +모든 웹사이트의 이름은 길이가 50보다 작거나 같은 알파벳 대문자로 이루어진 문자열이다. 한 웹사이트를 가리키고 있는 웹사이트 이름의 수는 24보다 작거나 같은 음이 아닌 정수이다. 한 웹사이트를 가르키고 있는 웹사이트에 대한 정보는 여러 번 등장하지 않는다. 점수를 조사해야 할 웹사이트의 이름은 반드시 링크의 정보에 등장한다.
+첫째 줄에 문제의 정답을 출력한다.
+3 +A 3 B C D +B 2 C D +C 1 D +A ++
1 +C 2 A B +C ++
1 +A 0 +A ++
2 +A 1 B +B 1 A +A ++
4 +A 5 B C D E F +B 1 A +C 1 B +D 1 B +A ++
1 +MYSITE 3 OTHERSITE ANOTHERSITE THIRDSITE +MYSITE ++
8 ++
3 ++
1 ++
1 ++
3 ++
4 ++
IQ Test의 문제 중에는 공통된 패턴을 찾는 문제가 있다. 수열이 주어졌을 때, 다음 수를 찾는 문제이다.
+ +예를 들어, 1, 2, 3, 4, 5가 주어졌다. 다음 수는 무엇인가? 당연히 답은 6이다. 약간 더 어려운 문제를 보면, 3, 6, 12, 24, 48이 주어졌을 때, 다음 수는 무엇인가? 역시 답은 96이다.
+ +이제 제일 어려운 문제를 보자.
+ +1, 4, 13, 40이 주어졌을 때, 다음 수는 무엇일까? 답은 121이다. 그 이유는 항상 다음 수는 앞 수*3+1이기 때문이다.
+ +은진이는 위의 3문제를 모두 풀지 못했으므로, 자동으로 풀어주는 프로그램을 작성하기로 했다. 항상 모든 답은 구하는 규칙은 앞 수*a + b이다. 그리고, a와 b는 정수이다.
+ +수 N개가 주어졌을 때, 규칙에 맞는 다음 수를 구하는 프로그램을 작성하시오.
+첫째 줄에 N이 주어진다. N은 50보다 작거나 같은 자연수이다. 둘째 줄에는 N개의 수가 주어진다. 이 수는 모두 절댓값이 100보다 작거나 같은 정수이다.
+다음 수를 출력한다. 만약 다음 수가 여러 개일 경우에는 A를 출력하고, 다음 수를 구할 수 없는 경우에는 B를 출력한다.
+4 +1 4 13 40 ++
5 +1 2 3 4 5 ++
5 +3 6 12 24 48 ++
1 +0 ++
2 +-1 2 ++
2 +57 57 ++
4 +16 -8 4 -2 ++
5 +6 5 4 3 1 ++
4 +-12 12 -36 60 ++
121 ++
6 ++
96 ++
A ++
A ++
57 ++
B ++
B ++
-132 ++
길이가 N으로 같은 문자열 X와 Y가 있을 때, 두 문자열 X와 Y의 차이는 X[i] ≠ Y[i]인 i의 개수이다. 예를 들어, X=”jimin”, Y=”minji”이면, 둘의 차이는 4이다.
+ +두 문자열 A와 B가 주어진다. 이때, A의 길이는 B의 길이보다 작거나 같다. 이제 A의 길이가 B의 길이와 같아질 때 까지 다음과 같은 연산을 할 수 있다.
+ +이때, A와 B의 길이가 같으면서, A와 B의 차이를 최소로 하는 프로그램을 작성하시오.
+첫째 줄에 A와 B가 주어진다. A와 B의 길이는 최대 50이고, A의 길이는 B의 길이보다 작거나 같고, 알파벳 소문자로만 이루어져 있다.
+A와 B의 길이가 같으면서, A와 B의 차이를 최소가 되도록 했을 때, 그 차이를 출력하시오.
+adaabc aababbc ++
hello xello ++
koder topcoder ++
abc topabcoder ++
giorgi igroig ++
2 ++
1 ++
1 ++
0 ++
6 ++
당신은 길을 가다가 이상한 쪽지를 발견했다. 그 쪽지에는 암호가 적혀 있었는데, 똑똑한 당신은 암호가 뒤집으면 해독된다는 것을 발견했다.
+ +이 암호를 해독하는 프로그램을 작성하시오.
+한 줄에 하나의 암호가 주어진다. 암호의 길이는 500을 넘지 않는다.
+ +마지막 줄에는 "END"가 주어진다. (END는 해독하지 않는다.)
+각 암호가 해독된 것을 한 줄에 하나씩 출력한다.
+!edoc doog a tahW +noitacitsufbo +erafraw enirambus detcirtsernu yraurbeF fo tsrif eht no nigeb ot dnetni eW +lla sees rodroM fo drol eht ,ssertrof sih nihtiw delaecnoC +END ++
What a good code! +obfustication +We intend to begin on the first of February unrestricted submarine warfare +Concealed within his fortress, the lord of Mordor sees all ++
꼬마 정민이는 이제 A + B 정도는 쉽게 계산할 수 있다. 이제 A + B + C를 계산할 차례이다!
+첫 번째 줄에 A, B, C (1 ≤ A, B, C ≤ 1012)이 공백을 사이에 두고 주어진다.
+A+B+C의 값을 출력한다.
+77 77 7777 ++
7931 ++
인하은행에는 ATM이 1대밖에 없다. 지금 이 ATM앞에 N명의 사람들이 줄을 서있다. 사람은 1번부터 N번까지 번호가 매겨져 있으며, i번 사람이 돈을 인출하는데 걸리는 시간은 Pi분이다.
+ +사람들이 줄을 서는 순서에 따라서, 돈을 인출하는데 필요한 시간의 합이 달라지게 된다. 예를 들어, 총 5명이 있고, P1 = 3, P2 = 1, P3 = 4, P4 = 3, P5 = 2 인 경우를 생각해보자. [1, 2, 3, 4, 5] 순서로 줄을 선다면, 1번 사람은 3분만에 돈을 뽑을 수 있다. 2번 사람은 1번 사람이 돈을 뽑을 때 까지 기다려야 하기 때문에, 3+1 = 4분이 걸리게 된다. 3번 사람은 1번, 2번 사람이 돈을 뽑을 때까지 기다려야 하기 때문에, 총 3+1+4 = 8분이 필요하게 된다. 4번 사람은 3+1+4+3 = 11분, 5번 사람은 3+1+4+3+2 = 13분이 걸리게 된다. 이 경우에 각 사람이 돈을 인출하는데 필요한 시간의 합은 3+4+8+11+13 = 39분이 된다.
+ +줄을 [2, 5, 1, 4, 3] 순서로 줄을 서면, 2번 사람은 1분만에, 5번 사람은 1+2 = 3분, 1번 사람은 1+2+3 = 6분, 4번 사람은 1+2+3+3 = 9분, 3번 사람은 1+2+3+3+4 = 13분이 걸리게 된다. 각 사람이 돈을 인출하는데 필요한 시간의 합은 1+3+6+9+13 = 32분이다. 이 방법보다 더 필요한 시간의 합을 최소로 만들 수는 없다.
+ +줄을 서 있는 사람의 수 N과 각 사람이 돈을 인출하는데 걸리는 시간 Pi가 주어졌을 때, 각 사람이 돈을 인출하는데 필요한 시간의 합의 최솟값을 구하는 프로그램을 작성하시오.
+첫째 줄에 사람의 수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄에는 각 사람이 돈을 인출하는데 걸리는 시간 Pi가 주어진다. (1 ≤ Pi ≤ 1,000)
+첫째 줄에 각 사람이 돈을 인출하는데 필요한 시간의 합의 최솟값을 출력한다.
+5 +3 1 4 3 2 ++
32 ++
자연수 \(N\)과 정수 \(K\)가 주어졌을 때 이항 계수 \(\binom{N}{K}\)를 1,000,000,007로 나눈 나머지를 구하는 프로그램을 작성하시오.
+첫째 줄에 \(N\)과 \(K\)가 주어진다. (1 ≤ \(N\) ≤ 4,000,000, 0 ≤ \(K\) ≤ \(N\))
+\(\binom{N}{K}\)를 1,000,000,007로 나눈 나머지를 출력한다.
+5 2 ++
10 ++
가중치 없는 방향 그래프 G가 주어졌을 때, 모든 정점 (i, j)에 대해서, i에서 j로 가는 길이가 양수인 경로가 있는지 없는지 구하는 프로그램을 작성하시오.
+첫째 줄에 정점의 개수 N (1 ≤ N ≤ 100)이 주어진다. 둘째 줄부터 N개 줄에는 그래프의 인접 행렬이 주어진다. i번째 줄의 j번째 숫자가 1인 경우에는 i에서 j로 가는 간선이 존재한다는 뜻이고, 0인 경우는 없다는 뜻이다. i번째 줄의 i번째 숫자는 항상 0이다.
+총 N개의 줄에 걸쳐서 문제의 정답을 인접행렬 형식으로 출력한다. 정점 i에서 j로 가는 길이가 양수인 경로가 있으면 i번째 줄의 j번째 숫자를 1로, 없으면 0으로 출력해야 한다.
+3 +0 1 0 +0 0 1 +1 0 0 ++
7 +0 0 0 1 0 0 0 +0 0 0 0 0 0 1 +0 0 0 0 0 0 0 +0 0 0 0 1 1 0 +1 0 0 0 0 0 0 +0 0 0 0 0 0 1 +0 0 1 0 0 0 0 ++
1 1 1 +1 1 1 +1 1 1 ++
1 0 1 1 1 1 1 +0 0 1 0 0 0 1 +0 0 0 0 0 0 0 +1 0 1 1 1 1 1 +1 0 1 1 1 1 1 +0 0 1 0 0 0 1 +0 0 1 0 0 0 0 ++
n(2 ≤ n ≤ 100)개의 도시가 있다. 그리고 한 도시에서 출발하여 다른 도시에 도착하는 m(1 ≤ m ≤ 100,000)개의 버스가 있다. 각 버스는 한 번 사용할 때 필요한 비용이 있다.
+ +모든 도시의 쌍 (A, B)에 대해서 도시 A에서 B로 가는데 필요한 비용의 최솟값을 구하는 프로그램을 작성하시오.
+첫째 줄에 도시의 개수 n이 주어지고 둘째 줄에는 버스의 개수 m이 주어진다. 그리고 셋째 줄부터 m+2줄까지 다음과 같은 버스의 정보가 주어진다. 먼저 처음에는 그 버스의 출발 도시의 번호가 주어진다. 버스의 정보는 버스의 시작 도시 a, 도착 도시 b, 한 번 타는데 필요한 비용 c로 이루어져 있다. 시작 도시와 도착 도시가 같은 경우는 없다. 비용은 100,000보다 작거나 같은 자연수이다.
+ +시작 도시와 도착 도시를 연결하는 노선은 하나가 아닐 수 있다.
+n개의 줄을 출력해야 한다. i번째 줄에 출력하는 j번째 숫자는 도시 i에서 j로 가는데 필요한 최소 비용이다. 만약, i에서 j로 갈 수 없는 경우에는 그 자리에 0을 출력한다.
+5 +14 +1 2 2 +1 3 3 +1 4 1 +1 5 10 +2 4 2 +3 4 1 +3 5 1 +4 5 3 +3 5 10 +3 1 8 +1 4 2 +5 1 7 +3 4 2 +5 2 4 ++
0 2 3 1 4 +12 0 15 2 5 +8 5 0 1 1 +10 7 13 0 3 +7 4 10 6 0 ++
RGB거리에는 집이 N개 있다. 거리는 선분으로 나타낼 수 있고, 1번 집부터 N번 집이 순서대로 있다.
+ +집은 빨강, 초록, 파랑 중 하나의 색으로 칠해야 한다. 각각의 집을 빨강, 초록, 파랑으로 칠하는 비용이 주어졌을 때, 아래 규칙을 만족하면서 모든 집을 칠하는 비용의 최솟값을 구해보자.
+ +첫째 줄에 집의 수 N(2 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 각 집을 빨강, 초록, 파랑으로 칠하는 비용이 1번 집부터 한 줄에 하나씩 주어진다. 집을 칠하는 비용은 1,000보다 작거나 같은 자연수이다.
+첫째 줄에 모든 집을 칠하는 비용의 최솟값을 출력한다.
+3 +26 40 83 +49 60 57 +13 89 99 ++
3 +1 100 100 +100 1 100 +100 100 1 ++
3 +1 100 100 +100 100 100 +1 100 100 ++
6 +30 19 5 +64 77 64 +15 19 97 +4 71 57 +90 86 84 +93 32 91 ++
8 +71 39 44 +32 83 55 +51 37 63 +89 29 100 +83 58 11 +65 13 15 +47 25 29 +60 66 19 ++
96 ++
3 ++
102 ++
208 ++
253 ++
홍준이는 요즘 주식에 빠져있다. 그는 미래를 내다보는 눈이 뛰어나, 날 별로 주가를 예상하고 언제나 그게 맞아떨어진다. 매일 그는 아래 세 가지 중 한 행동을 한다.
+ +홍준이는 미래를 예상하는 뛰어난 안목을 가졌지만, 어떻게 해야 자신이 최대 이익을 얻을 수 있는지 모른다. 따라서 당신에게 날 별로 주식의 가격을 알려주었을 때, 최대 이익이 얼마나 되는지 계산을 해달라고 부탁했다.
+ +예를 들어 날 수가 3일이고 날 별로 주가가 10, 7, 6일 때, 주가가 계속 감소하므로 최대 이익은 0이 된다. 그러나 만약 날 별로 주가가 3, 5, 9일 때는 처음 두 날에 주식을 하나씩 사고, 마지막날 다 팔아 버리면 이익이 10이 된다.
+입력의 첫 줄에는 테스트케이스 수를 나타내는 자연수 T가 주어진다. 각 테스트케이스 별로 첫 줄에는 날의 수를 나타내는 자연수 N(2 ≤ N ≤ 1,000,000)이 주어지고, 둘째 줄에는 날 별 주가를 나타내는 N개의 자연수들이 공백으로 구분되어 순서대로 주어진다. 날 별 주가는 10,000이하다.
+각 테스트케이스 별로 최대 이익을 나타내는 정수 하나를 출력한다. 답은 부호있는 64bit 정수형으로 표현 가능하다.
+3 +3 +10 7 6 +3 +3 5 9 +5 +1 1 3 1 2 ++
0 +10 +5 ++
어떤 N개의 수가 주어져 있다. 그런데 중간에 수의 변경이 빈번히 일어나고 그 중간에 어떤 부분의 곱을 구하려 한다. 만약에 1, 2, 3, 4, 5 라는 수가 있고, 3번째 수를 6으로 바꾸고 2번째부터 5번째까지 곱을 구하라고 한다면 240을 출력하면 되는 것이다. 그리고 그 상태에서 다섯 번째 수를 2로 바꾸고 3번째부터 5번째까지 곱을 구하라고 한다면 48이 될 것이다.
+첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)과 M(1 ≤ M ≤ 10,000), K(1 ≤ K ≤ 10,000) 가 주어진다. M은 수의 변경이 일어나는 횟수이고, K는 구간의 곱을 구하는 횟수이다. 그리고 둘째 줄부터 N+1번째 줄까지 N개의 수가 주어진다. 그리고 N+2번째 줄부터 N+M+K+1 번째 줄까지 세 개의 정수 a,b,c가 주어지는데, a가 1인 경우 b번째 수를 c로 바꾸고 a가 2인 경우에는 b부터 c까지의 곱을 구하여 출력하면 된다.
+ +입력으로 주어지는 모든 수는 0보다 크거나 같고, 1,000,000보다 작거나 같은 정수이다.
+첫째 줄부터 K줄에 걸쳐 구한 구간의 곱을 1,000,000,007로 나눈 나머지를 출력한다.
+5 2 2 +1 +2 +3 +4 +5 +1 3 6 +2 2 5 +1 5 2 +2 3 5 ++
5 2 2 +1 +2 +3 +4 +5 +1 3 0 +2 2 5 +1 3 6 +2 2 5 ++
240 +48 ++
0 +240 ++
占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙
+ +占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙
+ +占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙
+ +占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙
+ +占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙
+ +占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙
+ +占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙
+ +占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙
+占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙
+ +占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙
+ +占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙
+占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙
+ +占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙
+ +占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙
+占쏙이옙占쏙옙占쏙옙占쏙옙占쏙문옙占쏙옙占쏙옙占쏙옙占쏙제옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙는옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙예占쏙옙占제쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙를옙占쏙옙占쏙옙占쏙옙占쏙옙채占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙점占쏙옙占쏙옙占쏙옙占쏙옙占쏙하옙占지쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙않옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙습옙占쏙옙占쏙옙占쏙니옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙다占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙.
+ +占쏙옙데占쏙옙占쏙옙占쏙옙占쏙옙占쏙이옙占쏙옙占쏙터옙占쏙옙占는쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙한占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙개옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙입占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙니占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙다옙
+ +占쏙옙占쏙옙占쏙옙입占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙력占쏙옙占쏙옙占쏙옙占쏙옙을占쏙옙占쏙옙占쏙옙占쏙옙占쏙받옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占을쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙필占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙요占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙는옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙없占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占다쏙옙占쏙옙
+占쏙옙占쏙옙 +占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙 ++
占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙 ++
큰 방에 N개의 풍선이 떠있다. 풍선들은 왼쪽부터 오른쪽까지 일렬로 있다. 진솔이는 화살 가지고 노는 것과 사냥 연습하는 것을 좋아한다. 진솔이는 화살을 왼쪽에서 오른쪽으로 쏜다. 높이는 임의로 선택한다. 화살은 선택된 높이 H에서 풍선을 마주칠 때까지 왼쪽에서 오른쪽으로 이동한다. 화살이 풍선을 마주치는 순간, 풍선은 터지고 사라진다. 화살은 계속해서 가던길을 가는데 높이는 1 줄어든다. 그러므로 만약 화살이 높이 H에서 이동 중이었다면 풍선을 터트린 후에는 높이가 H-1이 된다.
+ +우리의 목표는 모든 풍선을 터트리되 가능한한 적은 화살을 사용하는 것이다.
+첫 번째 줄에는 정수 N(1 ≤ N ≤ 1 000 000)이 들어온다.
+ +두 번째 줄에는 배열 Hi가 N개 들어온다.
+ +각각의 Hi(1 ≤ Hi ≤ 1 000 000)는 i번째 풍선의 높이에 해당하며 왼쪽에서 오른쪽으로 나열되는 순서이다.
+첫 번째 줄 한줄에 최소한 필요한 화살의 개수를 출력한다.
+첫 번째 예제 에서 [5,4,3] 을 터트리고 [2,1]을 터트리면 모든 풍선을 터트릴 수 있으므로 최소한 2개의 화살을 필요로 한다.
+5 +2 1 5 4 3 ++
5 +1 2 3 4 5 ++
5 +4 5 2 1 4 ++
2 ++
5 ++
3 ++
악독한 코치 주혁은 선수들을 이름 순으로 세우는 것을 좋아한다. 더 악독한 것은 어떤 순서로 서야할지도 알려주지 않았다! 선수들의 이름이 주어질 때 어떤 순서로 이루어져있는지 확인해보자.
+첫째 줄에 N개의 이름이 주어진다. (2 ≤ N ≤ 20)
+ +다음 N개의 줄에는 각 선수들의 이름이 주어진다. 이름은 2 이상 12 이하의 대문자로만 이루어져있다. 선수의 이름은 중복되지 않는다.
+이름이 증가하는 순으로 나타나면 INCREASING, 감소하는 순이면 DECREASING을 한 줄에 출력한다. 만약 위의 두 경우가 아니라면 NEITHER를 출력한다.
+5 +JOE +BOB +ANDY +AL +ADAM ++
11 +HOPE +ALI +BECKY +JULIE +MEGHAN +LAUREN +MORGAN +CARLI +MEGAN +ALEX +TOBIN ++
4 +GEORGE +JOHN +PAUL +RINGO ++
DECREASING ++
NEITHER ++
INCREASING ++
요세푸스 문제는 다음과 같다.
+ +1번부터 N번까지 N명의 사람이 원을 이루면서 앉아있고, 양의 정수 K(≤ N)가 주어진다. 이제 순서대로 K번째 사람을 제거한다. 한 사람이 제거되면 남은 사람들로 이루어진 원을 따라 이 과정을 계속해 나간다. 이 과정은 N명의 사람이 모두 제거될 때까지 계속된다. 원에서 사람들이 제거되는 순서를 (N, K)-요세푸스 순열이라고 한다. 예를 들어 (7, 3)-요세푸스 순열은 <3, 6, 2, 7, 5, 1, 4>이다.
+ +N과 K가 주어지면 (N, K)-요세푸스 순열을 구하는 프로그램을 작성하시오.
+첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 5,000)
+예제와 같이 요세푸스 순열을 출력한다.
+7 3 ++
<3, 6, 2, 7, 5, 1, 4> ++
2차원 평면 위의 점 N개가 주어진다. 좌표를 x좌표가 증가하는 순으로, x좌표가 같으면 y좌표가 증가하는 순서로 정렬한 다음 출력하는 프로그램을 작성하시오.
+첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다.
+첫째 줄부터 N개의 줄에 점을 정렬한 결과를 출력한다.
+5 +3 4 +1 1 +1 -1 +2 2 +3 3 ++
1 -1 +1 1 +2 2 +3 3 +3 4 ++
2차원 평면 위의 점 N개가 주어진다. 좌표를 y좌표가 증가하는 순으로, y좌표가 같으면 x좌표가 증가하는 순서로 정렬한 다음 출력하는 프로그램을 작성하시오.
+첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다.
+첫째 줄부터 N개의 줄에 점을 정렬한 결과를 출력한다.
+5 +0 4 +1 2 +1 -1 +2 2 +3 3 ++
1 -1 +1 2 +2 2 +3 3 +0 4 ++
정수 N이 주어졌을 때, 소인수분해하는 프로그램을 작성하시오.
+첫째 줄에 정수 N (1 ≤ N ≤ 10,000,000)이 주어진다.
+N의 소인수분해 결과를 한 줄에 하나씩 오름차순으로 출력한다. N이 1인 경우 아무것도 출력하지 않는다.
+72 ++
3 ++
6 ++
2 ++
9991 ++
2 +2 +2 +3 +3 ++
3 ++
2 +3 ++
2 ++
97 +103 ++
접미사 배열은 문자열 S의 모든 접미사를 사전순으로 정렬해 놓은 배열이다.
+ +baekjoon의 접미사는 baekjoon, aekjoon, ekjoon, kjoon, joon, oon, on, n 으로 총 8가지가 있고, 이를 사전순으로 정렬하면, aekjoon, baekjoon, ekjoon, joon, kjoon, n, on, oon이 된다.
+ +문자열 S가 주어졌을 때, 모든 접미사를 사전순으로 정렬한 다음 출력하는 프로그램을 작성하시오.
+첫째 줄에 문자열 S가 주어진다. S는 알파벳 소문자로만 이루어져 있고, 길이는 1,000보다 작거나 같다.
+첫째 줄부터 S의 접미사를 사전순으로 한 줄에 하나씩 출력한다.
+baekjoon ++
aekjoon +baekjoon +ekjoon +joon +kjoon +n +on +oon ++
수 N개가 주어졌을 때, i번째 수부터 j번째 수까지 합을 구하는 프로그램을 작성하시오.
+첫째 줄에 수의 개수 N과 합을 구해야 하는 횟수 M이 주어진다. 둘째 줄에는 N개의 수가 주어진다. 수는 1,000보다 작거나 같은 자연수이다. 셋째 줄부터 M개의 줄에는 합을 구해야 하는 구간 i와 j가 주어진다.
+총 M개의 줄에 입력으로 주어진 i번째 수부터 j번째 수까지 합을 출력한다.
+5 3 +5 4 3 2 1 +1 3 +2 4 +5 5 ++
12 +9 +1 ++
N×N개의 수가 N×N 크기의 표에 채워져 있다. (x1, y1)부터 (x2, y2)까지 합을 구하는 프로그램을 작성하시오. (x, y)는 x행 y열을 의미한다.
+ +예를 들어, N = 4이고, 표가 아래와 같이 채워져 있는 경우를 살펴보자.
+ +| 1 | +2 | +3 | +4 | +
| 2 | +3 | +4 | +5 | +
| 3 | +4 | +5 | +6 | +
| 4 | +5 | +6 | +7 | +
여기서 (2, 2)부터 (3, 4)까지 합을 구하면 3+4+5+4+5+6 = 27이고, (4, 4)부터 (4, 4)까지 합을 구하면 7이다.
+ +표에 채워져 있는 수와 합을 구하는 연산이 주어졌을 때, 이를 처리하는 프로그램을 작성하시오.
+첫째 줄에 표의 크기 N과 합을 구해야 하는 횟수 M이 주어진다. (1 ≤ N ≤ 1024, 1 ≤ M ≤ 100,000) 둘째 줄부터 N개의 줄에는 표에 채워져 있는 수가 1행부터 차례대로 주어진다. 다음 M개의 줄에는 네 개의 정수 x1, y1, x2, y2 가 주어지며, (x1, y1)부터 (x2, y2)의 합을 구해 출력해야 한다. 표에 채워져 있는 수는 1,000보다 작거나 같은 자연수이다. (x1 ≤ x2, y1 ≤ y2)
+총 M줄에 걸쳐 (x1, y1)부터 (x2, y2)까지 합을 구해 출력한다.
+4 3 +1 2 3 4 +2 3 4 5 +3 4 5 6 +4 5 6 7 +2 2 3 4 +3 4 3 4 +1 1 4 4 ++
2 4 +1 2 +3 4 +1 1 1 1 +1 2 1 2 +2 1 2 1 +2 2 2 2 ++
27 +6 +64 ++
1 +2 +3 +4 ++
트리의 지름이란, 트리에서 임의의 두 점 사이의 거리 중 가장 긴 것을 말한다. 트리의 지름을 구하는 프로그램을 작성하시오.
+트리가 입력으로 주어진다. 먼저 첫 번째 줄에서는 트리의 정점의 개수 V가 주어지고 (2 ≤ V ≤ 100,000)둘째 줄부터 V개의 줄에 걸쳐 간선의 정보가 다음과 같이 주어진다. 정점 번호는 1부터 V까지 매겨져 있다.
+ +먼저 정점 번호가 주어지고, 이어서 연결된 간선의 정보를 의미하는 정수가 두 개씩 주어지는데, 하나는 정점번호, 다른 하나는 그 정점까지의 거리이다. 예를 들어 네 번째 줄의 경우 정점 3은 정점 1과 거리가 2인 간선으로 연결되어 있고, 정점 4와는 거리가 3인 간선으로 연결되어 있는 것을 보여준다. 각 줄의 마지막에는 -1이 입력으로 주어진다. 주어지는 거리는 모두 10,000 이하의 자연수이다.
+첫째 줄에 트리의 지름을 출력한다.
+5 +1 3 2 -1 +2 4 4 -1 +3 1 2 4 3 -1 +4 2 4 3 3 5 6 -1 +5 4 6 -1 ++
11+
자연수 n이 주어졌을 때, GCD(n, k) = 1을 만족하는 자연수 1 ≤ k ≤ n 의 개수를 구하는 프로그램을 작성하시오.
+첫째 줄에 자연수 n (1 ≤ n ≤ 1012)이 주어진다.
+GCD(n, k) = 1을 만족하는 자연수 1 ≤ k ≤ n 의 개수를 출력한다.
+1 ++
5 ++
10 ++
45 ++
99 ++
1 ++
4 ++
4 ++
24 ++
60 ++
koosaga와 cubelover가 님 게임을 하고 있다. 님 게임은 돌을 차곡 차곡 위로 쌓아올린 돌 더미 k개를 이용한다. 각각의 돌 더미에는 한 개 이상의 돌이 있다. 두 사람은 서로 턴을 번갈아가면서 님 게임을 진행한다. 각 사람의 턴이 되면, 돌이 있는 돌 더미를 하나 선택하고, 그 돌 더미에서 돌을 하나 이상 제거한다. 전체 돌 더미에서 마지막 돌을 제거하는 사람이 게임을 지게 된다.
+ +게임은 koosaga가 먼저 시작한다. 두 사람이 최적의 방법으로 게임을 진행했을 때, 이기는 사람을 출력한다.
+첫째 줄에 돌 더미의 개수 N (1 ≤ N ≤ 100)이 주어진다.
+ +둘째 줄에는 각 돌 더미에 쌓여있는 돌의 개수 Pi (1 ≤ Pi ≤ 2×109)가 주어진다.
+koosaga가 이기는 경우에는 'koosaga'를, cubelover가 이기는 경우에는 'cubelover'를 출력한다.
+1 +1 ++
1 +2 ++
2 +1 1 ++
2 +1 2 ++
2 +2 2 ++
4 +1 2 3 4 ++
6 +9 8 9 8 9 9 ++
cubelover ++
koosaga ++
koosaga ++
koosaga ++
cubelover ++
koosaga ++
cubelover ++
2×n 크기의 직사각형을 1×2, 2×1 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오.
+ +아래 그림은 2×5 크기의 직사각형을 채운 한 가지 방법의 예이다.
+ +첫째 줄에 n이 주어진다. (1 ≤ n ≤ 1,000)
+첫째 줄에 2×n 크기의 직사각형을 채우는 방법의 수를 10,007로 나눈 나머지를 출력한다.
+2 ++
9 ++
2 ++
55 ++
2×n 직사각형을 1×2, 2×1과 2×2 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오.
+ +아래 그림은 2×17 직사각형을 채운 한가지 예이다.
+ +첫째 줄에 n이 주어진다. (1 ≤ n ≤ 1,000)
+첫째 줄에 2×n 크기의 직사각형을 채우는 방법의 수를 10,007로 나눈 나머지를 출력한다.
+2 ++
8 ++
12 ++
3 ++
171 ++
2731 ++
세 개의 장대가 있고 첫 번째 장대에는 반경이 서로 다른 n개의 원판이 쌓여 있다. 각 원판은 반경이 큰 순서대로 쌓여있다. 이제 수도승들이 다음 규칙에 따라 첫 번째 장대에서 세 번째 장대로 옮기려 한다.
+ +이 작업을 수행하는데 필요한 이동 순서를 출력하는 프로그램을 작성하라. 단, 이동 횟수는 최소가 되어야 한다.
+ +아래 그림은 원판이 5개인 경우의 예시이다.
+ +첫째 줄에 첫 번째 장대에 쌓인 원판의 개수 N (1 ≤ N ≤ 20)이 주어진다.
+첫째 줄에 옮긴 횟수 K를 출력한다.
+ +두 번째 줄부터 수행 과정을 출력한다. 두 번째 줄부터 K개의 줄에 걸쳐 두 정수 A B를 빈칸을 사이에 두고 출력하는데, 이는 A번째 탑의 가장 위에 있는 원판을 B번째 탑의 가장 위로 옮긴다는 뜻이다.
+3 ++
7 +1 3 +1 2 +3 2 +1 3 +2 1 +2 3 +1 3 ++
가리송과 안드레송은 정산소에서 일하고 있고, 미래를 예측하고자 한다. 둘에게는 큰 n x n 정사각형이 주어진다. 처음에 각 배열의 원소 (x,y)는 x + y 로 채워져있다. (1 ≤ x, y ≤ n).
+ +미래 예측을 하는데에 두가지 타입의 쿼리가 들어온다.
+ +쿼리 결과를 구하는 프로그램을 작성하시오.
+첫줄에는 배열의 크기 n과 쿼리의 개수 q가 입력된다. (1 ≤ n ≤ 106 , 1 ≤ q ≤ 105)
+ +그 다음 q개의 줄마다 “R r” (1 ≤ r ≤ n) 혹은 “C c” (1 ≤ c ≤ n)인 쿼리문이 입력된다.
+
q개의 줄에 걸쳐서 i번째 쿼리의 결과를 출력한다. (1 ≤ i ≤ q)
+3 7 +R 2 +C 3 +R 2 +R 1 +C 2 +C 1 +R 3 ++
12 +10 +0 +5 +5 +4 +0 ++
Mastermind is a two-person code breaking game which works as follows. The first person (the code maker) creates a sequence of n colored pegs (with duplicate colors allowed) and hides it from view. This sequence of pegs is the code.
+ +The second person (the code breaker) has the job of trying to determine the code maker’s code and she does so by making a series of guesses. Each guess also consists of n colored pegs. After each guess, the code maker gives the code breaker feedback about how close she is. This feedback consists of two number r and s, where
+ +For example, if the code is BACC (where we use different letters to represent colors) and the guess is CABB, then r = 1 (the A in the second position of both the code and the guess) and s = 2 (a B and C in the remaining three characters). Note that only one of the B’s in the guess will “match” with the single B in the code: once pegs in the code and the guess have been “matched” with each other, they can’t be matched with any other pegs.
+ +Your job in this problem is to determine r and s given a code and a guess
+The input is a single line containing a positive integer n ≤ 50 (the length of the code) followed by two strings of length n — the first of these is the code and the second is the guess. Both code and guess are made up of upper-case alphabetic characters.
+Output the values of r and s for the given input.
+4 BACC CABB ++
13 ABCDEFGHIJKLM NOPQRSTUVWXYZ ++
1 2 ++
0 0 ++
피보나치 수는 0과 1로 시작한다. 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1이다. 그 다음 2번째 부터는 바로 앞 두 피보나치 수의 합이 된다.
+ +이를 식으로 써보면 Fn = Fn-1 + Fn-2 (n ≥ 2)가 된다.
+ +n=17일때 까지 피보나치 수를 써보면 다음과 같다.
+ +0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597
+ +n과 m이 주어졌을 때, n번째 피보나치 수와 m번째 피보나치 수의 최대공약수를 구하는 프로그램을 작성하시오.
+첫째 줄에 n과 m이 주어진다. n과 m은 1,000,000,000,000,000,000보다 작거나 같은 자연수이다.
+첫째 줄에 n번째 피보나치 수와 m번째 피보나치 수의 최대공약수를 1,000,000,007으로 나눈 나머지를 출력한다.
+16 24 ++
21 ++
n(1≤n≤1,000)개의 도시가 있다. 그리고 한 도시에서 출발하여 다른 도시에 도착하는 m(1≤m≤100,000)개의 버스가 있다. 우리는 A번째 도시에서 B번째 도시까지 가는데 드는 버스 비용을 최소화 시키려고 한다. 그러면 A번째 도시에서 B번째 도시 까지 가는데 드는 최소비용과 경로를 출력하여라. 항상 시작점에서 도착점으로의 경로가 존재한다.
+첫째 줄에 도시의 개수 n(1≤n≤1,000)이 주어지고 둘째 줄에는 버스의 개수 m(1≤m≤100,000)이 주어진다. 그리고 셋째 줄부터 m+2줄까지 다음과 같은 버스의 정보가 주어진다. 먼저 처음에는 그 버스의 출발 도시의 번호가 주어진다. 그리고 그 다음에는 도착지의 도시 번호가 주어지고 또 그 버스 비용이 주어진다. 버스 비용은 0보다 크거나 같고, 100,000보다 작은 정수이다.
+ +그리고 m+3째 줄에는 우리가 구하고자 하는 구간 출발점의 도시번호와 도착점의 도시번호가 주어진다.
+첫째 줄에 출발 도시에서 도착 도시까지 가는데 드는 최소 비용을 출력한다.
+ +둘째 줄에는 그러한 최소 비용을 갖는 경로에 포함되어있는 도시의 개수를 출력한다. 출발 도시와 도착 도시도 포함한다.
+ +셋째 줄에는 최소 비용을 갖는 경로를 방문하는 도시 순서대로 출력한다. 경로가 여러가지인 경우 아무거나 하나 출력한다.
+5 +8 +1 2 2 +1 3 3 +1 4 1 +1 5 10 +2 4 2 +3 4 1 +3 5 1 +4 5 3 +1 5 ++
4 +3 +1 3 5 ++
알파벳 소문자로 이루어진 N개의 단어가 들어오면 아래와 같은 조건에 따라 정렬하는 프로그램을 작성하시오.
+ +단, 중복된 단어는 하나만 남기고 제거해야 한다.
+첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다.
+조건에 따라 정렬하여 단어들을 출력한다.
+13 +but +i +wont +hesitate +no +more +no +more +it +cannot +wait +im +yours ++
i +im +it +no +but +more +wait +wont +yours +cannot +hesitate ++
N개의 정수로 이루어진 수열이 있을 때, 크기가 양수인 부분수열 중에서 그 수열의 원소를 다 더한 값이 S가 되는 경우의 수를 구하는 프로그램을 작성하시오.
+첫째 줄에 정수의 개수를 나타내는 N과 정수 S가 주어진다. (1 ≤ N ≤ 20, |S| ≤ 1,000,000) 둘째 줄에 N개의 정수가 빈 칸을 사이에 두고 주어진다. 주어지는 정수의 절댓값은 100,000을 넘지 않는다.
+첫째 줄에 합이 S가 되는 부분수열의 개수를 출력한다.
+5 0 +-7 -3 -2 5 8 ++
1 ++
요세푸스 문제는 다음과 같다.
+ +1번부터 N번까지 N명의 사람이 원을 이루면서 앉아있고, 양의 정수 K(≤ N)가 주어진다. 이제 순서대로 K번째 사람을 제거한다. 한 사람이 제거되면 남은 사람들로 이루어진 원을 따라 이 과정을 계속해 나간다. 이 과정은 N명의 사람이 모두 제거될 때까지 계속된다. 원에서 사람들이 제거되는 순서를 (N, K)-요세푸스 순열이라고 한다. 예를 들어 (7, 3)-요세푸스 순열은 <3, 6, 2, 7, 5, 1, 4>이다.
+ +N과 K가 주어지면 (N, K)-요세푸스 순열을 구하는 프로그램을 작성하시오.
+첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 1,000)
+예제와 같이 요세푸스 순열을 출력한다.
+7 3 ++
<3, 6, 2, 7, 5, 1, 4> ++
koosaga와 cubelover가 님 게임을 하고 있다. 님 게임은 돌을 차곡 차곡 위로 쌓아올린 돌 더미 k개를 이용한다. 각각의 돌 더미에는 한 개 이상의 돌이 있다. 두 사람은 서로 턴을 번갈아가면서 님 게임을 진행한다. 각 사람의 턴이 되면, 돌이 있는 돌 더미를 하나 선택하고, 그 돌 더미에서 돌을 하나 이상 제거한다. 전체 돌 더미에서 마지막 돌을 제거하는 사람이 게임을 이기게 된다.
+ +게임은 koosaga가 먼저 시작한다. 두 사람이 최적의 방법으로 게임을 진행했을 때, 이기는 사람을 출력한다.
+첫째 줄에 돌 더미의 개수 N (1 ≤ N ≤ 100)이 주어진다.
+ +둘째 줄에는 각 돌 더미에 쌓여있는 돌의 개수 Pi (1 ≤ Pi ≤ 109)가 주어진다.
+koosaga가 이기는 경우에는 'koosaga'를, cubelover가 이기는 경우에는 'cubelover'를 출력한다.
+1 +1 ++
1 +2 ++
2 +1 1 ++
2 +1 2 ++
2 +2 2 ++
4 +1 2 3 4 ++
6 +9 8 9 8 9 9 ++
3 +2 4 6 ++
koosaga ++
koosaga ++
cubelover ++
koosaga ++
cubelover ++
koosaga ++
cubelover ++
cubelover ++
무한히 큰 배열에 다음과 같이 분수들이 적혀있다.
+ +| 1/1 | +1/2 | +1/3 | +1/4 | +1/5 | +… | +
| 2/1 | +2/2 | +2/3 | +2/4 | +… | +… | +
| 3/1 | +3/2 | +3/3 | +… | +… | +… | +
| 4/1 | +4/2 | +… | +… | +… | +… | +
| 5/1 | +… | +… | +… | +… | +… | +
| … | +… | +… | +… | +… | +… | +
이와 같이 나열된 분수들을 1/1 → 1/2 → 2/1 → 3/1 → 2/2 → … 과 같은 지그재그 순서로 차례대로 1번, 2번, 3번, 4번, 5번, … 분수라고 하자.
+ +X가 주어졌을 때, X번째 분수를 구하는 프로그램을 작성하시오.
+첫째 줄에 X(1 ≤ X ≤ 10,000,000)가 주어진다.
+첫째 줄에 분수를 출력한다.
+1 ++
2 ++
3 ++
4 ++
5 ++
6 ++
7 ++
8 ++
9 ++
14 ++
1/1 ++
1/2 ++
2/1 ++
3/1 ++
2/2 ++
1/3 ++
1/4 ++
2/3 ++
3/2 ++
2/4 ++
고려대학교에 입학한 새내기 호돌이는 안암역을 지나다가 한 붕어빵 장수를 만났어요.
+ +“안녕, 안녕, 안녕하십니까, 아저씨! 붕어빵 두 개 주세요.”
+ +“안녕을 세 번 외쳤으니 붕어빵 세 개!”
+ +붕어빵 두 개의 값을 내고 세 개를 받은 호돌이는 기분이 좋았어요. 호돌이가 붕어빵 하나를 꺼내어 한 입 물었는데…. 너무 뜨거워서 그만 붕어빵을 떨어뜨리고 말았어요ㅠㅠ
+ +붕어빵은 자유 낙하운동을 하면서 땅에 떨어졌는데 신기하게도 좌우가 뒤집힌 모양으로 착지했답니다. 호돌이가 붕어빵을 한 입 물기 전의 모양이 입력으로 주어지면, 땅에 떨어졌을 때에는 어떤 모양일지 출력하세요.
+첫째 줄에는 두 개의 정수 N과 M(0≤N,M≤10)이 주어집니다. 둘째 줄부터 N개의 줄에 걸쳐 붕어빵의 모양이 주어집니다. 각 행에는 공백을 나타내는 ‘0‘ 또는 붕어빵을 나타내는 ‘1’이 총 M개 주어집니다.
+입력으로 주어진 붕어빵이 좌우로 뒤집힌 모양을 출력하세요.
+입력으로 주어지는 각 행을 반전시켜서 출력하면 됩니다. 입력의 1행 1열은 출력의 1행 M열로, 입력의 1행 2열은 출력의 1행 M-1열로 … 입력의 1행 M열은 출력의 1행 1열로 … 입력의 N행 M열은 출력의 N행 1열로 출력하세요.
+5 7 +0010000 +0111010 +1111111 +0111010 +0010000 ++
0000100 +0101110 +1111111 +0101110 +0000100 ++
자연수 N이 주어졌을 때, 2의 제곱수면 1을 아니면 0을 출력하는 프로그램을 작성하시오.
+첫째 줄에 N(1 ≤ N ≤ 230)이 주어진다.
+N이 2의 제곱수면 1을 아니면 0을 출력하는 프로그램을 작성하시오.
+1 ++
2 ++
3 ++
4 ++
1 ++
1 ++
0 ++
1 ++
그래프가 주어졌을 때, 그 그래프의 최소 스패닝 트리를 구하는 프로그램을 작성하시오.
+ +최소 스패닝 트리는, 주어진 그래프의 모든 정점들을 연결하는 부분 그래프 중에서 그 가중치의 합이 최소인 트리를 말한다.
+첫째 줄에 정점의 개수 V(1 ≤ V ≤ 10,000)와 간선의 개수 E(1 ≤ E ≤ 100,000)가 주어진다. 다음 E개의 줄에는 각 간선에 대한 정보를 나타내는 세 정수 A, B, C가 주어진다. 이는 A번 정점과 B번 정점이 가중치 C인 간선으로 연결되어 있다는 의미이다. C는 음수일 수도 있으며, 절댓값이 1,000,000을 넘지 않는다.
+ +그래프의 정점은 1번부터 V번까지 번호가 매겨져 있고, 임의의 두 정점 사이에 경로가 있다. 최소 스패닝 트리의 가중치가 -2,147,483,648보다 크거나 같고, 2,147,483,647보다 작거나 같은 데이터만 입력으로 주어진다.
+첫째 줄에 최소 스패닝 트리의 가중치를 출력한다.
+3 3 +1 2 1 +2 3 2 +1 3 3 ++
3+
말썽꾸러기 연정이는 오늘도 태우의 자동차를 몰래타고 신나게 도로를 달리는 중이다.
+ +도로는 정확히 100km 이고, 연정이는 무조건 도로의 끝까지 달려야한다.
+ +도로의 각 구간에는 제한속도를 지정해 두었으나 쿨한 연정이는 속도 위반에는 개의치 않아 (더군다나 자신의 차도 아니므로) 자신이 원하는 속도로 달린다.
+ +도로는 N개의 구간으로 나뉘며 각 구간에는 도로 길이와 해당 도로의 제한속도가 주어진다.
+ +도로 N개의 총 합은 100km 이며 각 구간별 도로 길이와 제한 속도는 모두 양의 정수이다. 예를 들어, N이 3이고 (40, 75), (50, 35), (10, 45) 이라면
+ +연정이가 달린 도로 또한 M 개 구간으로 나뉘며 각 구간에는 도로 길이와 연정이가 달린 속도가 주어진다.
+ +M 개의 도로 총 합은 100km 이며 각 구간별 도로 길이와 달린 속도는 모두 양의 정수이다. 예를 들어 M 이 3이고 (40, 76), (20, 30), (40, 40) 이라면
+ +연정이가 100km 도로를 달리는 동안 속도를 위반한 최댓값을 구하시오.
+첫 줄에 N과 M이 주어진다. 그 다음 줄부터 N개의 줄은 각 구간의 길이 및 해당 구간에서의 제한 속도가 주어지며, 다음 M개의 줄은 연정이가 달린 각 구간의 길이와 해당 구간에서 달린 속도가 주어진다.
+연정이가 도로를 달리는 동안 속도 위반한 최댓값을 출력하시오. 단, 속도 위반을 하지 않았다면 0을 출력하시오.
+예를 들어 도로가 3구역 [(40km, 75km/h), (50km, 35km/h), (10km, 45km/h)] 이고. 연정이가 달린 3구역 [(40km, 76km/h), (20km, 30km/h), (40km, 40km/h)] 이라면, 처음 0 ~ 40km 영역에서 1km/h 만큼 위반했으나 60km ~ 90km 사이에서 5km/h 만큼 위반했기에 연정이가 위반한 최대 값은 5 이다.
+3 3 +40 75 +50 35 +10 45 +40 76 +20 30 +40 40 ++
5 ++
수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오.
+ +예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이고, 길이는 4이다.
+첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다.
+ +둘째 줄에는 수열 A를 이루고 있는 Ai가 주어진다. (1 ≤ Ai ≤ 1,000,000)
+첫째 줄에 수열 A의 가장 긴 증가하는 부분 수열의 길이를 출력한다.
+6 +10 20 10 30 20 50 ++
4 ++
세계적인 도둑 상덕이는 보석점을 털기로 결심했다.
+ +상덕이가 털 보석점에는 보석이 총 N개 있다. 각 보석은 무게 Mi와 가격 Vi를 가지고 있다. 상덕이는 가방을 K개 가지고 있고, 각 가방에 담을 수 있는 최대 무게는 Ci이다. 가방에는 최대 한 개의 보석만 넣을 수 있다.
+ +상덕이가 훔칠 수 있는 보석의 최대 가격을 구하는 프로그램을 작성하시오.
+첫째 줄에 N과 K가 주어진다. (1 ≤ N, K ≤ 300,000)
+ +다음 N개 줄에는 각 보석의 정보 Mi와 Vi가 주어진다. (0 ≤ Mi, Vi ≤ 1,000,000)
+ +다음 K개 줄에는 가방에 담을 수 있는 최대 무게 Ci가 주어진다. (1 ≤ Ci ≤ 100,000,000)
+ +모든 숫자는 양의 정수이다.
+첫째 줄에 상덕이가 훔칠 수 있는 보석 가격의 합의 최댓값을 출력한다.
+두 번째 예제의 경우 첫 번째 보석을 두 번째 가방에, 세 번째 보석을 첫 번째 가방에 넣으면 된다.
+2 1 +5 10 +100 100 +11 ++
3 2 +1 65 +5 23 +2 99 +10 +2 ++
10 ++
164 ++
A "0/1 string" is a string in which every character is either 0 or 1. There are two operations that can be performed on a 0/1 string:
0 becomes 1 and every 1 becomes 0. For example, "100" becomes "011".Consider this infinite sequence of 0/1 strings:
+ +You need to figure out the Kth character of Sgoogol, where googol = 10100.
+The first line of the input gives the number of test cases, T. Each of the next T lines contains a number K.
+For each test case, output one line containing "Case #x: y", where x is the test case number (starting from 1) and y is the Kth character of Sgoogol.
+4 +1 +2 +3 +10 ++
Case #1: 0 +Case #2: 0 +Case #3: 1 +Case #4: 0 ++
As the leader of the Evil League of Evil, Bad Horse has a lot of problems to deal with. Most recently, there have been far too many arguments and far too much backstabbing in the League, so much so that Bad Horse has decided to split the league into two departments in order to separate troublesome members. Being the Thoroughbred of Sin, Bad Horse isn't about to spend his valuable time figuring out how to split the League members by himself. That what he's got you -- his loyal henchman -- for.
+The first line of the input gives the number of test cases, T. T test cases follow. Each test case starts with a positive integer M on a line by itself -- the number of troublesome pairs of League members. The next M lines each contain a pair of names, separated by a single space.
+ +For each test case, output one line containing "Case #x: y", where x is the case number (starting from 1) and y is either "Yes" or "No", depending on whether the League members mentioned in the input can be split into two groups with neither of the groups containing a troublesome pair.
+2 +1 +Dead_Bowie Fake_Thomas_Jefferson +3 +Dead_Bowie Fake_Thomas_Jefferson +Fake_Thomas_Jefferson Fury_Leika +Fury_Leika Dead_Bowie ++
Case #1: Yes +Case #2: No ++
As the leader of the Evil League of Evil, Bad Horse has a lot of problems to deal with. Most recently, there have been far too many arguments and far too much backstabbing in the League, so much so that Bad Horse has decided to split the league into two departments in order to separate troublesome members. Being the Thoroughbred of Sin, Bad Horse isn't about to spend his valuable time figuring out how to split the League members by himself. That what he's got you -- his loyal henchman -- for.
+The first line of the input gives the number of test cases, T. T test cases follow. Each test case starts with a positive integer M on a line by itself -- the number of troublesome pairs of League members. The next M lines each contain a pair of names, separated by a single space.
+ +For each test case, output one line containing "Case #x: y", where x is the case number (starting from 1) and y is either "Yes" or "No", depending on whether the League members mentioned in the input can be split into two groups with neither of the groups containing a troublesome pair.
+2 +1 +Dead_Bowie Fake_Thomas_Jefferson +3 +Dead_Bowie Fake_Thomas_Jefferson +Fake_Thomas_Jefferson Fury_Leika +Fury_Leika Dead_Bowie ++
Case #1: Yes +Case #2: No ++
2048 게임은 4×4 크기의 보드에서 혼자 즐기는 재미있는 게임이다. 이 링크를 누르면 게임을 해볼 수 있다.
+ +이 게임에서 한 번의 이동은 보드 위에 있는 전체 블록을 상하좌우 네 방향 중 하나로 이동시키는 것이다. 이때, 같은 값을 갖는 두 블록이 충돌하면 두 블록은 하나로 합쳐지게 된다. 한 번의 이동에서 이미 합쳐진 블록은 또 다른 블록과 다시 합쳐질 수 없다. (실제 게임에서는 이동을 한 번 할 때마다 블록이 추가되지만, 이 문제에서 블록이 추가되는 경우는 없다)
+ +| <그림 1> | +<그림 2> | +<그림 3> | +
<그림 1>의 경우에서 위로 블록을 이동시키면 <그림 2>의 상태가 된다. 여기서, 왼쪽으로 블록을 이동시키면 <그림 3>의 상태가 된다.
+ +| <그림 4> | +<그림 5> | +<그림 6> | +<그림 7> | +
<그림 4>의 상태에서 블록을 오른쪽으로 이동시키면 <그림 5>가 되고, 여기서 다시 위로 블록을 이동시키면 <그림 6>이 된다. 여기서 오른쪽으로 블록을 이동시켜 <그림 7>을 만들 수 있다.
+ +| <그림 8> | +<그림 9> | +
<그림 8>의 상태에서 왼쪽으로 블록을 옮기면 어떻게 될까? 2가 충돌하기 때문에, 4로 합쳐지게 되고 <그림 9>의 상태가 된다.
+ +| <그림 10> | +<그림 11> | +<그림 12> | +<그림 13> | +
<그림 10>에서 위로 블록을 이동시키면 <그림 11>의 상태가 된다.
+ +<그림 12>의 경우에 위로 블록을 이동시키면 <그림 13>의 상태가 되는데, 그 이유는 한 번의 이동에서 이미 합쳐진 블록은 또 합쳐질 수 없기 때문이다.
+ +| <그림 14> | +<그림 15> | +
마지막으로, 똑같은 수가 세 개가 있는 경우에는 이동하려고 하는 쪽의 칸이 먼저 합쳐진다. 예를 들어, 위로 이동시키는 경우에는 위쪽에 있는 블록이 먼저 합쳐지게 된다. <그림 14>의 경우에 위로 이동하면 <그림 15>를 만든다.
+ +이 문제에서 다루는 2048 게임은 보드의 크기가 N×N 이다. 보드의 크기와 보드판의 블록 상태가 주어졌을 때, 최대 5번 이동해서 만들 수 있는 가장 큰 블록의 값을 구하는 프로그램을 작성하시오.
+첫째 줄에 보드의 크기 N (1 ≤ N ≤ 20)이 주어진다. 둘째 줄부터 N개의 줄에는 게임판의 초기 상태가 주어진다. 0은 빈 칸을 나타내며, 이외의 값은 모두 블록을 나타낸다. 블록에 쓰여 있는 수는 2보다 크거나 같고, 1024보다 작거나 같은 2의 제곱꼴이다. 블록은 적어도 하나 주어진다.
+최대 5번 이동시켜서 얻을 수 있는 가장 큰 블록을 출력한다.
+3 +2 2 2 +4 4 4 +8 8 8 ++
16 ++
정수 4를 1, 2, 3의 합으로 나타내는 방법은 총 7가지가 있다. 합을 나타낼 때는 수를 1개 이상 사용해야 한다.
+ +이를 사전순으로 정렬하면 다음과 같이 된다.
+ +정수 n과 k가 주어졌을 때, n을 1, 2, 3의 합으로 나타내는 방법 중에서 k번째로 오는 식을 구하는 프로그램을 작성하시오.
+첫째 줄에 정수 n과 k가 주어진다. n은 양수이며 11보다 작고, k는 231-1보다 작거나 같은 자연수이다.
+n을 1, 2, 3의 합으로 나타내는 방법 중에서 사전 순으로 k번째에 오는 것을 출력한다. k번째 오는 식이 없는 경우에는 -1을 출력한다.
+4 3 ++
4 5 ++
4 7 ++
4 8 ++
1+2+1 ++
2+1+1 ++
3+1 ++
-1 ++
구사과는 지폐를 오직 두 종류만 가지고 있다. 바로 P원 지폐와 Q원 지폐이다. 이 두 종류의 지폐를 구사과는 무한대만큼 가지고 있다.
+ +오늘 구사과가 구매하려고 하는 물건의 가격은 D원이다. 구사과가 이 물건을 구매하기 위해서 지불해야 하는 금액의 최솟값은 얼마일까?
+ +물건을 구매하기 위해서는 물건의 가격보다 크거나 같은 금액을 지불해야 한다.
+첫째 줄에 D, P, Q가 주어진다. 모두 109보다 작거나 같은 자연수이다.
+첫째 줄에 물건을 구매하기 위해 구사과가 지불해야 하는 금액의 최솟값을 출력한다.
+17 7 13 ++
21 7 13 ++
17 7 9 ++
37 9 17 ++
287341 2345 7253 ++
20 ++
21 ++
18 ++
43 ++
287398 ++
While using Google Street View, you may have picked up and dropped the character Pegman before. Today, a mischievous user is going to place Pegman in some cell of a rectangular grid of unit cells with R rows and C columns. Each of the cells in this grid might be blank, or it might be labeled with an arrow pointing in one of four possible directions: up, right, down, or left.
+
+When Pegman is placed on a grid cell, if that cell is blank, Pegman stands still forever. However, if that cell has an arrow, Pegman starts to walk in that direction. As he walks, whenever he encounters a blank cell, he just keeps walking in his current direction, but whenever he encounters another arrow, he changes to the direction of that arrow and then keeps walking.
+
+You know that it is possible that Pegman might keep happily walking around and around the grid forever, but it is also possible that Pegman's walk will take him over the edge of the grid! You may be able to prevent this and save him by changing the direction of one or more arrows. (Each arrow's direction can only be changed to one of the other three possible directions; arrows can only be changed, not added or removed.)
+
+What is the smallest number of arrows you will need to change to ensure that Pegman will not walk off the edge, no matter where on the grid he is initially placed?
The first line of the input gives the number of test cases, T. T test cases follow. Each begins with one line with two space-separated integers R, C. This line is followed by Rlines, each of which has C characters, each of which describes a grid cell and is one of the following:
+
+. period = no arrow
+^ caret = up arrow
+> greater than = right arrow
+v lowercase v = down arrow
+< less than = left arrow
For each test case, output one line containing "Case #x: y", where x is the test case number (starting from 1) and y is the minimum number of arrows that must be changed to ensure that Pegman will not leave the grid no matter where he is initially placed, or the text IMPOSSIBLE if it is not possible to ensure this, no matter how many arrows you change.
In Case #1, Pegman is guaranteed to walk off the top edge of the grid, no matter where he is placed. You can prevent that by changing the topmost arrow to point down, which will cause him to walk back and forth between those two arrows forever.
+
+In Case #2, no matter where Pegman is placed, he will walk around and around the board clockwise in a circle. No arrows need to be changed.
+
+In Case #3, the mischievous user might place Pegman on the up arrow in the middle of the grid, in which case he will start walking and then walk off the top edge of the grid. Changing the direction of this arrow won't help: it would just make him walk off a different edge.
+
+In Case #4, the only possible starting cell is blank, so Pegman will stand still forever and is in no danger.
4 +2 1 +^ +^ +2 2 +>v +^< +3 3 +... +.^. +... +1 1 +. ++
Case #1: 1 +Case #2: 0 +Case #3: IMPOSSIBLE +Case #4: 0 ++
Your publishing house has decided to use monkeys randomly typing at keyboards to write great works of literature. You are the supervisor for one monkey with a keyboard containing K keys, each of which is labeled with an uppercase English letter. (There may be multiple keys displaying the same letter.) The monkey will start with an empty string and repeat the following S times: choose a key from its keyboard uniformly at random and press it, adding a copy of that key's letter to the right end of the string. The final resulting string will have length S.
+
+You have a target word of length L that you are hoping the monkey will type. (The target word will not necessarily be a real English word.) This target word may even appear multiple times in what the monkey types. (Overlapping instances count too -- for example, if "ABA" is the target word and the monkey types "ABABA", that contains two instances of the target.)
+
+You plan to pay the monkey one banana for each instance of the target word that it types. When you go to inspect the monkey's work, you will bring along the minimum number of bananas that you need to ensure that you will always have enough bananas to pay the monkey, no matter what it has typed. Then, you will pay the monkey one banana for each instance of the target word that it actually typed. You will keep the remaining bananas that you brought with you.
+
+What is the expected number of bananas that you will get to keep?
The first line of the input gives the number of test cases, T. T test cases follow. Each consists of three lines. The first contains three space-separated positive integers: K, L, and S. The second contains a string of K uppercase English letters representing the monkey's keyboard. The third contains a string of L uppercase English letters representing the target word.
+ +For each test case, output one line containing "Case #x: y", where y is the expected number of bananas you will get to keep after paying the monkey.
+ +y will be considered correct if it is within an absolute or relative error of 10-6 of the correct answer.
+Note that Case #5 is not within the limits for the Small dataset.
+
+In Case #1, the monkey has no chance of typing the target word "MONKEY" even once (because his keyboard lacks most of the letters in "MONKEY"), so you do not bring any bananas along when you visit, and of course you do not pay any. Poor monkey!
+
+In Case #2, the monkey is guaranteed to type "AAAA", which has two overlapping instances of the target word "AAA". You will bring two bananas and then pay both.
+
+In Case #3, the monkey will produce the following outputs with equal probability (1/4 each): "AA", "AB", "BA", "BB". These have 0, 1, 1, and 2 instances of the target word, respectively. You must bring 2 bananas to be ready for the "BB" case, but you will on average pay (0 + 1 + 1 + 2) / 4 = 1.
+
+In Case #4, the monkey has a 1/3 chance of typing a "G" first and a 1/3 chance of typing an "O" second, for a 1/9 chance of typing "GO". You will bring one banana and give it up 1/9 of the time.
+
+In Case #5, the monkey could in theory type "ROSENCRANTZ" up to nine times, but the chances of this happening even once are so small that they are negligible compared to the acceptable margin of error for answers.
5 +7 6 6 +BANANAS +MONKEY +2 3 4 +AA +AAA +2 1 2 +AB +B +6 2 2 +GOOGLE +GO +26 11 100 +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ROSENCRANTZ ++
Case #1: 0.0 +Case #2: 0.0 +Case #3: 1.0 +Case #4: 0.8888889 +Case #5: 9.0 ++
홍준이는 프로그래밍 대회를 개최했다. 이 대회는 사람들이 팀을 이루어서 참가해야 하며, 팀원의 수는 홍준이가 정해준다. 팀원이 홍준이가 정한 값보다 부족하다면, 그 팀은 대회에 참여할 수 없다. 모든 팀은 같은 수의 팀원으로 이루어져 있다.
+ +대회에 참여 의사를 밝힌 학교는 총 N개이다. 각 학교는 모든 학생이 참여할 수 있는 경우에만 대회에 참가한다. 즉, 남는 사람 없이 모든 학생이 팀에 들어갈 수 있어야 한다.
+ +대회는 예선과 본선으로 구성되어 있다. 모든 팀은 같은 학교 소속으로 이루어져 있어야 한다. 예선에서 각 학교 1등팀만 본선에 진출한다.
+ +홍준이의 대회는 올해가 첫 해이기 때문에, 많은 관심이 필요하다. 따라서, 본선에 참가하는 사람의 수를 최대가 되도록 팀원의 수를 정하려고 한다. 또, 본선이 지루해지는 것을 막기 위해 적어도 두 팀이 본선에 참가할 수 있어야 한다.
+ +홍준이가 팀원을 몇 명으로 정해야 본선에 참가하는 사람의 수가 최대가 되는지 구하는 프로그램을 작성하시오.
+첫째 줄에 홍준이의 대회에 참여 의사를 밝힌 학교의 수 N (2 ≤ N ≤ 200,000)이 주어진다.
+ +둘째 줄에는 각 학교 학생의 수가 주어진다. 학생의 수는 구간 [1, 2,000,000]에 포함된다.
+첫째 줄에 홍준이의 대회 본선에 참가하는 사람의 수의 최댓값을 출력한다.
+첫 번째 예제의 경우 홍준이가 한 팀당 두 명으로 결정하면, 2번과 3번 학교가 참가할 수 있다.
+3 +1 2 4 ++
2 +1 5 ++
5 +4 6 3 8 9 ++
4 ++
2 ++
9 ++
N개의 숫자로 구분된 각각의 마을에 한 명의 학생이 살고 있다.
+ +어느 날 이 N명의 학생이 X (1 ≤ X ≤ N)번 마을에 모여서 파티를 벌이기로 했다. 이 마을 사이에는 총 M개의 단방향 도로들이 있고 i번째 길을 지나는데 Ti(1 ≤ Ti ≤ 100)의 시간을 소비한다.
+ +각각의 학생들은 파티에 참석하기 위해 걸어가서 다시 그들의 마을로 돌아와야 한다. 하지만 이 학생들은 워낙 게을러서 최단 시간에 오고 가기를 원한다.
+ +이 도로들은 단방향이기 때문에 아마 그들이 오고 가는 길이 다를지도 모른다. N명의 학생들 중 오고 가는데 가장 많은 시간을 소비하는 학생은 누구일지 구하여라.
+첫째 줄에 N(1 ≤ N ≤ 1,000), M(1 ≤ M ≤ 10,000), X가 공백으로 구분되어 입력된다. 두 번째 줄부터 M+1번째 줄까지 i번째 도로의 시작점, 끝점, 그리고 이 도로를 지나는데 필요한 소요시간 Ti가 들어온다. 시작점과 끝점이 같은 도로는 없으며, 시작점과 한 도시 A에서 다른 도시 B로 가는 도로의 개수는 최대 1개이다.
+ +모든 학생들은 집에서 X에 갈수 있고, X에서 집으로 돌아올 수 있는 데이터만 입력으로 주어진다.
+첫 번째 줄에 N명의 학생들 중 오고 가는데 가장 오래 걸리는 학생의 소요시간을 출력한다.
+4 8 2 +1 2 4 +1 3 2 +1 4 7 +2 1 1 +2 3 5 +3 1 2 +3 4 4 +4 2 3 ++
10 ++
N개의 정수가 주어지면, 이 정수들의 합 S의 부호를 구하는 프로그램을 작성하시오.
+총 3개의 테스트 셋이 주어진다. 각 테스트 셋의 첫째 줄에는 N(1 ≤ N ≤ 100,000)이 주어지고, 둘째 줄부터 N개의 줄에 걸쳐 각 정수가 주어진다. 주어지는 정수의 절댓값은 9223372036854775807보다 작거나 같다.
+총 3개의 줄에 걸쳐 각 테스트 셋에 대해 N개의 정수들의 합 S의 부호를 출력한다. S=0이면 "0"을, S>0이면 "+"를, S<0이면 "-"를 출력하면 된다.
+3 +0 +0 +0 +10 +1 +2 +4 +8 +16 +32 +64 +128 +256 +-512 +6 +9223372036854775807 +9223372036854775806 +9223372036854775805 +-9223372036854775807 +-9223372036854775806 +-9223372036854775804 ++
0 +- ++ ++
알파벳 소문자로 이루어진 단어를 가지고 아래와 같은 과정을 해 보려고 한다.
+ +먼저 단어에서 임의의 두 부분을 골라서 단어를 쪼갠다. 즉, 주어진 단어를 세 개의 더 작은 단어로 나누는 것이다. 각각은 적어도 길이가 1 이상인 단어여야 한다. 이제 이렇게 나눈 세 개의 작은 단어들을 앞뒤를 뒤집고, 이를 다시 원래의 순서대로 합친다.
+ +예를 들어,
+ +단어가 주어지면, 이렇게 만들 수 있는 단어 중에서 사전순으로 가장 앞서는 단어를 출력하는 프로그램을 작성하시오.
+첫째 줄에 영어 소문자로 된 단어가 주어진다. 길이는 3 이상 50 이하이다.
+첫째 줄에 구하고자 하는 단어를 출력하면 된다.
+mobitel ++
bometil ++
어떤 단어를 뒤에서부터 읽어도 똑같다면 그 단어를 팰린드롬이라고 한다. 'radar', 'sees'는 팰린드롬이다.
+ +수도 팰린드롬으로 취급할 수 있다. 수의 숫자들을 뒤에서부터 읽어도 같다면 그 수는 팰린드롬수다. 121, 12421 등은 팰린드롬수다. 123, 1231은 뒤에서부터 읽으면 다르므로 팰린드롬수가 아니다. 또한 10도 팰린드롬수가 아닌데, 앞에 무의미한 0이 올 수 있다면 010이 되어 팰린드롬수로 취급할 수도 있지만, 특별히 이번 문제에서는 무의미한 0이 앞에 올 수 없다고 하자.
+입력은 여러 개의 테스트 케이스로 이루어져 있으며, 각 줄마다 1 이상 99999 이하의 정수가 주어진다. 입력의 마지막 줄에는 0이 주어지며, 이 줄은 문제에 포함되지 않는다.
+각 줄마다 주어진 수가 팰린드롬수면 'yes', 아니면 'no'를 출력한다.
+121 +1231 +12421 +0 ++
yes +no +yes ++
그래프를 DFS로 탐색한 결과와 BFS로 탐색한 결과를 출력하는 프로그램을 작성하시오. 단, 방문할 수 있는 정점이 여러 개인 경우에는 정점 번호가 작은 것을 먼저 방문하고, 더 이상 방문할 수 있는 점이 없는 경우 종료한다. 정점 번호는 1번부터 N번까지이다.
+첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사이에 여러 개의 간선이 있을 수 있다. 입력으로 주어지는 간선은 양방향이다.
+첫째 줄에 DFS를 수행한 결과를, 그 다음 줄에는 BFS를 수행한 결과를 출력한다. V부터 방문된 점을 순서대로 출력하면 된다.
+4 5 1 +1 2 +1 3 +1 4 +2 4 +3 4 ++
5 5 3 +5 4 +5 2 +1 2 +3 4 +3 1 ++
1000 1 1000 +999 1000 ++
1 2 4 3 +1 2 3 4 ++
3 1 2 5 4 +3 1 4 2 5 ++
1000 999 +1000 999 ++
영문 문장을 입력받아 모음의 개수를 세는 프로그램을 작성하시오. 모음은 'a', 'e', 'i', 'o', 'u'이며 대문자 또는 소문자이다.
+입력은 여러 개의 테스트 케이스로 이루어져 있으며, 각 줄마다 영어 대소문자, ',', '.', '!', '?', 공백으로 이루어진 문장이 주어진다. 각 줄은 최대 255글자로 이루어져 있다.
+ +입력의 끝에는 한 줄에 '#' 한 글자만이 주어진다.
+각 줄마다 모음의 개수를 세서 출력한다.
+How are you today? +Quite well, thank you, how about yourself? +I live at number twenty four. +# ++
7 +14 +9 ++
동호는 새악대로 T 통신사의 새 핸드폰 옴머나를 샀다. 새악대로 T 통신사는 동호에게 다음 두 가지 요금제 중 하나를 선택하라고 했다.
+ +영식 요금제는 30초마다 10원씩 청구된다. 이 말은 만약 29초 또는 그 보다 적은 시간 통화를 했으면 10원이 청구된다. 만약 30초부터 59초 사이로 통화를 했으면 20원이 청구된다.
+ +민식 요금제는 60초마다 15원씩 청구된다. 이 말은 만약 59초 또는 그 보다 적은 시간 통화를 했으면 15원이 청구된다. 만약 60초부터 119초 사이로 통화를 했으면 30원이 청구된다.
+ +동호가 저번 달에 새악대로 T 통신사를 이용할 때 통화 시간 목록이 주어지면 어느 요금제를 사용 하는 것이 저렴한지 출력하는 프로그램을 작성하시오.
+동호가 저번 달에 이용한 통화의 개수 N이 주어진다. N은 20보다 작거나 같은 자연수이다. 둘째 줄에 통화 시간 N개가 주어진다. 통화 시간은 10,000보다 작거나 같은 자연수이다.
+첫째 줄에 싼 요금제의 이름을 출력한다. 그 후에 공백을 사이에 두고 요금이 몇 원 나오는지 출력한다. 만약 두 요금제의 요금이 모두 같으면 영식을 먼저 쓰고 민식을 그 다음에 쓴다.
+ +영식은 Y로, 민식은 M으로 출력한다.
+3 +40 40 40 ++
3 +61 61 61 ++
2 +61 10 ++
2 +60 65 ++
M 45 ++
Y M 90 ++
Y 40 ++
Y M 60 ++
갑부 최백준 조교는 동전을 최소로 바꾸는데 성공했으나 김재홍 조교가 그 돈을 발견해서 최백준 조교에게 그 돈을 나누자고 따진다.
+ +그 사실이 전 우주로 알려지자 우주에 있던 많은 생명체들이 자신들에게 돈을 분배해 달라고 당장 달려오기 시작했다.
+ +프로토스 중앙 우주 정부의 정책인, ‘모든 지적 생명체는 동등하다’라는 규칙에 입각해서 돈을 똑같이 분배하고자 한다.
+ +한 생명체에게 얼마씩 돈을 줄 수 있는가?
+ +또, 생명체들에게 동일하게 분배한 후 남는 돈은 얼마인가?
+첫째 줄에는 최백준 조교가 가진 돈 n과 돈을 받으러 온 생명체의 수 m이 주어진다. (1 ≤ m ≤ n ≤ 101000, m과 n은 10진수 정수)
+첫째 줄에 생명체 하나에게 돌아가는 돈의 양을 출력한다. 그리고 두 번째 줄에는 1원씩 분배할 수 없는 남는 돈을 출력한다.
+1000 100 ++
10 +0 ++
수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오.
+ +예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이고, 길이는 4이다.
+첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다.
+ +둘째 줄에는 수열 A를 이루고 있는 Ai가 주어진다. (-1,000,000,000 ≤ Ai ≤ 1,000,000,000)
+첫째 줄에 수열 A의 가장 긴 증가하는 부분 수열의 길이를 출력한다.
+6 +10 20 10 30 20 50 ++
4 ++
이 문제는 아주 평범한 배낭에 관한 문제이다.
+ +한 달 후면 국가의 부름을 받게 되는 준서는 여행을 가려고 한다. 세상과의 단절을 슬퍼하며 최대한 즐기기 위한 여행이기 때문에, 가지고 다닐 배낭 또한 최대한 가치 있게 싸려고 한다.
+ +준서가 여행에 필요하다고 생각하는 N개의 물건이 있다. 각 물건은 무게 W와 가치 V를 가지는데, 해당 물건을 배낭에 넣어서 가면 준서가 V만큼 즐길 수 있다. 아직 행군을 해본 적이 없는 준서는 최대 K만큼의 무게만을 넣을 수 있는 배낭만 들고 다닐 수 있다. 준서가 최대한 즐거운 여행을 하기 위해 배낭에 넣을 수 있는 물건들의 가치의 최댓값을 알려주자.
+첫 줄에 물품의 수 N(1 ≤ N ≤ 100)과 준서가 버틸 수 있는 무게 K(1 ≤ K ≤ 100,000)가 주어진다. 두 번째 줄부터 N개의 줄에 거쳐 각 물건의 무게 W(1 ≤ W ≤ 100,000)와 해당 물건의 가치 V(0 ≤ V ≤ 1,000)가 주어진다.
+ +입력으로 주어지는 모든 수는 정수이다.
+한 줄에 배낭에 넣을 수 있는 물건들의 가치합의 최댓값을 출력한다.
+4 7 +6 13 +4 8 +3 6 +5 12 ++
14 ++
문자열 s가 있을 때, f(s)는 s를 무한번 붙인 문자열로 정의한다. 예를 들어, s = "abc" 인 경우에 f(s) = "abcabcabcabc..."가 된다.
+ +다른 문자열 s와 t가 있을 때, f(s)와 f(t)가 같은 문자열인 경우가 있다. 예를 들어서, s = "abc", t = "abcabc"인 경우에 f(s)와 f(t)는 같은 문자열을 만든다.
+ +s와 t가 주어졌을 때, f(s)와 f(t)가 같은 문자열을 만드는지 아닌지 구하는 프로그램을 작성하시오.
+첫째 줄에 s, 둘째 줄에 t가 주어진다. 두 문자열 s와 t의 길이는 50보다 작거나 같은 자연수이고, 알파벳 소문자로만 이루어져 있다.
+첫째 줄에 f(s)와 f(t)가 같으면 1을, 다르면 0을 출력한다.
+ab +abab ++
abc +bca ++
1 ++
0 ++
천나라에 살고있는 민호는 애지중지하는 소 한마리가 있다. 소의 행복은 곧 민호의 행복이기 때문에 가지고 있는 전재산을 털어 최고로 맛있는 여물 N개를 구매 했다.
+ +민호는 여물을 관리하기 쉽게 폭은 좁지만 너비가 매우 긴 창고에 차례대로 넣었고, 왼쪽부터 한개씩 1번, 2번, 3번, ... , N번 여물이라 부르기로 했다. 각각의 여물들은 소가 먹었을 때 느끼는 행복이 다를수가 있다. 예를 들어 1번 여물을 먹으면 소가 느끼는 행복은 20이지만 2번 여물을 먹으면 소가 느끼는 행복은 10일수가 있다는 것이다. 이를 편의상 행복도라 부르기로 하자.
+ +그리고 여물들은 날이 지날수로 숙성이 되어 맛이 더 좋아져 행복도가 올라간다. 이는 (행복도 * 여물을 구매한 뒤 지난 날자)로 계산할 수 있다. 여물을 구매한 뒤 지난 날자는 구매한 당일의 날이 1이고 그 다음날이 2라고 계산한다.
+ +이것들을 백만년 숙성시킨 뒤 소에게 주면 소는 극락을 맛보겠지만 그때까지 기다릴 수 없던 민호는 여물을 구매한 날부터 N번째 날까지, 하루에 한 개의 여물을 소에게 주기로 하였다. 하지만 폭이 좁고 너비가 매우 긴 창고에 여물을 저장했기 때문에 중간에 있는 여물을 꺼내는건 불가능 하고 왼쪽과 오른쪽, 양쪽 끝에서 하나만 꺼내 소에게 주는 것이 가능하다. 즉 i ≤ j (1 ≤ i ≤ j ≤ N) 의 여물이 남아 있다면 민호는 i번 여물이나 j번 여물을 선택을 해서 소에게 줘야 한다는 뜻이다. i또는 j외의 여물을 소에게 줄 수 없다.
+ +민호는 소가 최대로 높은 행복을 느꼇으면 좋겠다고 생각 한다. N일에 걸쳐 모든 여물을 소에게 줬을 때 소가 느끼는 행복도의 합이 최대가 되는 경우를 구해주자.
+첫 번째 줄에 여물의 개수 N (1 ≤ N ≤ 2000) 이 주어진다.
+ +두 번째 줄에 여물의 행복도 Hi (1 ≤ Hi ≤ 1000, 1 ≤ i ≤ N) 이 공백을 구분으로 N개 주어진다.
+N일에 걸쳐 모든 여물을 소에게 줬을 때 소가 느낄 수 있는 행복도들의 합중 최대를 출력한다.
+5 +1 3 1 5 2 ++
43 ++
그룹 단어란 단어에 존재하는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우만을 말한다. 예를 들면, ccazzzzbb는 c, a, z, b가 모두 연속해서 나타나고, kin도 k, i, n이 연속해서 나타나기 때문에 그룹 단어이지만, aabbbccb는 b가 떨어져서 나타나기 때문에 그룹 단어가 아니다.
+ +단어 N개를 입력으로 받아 그룹 단어의 개수를 출력하는 프로그램을 작성하시오.
+첫째 줄에 단어의 개수 N이 들어온다. N은 100보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에 단어가 들어온다. 단어는 알파벳 소문자로만 되어있고 중복되지 않으며, 길이는 최대 100이다.
+첫째 줄에 그룹 단어의 개수를 출력한다.
+3 +happy +new +year ++
4 +aba +abab +abcabc +a ++
5 +ab +aa +aca +ba +bb ++
2 +yzyzy +zyzyz ++
1 +z ++
9 +aaa +aaazbz +babb +aazz +azbz +aabbaa +abacc +aba +zzaz ++
3+
1 ++
4 ++
0 ++
1 ++
2 ++
방금 막 프로그래밍을 배우기 시작한 찬우는 acmicpc.net에 있는 회원들이 모두 신같이 보였다. 그래서 찬우는 모든 회원의 닉네임 앞에 ‘갓’을 붙이려고 한다.
+ +찬우가 ‘koosaga’라는 닉네임을 가진 회원을 갓으로 바꿔 부른다면 ‘godsaga’가 된다. 또, 찬우가 ‘acka’라는 닉네임을 가진 회원을 갓으로 바꿔 부른다면 ‘godka’가 될 것이다. 찬우는 닉네임을 갓으로 바꾸는 알고리즘을 생각하다가, 아래와 같이 2단계 방법을 사용하면 될 것으로 생각했다.
+ +찬우는 수작업으로 N명의 닉네임을 모두 음절 단위로 쪼갰다. 찬우를 도와 이 닉네임들에 갓을 붙이는 프로그램을 작성하자.
+첫 번째 줄에는 닉네임의 수 N(1 ≤ N ≤ 100)이 주어진다. 두 번째 줄부터 N개의 줄에는 음절 단위로 쪼갠 닉네임이 주어진다. 각 줄은 알파벳 소문자와 공백만으로 이루어지며, 쪼갠 닉네임의 총 길이(공백 포함)는 100을 넘지 않는다. 쪼갠 닉네임에는 1개 이상의 공백이 존재한다.
+각 줄에 하나씩 갓을 붙인 닉네임을 출력한다.
+5 +baek joon +koo sa ga +ac ka +yu ka ri ko +ke sa ki yo ++
godjoon +godsaga +godka +godkariko +godsakiyo ++
음이 아닌 두 정수 A, X 가 있을 때 AX을 구하는 방법을 생각해보자. 물론 이 수는 매우 클 수 있기에, 1,000,000,007 (= 109 + 7)로 나눈 나머지를 구할 것이다. a mod x를 a를 x로 나눴을 때의 나머지라고 표현하면,
+ +(a × b) mod x = {(a mod x) × (b mod x)} mod x
+ +가 성립하기 때문에, 어떤 두 정수를 1,000,000,007로 나눈 나머지만 알고 있어도 그 두 정수의 곱을 1,000,000,007로 나눈 나머지를 쉽게 계산할 수 있다.
+ +본 문제로 돌아가서, 그렇다면 이제 A를 X 번 곱하면 AX을 쉽게 구할 수 있을 것 같아 보인다. 그러나 안타깝게도 X가 상당히 커서 64비트 정수의 범위에 있다면 A를 하나하나씩 곱하는 방식으로는 상상할 수 없을 정도로 긴 시간이 흘러야 답을 찾을 수 있을 것이다. 그래서 다음과 같이 곱셈의 횟수를 줄이는 방법을 사용한다.
+ +즉, 차례로 A를 곱해 나간다면 시간이 X에 비례하게 걸리겠지만, 위의 방법을 이용하면 시간이 log(X)에 비례하게 걸리게 된다. AX를 구하는 프로그램을 작성하라.
+첫 번째 줄에는 정수 A(1 ≤ A ≤ 1018)이 주어진다.
+ +두 번째 줄에는 정수 X(1 ≤ X ≤ 1018)가 주어진다.
+AX을 출력한다. 이 수는 매우 커질 수 있으므로 1,000,000,007로 나눈 나머지를 출력해야 한다.
+3 +3 ++
100 +100 ++
27 ++
424090053 ++
실제로 존재하는지 아닌지는 차치하고, 당신에게 삼면체 주사위가 있어서 이 주사위를 굴린다고 생각해보자. 주사위를 굴렸을 때 각 면이 나올 확률은 모두 동일하게 1/3 이다. 한 면에는 1, 다른 한 면에는 2, 남은 한 면에는 4가 적혀있다고 하면 주사위를 굴렸을 때 나오게 되는 숫자의 기댓값은 과연 몇일까? 간단하게도 셋의 평균인 7/3이 될 것이다.
+ +이 문제를 조금 확장해서, "N면체 주사위의 각 면에 적힌 수가 주어졌을 때, 주사위를 굴렸을 때 각 면이 나올 확률이 모두 같다면 주사위를 굴렸을 때 나오게 되는 수의 기댓값은 과연 몇일까?"라는 문제가 주어졌다고 하자. 위의 예시에 대한 답을 소수로 출력한다면 2.33333333...일텐데, 무한한 자릿수를 모두 출력할 수는 없으니 적당히 끊어서 출력할 것이고, 이 끊긴 소수를 채점 프로그램이 다시 입력받아서 정답과 비교한다고 하면 결과가 얼마나 부정확할 것인가? 그렇기에 답을 정확히 판별하기 위해 출력하고자 하는 분수를 기약분수로 만들어 분모와 분자를 직접 출력하도록 했던 시기가 있었다.
+ +이제 문제를 조금 더 확장하여, M개의 주사위가 있어서 이 중 i번째 주사위가 Ni면체 주사위이고 모든 면에 적힌 수를 더한 값이 Si일 때, 각 주사위에 대해서 주사위를 던졌을 때 주사위의 각 면이 나올 확률이 동일하다고 가정한 상태에서 모든 주사위를 각각 한 번씩 던졌을 때 나온 수들의 합의 기댓값을 구하는 문제를 만들었다. 확률변수 X의 기댓값을 E(X)로 나타내면, 기댓값의 선형성에 의해서 두 확률변수 X, Y에 대해 E(X + Y) = E(X) + E(Y)가 성립하므로, 이 문제의 답을 아래와 같이 간단하게 나타낼 수 있다.
+ +S1/N1 + S2/N2 + ... + SM/NM
+ +즉, 각 주사위에서 나오게 되는 수의 기댓값을 모두 더하면 답이 되는 것이다. 이 답을 정확하게 출력하기 위해, 모든 분수(여기서는 각 주사위의 기댓값)를 통분한다고 생각해보자. 이 분수의 분모와 분자의 값이 어떤 범위까지 치솟게 될 것인가? 즉, 분모와 분자를 모두 저장하고 있게 되면, 두 분수의 합을 구할 때 분모와 분자를 적정한 범위 내에서 계산해낼 수 없다는 문제에 부딪히게 된다. "그렇다면 분모와 분자를 어떤 모듈러 상에서 가지고 있으면 되지 않을까?"라고 생각할 수 있지만, 그러면 분모와 분자를 약분할 수가 없게 된다. 그렇기에, 분수를 다음과 같이 모듈러 상에서 하나의 정수로 가지고 있는 방법을 채택하게 되었다.
+ +어떤 분수가 기약분수로 나타냈을 때 a/b이면, 이 분수는 a × b-1 mod X (X는 소수)으로 대신 계산하도록 한다. 여기서 b-1은 b의 모듈러 곱셈에 대한 역원이다.
+ +b의 모듈러 곱셈에 대한 역원 b-1은 대체 어떤 수인 것일까? 이 수는 다음과 같은 성질을 만족하는 정수이다.
+ +b-1 × b ≡ 1(mod X)
+ +소수 모듈러에서만 성립하는 페르마의 소정리에 의해 bX - 1 ≡ 1 (mod X)가 성립하기에, bX - 2 ≡ b-1 (mod X) 역시 성립함을 알 수 있다.
+ +이해를 돕기 위해 X를 11로 두고 Q = 7/3 을 계산해보자. 3-1 ≡ 4 (mod 11)이므로, Q ≡ 7 × 4 ≡ 6 (mod 11)이다. 이 Q에 3을 곱한 다음 11로 나눈 나머지를 구해 보면 7이 나오므로, 6이라는 정수가 7/3을 적절히 저장하고 있다는 것을 알 수 있다.
+ +분수(유리수)를 이와 같은 방식으로 나타낸다면, 두 분수의 덧셈, 뺄셈, 곱셈은 mod X에서 두 정수를 가지고 계산하듯이 처리하고, 나눗셈은 나누는 분수의 곱셈에 대한 역원을 구한 후 그 역원을 mod X에서 곱하는 것으로 처리한다면, 분수를 정확히 출력하기 위해 통분을 하거나 기약분수로 만드는 골치아픈 일을 할 필요가 없어진다!
+ +그러나 이 방법에도 문제가 있는 것은 마찬가지이다. 앞의 예에서 7/3을 6으로 저장했지만, 그냥 6/1도 6으로 저장할 것이다. 즉 서로 다른 두 분수도 모듈러 상에서 같은 정수로 저장하여, 정확한 판별을 한다는 우리의 목적에 부합하지 않는 것이다. 또다른 문제로는, 분모가 소인수로 X를 가질 때에는 역원을 계산할 수 없어서 모듈러로 나타낼 수가 없다는 점이 있다. 이러한 문제를 해결하기 위해 모듈러를 1,000,000,007와 같은 큰 소수로 하는데, 이를 통해 서로 다른 두 분수가 같은 정수로 나타나게 되는 확률을 낮추고, 분모가 가질 수 있는 소인수의 범위를 늘리는 효과를 볼 수 있다. 그는 이런 방식이 그래도 가장 정확한 방식이라고 생각하게 되었다.
+ +이제 이 방식으로 M 개의 주사위가 있고, i번째 주사위가 Ni면체 주사위이며, 모든 면에 적힌 숫자를 더한 값이 Si일 때, 각 주사위에 대해서 주사위를 던졌을 때 주사위의 각 면이 나올 확률이 동일하다면, 모든 주사위를 한 번씩 던졌을 때 나온 숫자들의 합의 기댓값을 구하는 문제를 해결해보자.
+ ++
첫 번째 줄에는 주사위의 수를 나타내는 정수 M(1 ≤ M ≤ 104)이 주어진다.
+ +다음 M개의 줄은 각 주사위의 정보를 나타내며, 이 중 i(1 ≤ i ≤ M)번째 줄에는 Ni, Si(1 ≤ Ni, Si ≤ 109)가 공백으로 구분되어 주어진다.
+모든 주사위를 한 번씩 던졌을 때 나온 숫자들의 합의 기댓값을 출력한다. 정확한 판별을 위해, 답을 기약분수로 나타내었을 때 a/b가 된다면, (a × b-1) mod 1,000,000,007을 대신 출력하도록 한다. b-1은 b의 모듈러 곱셈에 대한 역원이다. 이 문제에서는 가능한 모든 입력에 대해 답이 존재한다.
+모듈러가 11에서 1,000,000,007이 되어 답이 달라졌지만, 역시 3을 곱한 다음 1,000,000,007으로 나눈 나머지는 7이 된다.
+1 +3 7 ++
333333338 ++
포커는 자신이 가진 패들로 족보에 맞는 카드를 가진 사람들 끼리 누가 더 높은 족보를 가졌나 대결하는 게임이다.
+ +족보를 약한 순서대로 나열하면 다음과 같다.
+ +여기 52장의 카드가 있다. (트, 끌, 삽, 달 4가지 문양에 각각 A,2,3,4,5,6,7,8,9,10,J,Q,K의 카드가 있음.)
+ +그런데, 이번에는 포커의 룰이 six포커다! 즉 6장을 받았을 때 족보가 만들어지는 확률을 계산해야 한다.
+ +단, 카드의 일부분이 높은 족보를 만든다면, 그보다 낮은 족보의 카드는 무시된다. 요컨데, 12개의 족보가 나올 확률의 합은 1이라는 것이다.
+ +이때, 각각의 족보가 나올 확률을 구하시오.
+없다.
+각각의 족보가 나올 확률을 순서대로 출력하여라. 한줄마다 a/b꼴의 분수로 출력한다.
+포커에서 로얄 스트레이트 플러쉬는 A,J,Q,K,10인 스트레이트 플러쉬이지만, 이 문제에서는 문제에 쓰여 있는 내용을 따른다.
+탑이 나올 확률 +원페어가 나올 확률 +투페어가 나올 확률 +... + ++
Henry and Hetty were recently hired by a networking company from Piatra Neamț. Their first project is to create a new type of router, the revolutionary Connect Ethernet Operating Interface 2016, comprised of:
+ +A node X can send data to a node Y (and hence Y can receive data from X) if:
+ +If a node X can send data to a node Y, and X ≠ Y, then we define a data path from X to Y as a set of direct connections {(A1, A2), (A2, A3), … (AL-1, AL)} for some L ≥ 2, such that A1 = X and AL = Y.
+ +A router works properly if:
+ +Like any other electronic device, a router needs electricity to work. Let's define the power needed to operate a node X as PX = INX × OUTX, where INX is the number of input nodes that can send data to X, and OUTX is the number of output nodes that can receive data from X. Let's define the maximum power used by the router as Pmax = max(P1, P2, … P2×N+K).
+ +The project manager has given Henry and Hetty the technical specifications for building a few test routers, listed in the table below. For each of these specifications, the manager wants a router which:
+ +On the first and only line, three integers: N, the number of input and output nodes; Mlim, the maximum number of direct connections allowed; and Plim, the maximum power the router uses.
+ +N = 223, Mlim = 1 000 000, Plim =1 000 000
+You will output two integer numbers separated by a space: Ntot = 2×N + K, representing the total number of nodes used to build the router; and M, representing the total number of direct connections used. On each of the following M lines you should output a pair of integers X and Y, meaning a direct connection from node X to node Y was built.
+3 100 200 ++
3 100 200 ++
9 8 +1 7 +2 7 +3 8 +7 8 +8 4 +8 9 +9 5 +9 6 ++
6 9 +1 4 +1 5 +1 6 +2 4 +2 5 +2 6 +3 4 +3 5 +3 6 ++
해커 김지민은 잘 알려진 어느 회사를 해킹하려고 한다. 이 회사는 N개의 컴퓨터로 이루어져 있다. 김지민은 귀찮기 때문에, 한 번의 해킹으로 여러 개의 컴퓨터를 해킹 할 수 있는 컴퓨터를 해킹하려고 한다.
+ +이 회사의 컴퓨터는 신뢰하는 관계와, 신뢰하지 않는 관계로 이루어져 있는데, A가 B를 신뢰하는 경우에는 B를 해킹하면, A도 해킹할 수 있다는 소리다.
+ +이 회사의 컴퓨터의 신뢰하는 관계가 주어졌을 때, 한 번에 가장 많은 컴퓨터를 해킹할 수 있는 컴퓨터의 번호를 출력하는 프로그램을 작성하시오.
+첫째 줄에, N과 M이 들어온다. N은 10,000보다 작거나 같은 자연수, M은 100,000보다 작거나 같은 자연수이다. 둘째 줄부터 M개의 줄에 신뢰하는 관계가 A B와 같은 형식으로 들어오며, "A가 B를 신뢰한다"를 의미한다. 컴퓨터는 1번부터 N번까지 번호가 하나씩 매겨져 있다.
+첫째 줄에, 김지민이 한 번에 가장 많은 컴퓨터를 해킹할 수 있는 컴퓨터의 번호를 오름차순으로 출력한다.
+5 4 +3 1 +3 2 +4 3 +5 3 ++
1 2 ++
개구리가 일렬로 놓여 있는 징검다리 사이를 폴짝폴짝 뛰어다니고 있다. 징검다리에는 숫자가 각각 쓰여 있는데, 이 개구리는 매우 특이한 개구리여서 어떤 징검다리에서 점프를 할 때는 그 징검다리에 쓰여 있는 수의 배수만큼 떨어져 있는 곳으로만 갈 수 있다.
+ +이 개구리는 a번째 징검다리에서 b번째 징검다리까지 가려고 한다. 이 개구리가 a번째 징검다리에서 시작하여 최소 몇 번 점프를 하여 b번째 징검다리까지 갈 수 있는지를 알아보는 프로그램을 작성하시오.
+첫째 줄에 징검다리의 개수 N(1≤N≤10,000)이 주어지고, 이어서 각 징검다리에 쓰여 있는 N개의 정수가 주어진다. 그 다음 줄에는 N보다 작거나 같은 자연수 a, b가 주어지는 데, 이는 개구리가 a번 징검다리에서 시작하여 b번 징검다리에 가고 싶다는 뜻이다. 징검다리에 쓰여있는 정수는 10,000보다 작거나 같은 자연수이다.
+첫째 줄에 개구리가 a번 징검다리에서 b번 징검다리로 최소 몇 번 점프하여 갈 수 있는 지를 출력하시오. a에서 b로 갈 수 없는 경우에는 -1을 출력한다.
+1번 징검다리에 1이 쓰여 있으므로, 1의 배수인 4만큼을 한 번에 뛰어 5번 징검다리로 갈 수 있다.
+5 +1 2 2 1 2 +1 5 ++
1 ++
어린 토니킴은 색칠공부를 좋아한다.
+ +토니킴은 먼저 여러 동그라미와 동그라미 두 개를 연결하는 직선들 만으로 그림을 그리고 (모든 동그라미들 사이에 직선이 있을 필요는 없다), 연결된 두 동그라미는 서로 색이 다르게 되도록 색을 칠하고자 한다.
+ +이 그림을 색칠하는데 필요한 최소의 색의 개수를 구하는 문제는 어렵기 때문에 토니킴은 2 가지 색상으로 색칠이 가능한지의 여부만을 알고 싶어한다.
+ +동그라미들의 번호와 동그라미들이 서로 연결된 직선에 대한 정보가 주어졌을 때, 이 동그라미들이 2 가지 색상으로 색칠이 가능한지 알아내자.
+입력의 첫 줄에는 테스트 케이스의 개수 T 가 주어진다.
+ +그 다음 줄부터 각 테스트 케이스에 대해 동그라미의 개수 n(1 ≤ n ≤ 1000)과 직선들의 개수 m(1 ≤ m ≤ 100,000)이 주어지고, 그 다음 줄부터 m 줄에 걸쳐 동그라미들이 연결된 직선에 대한 정보가 주어진다. (x y)로 주어지면 동그라미 x와 동그라미 y가 직선으로 서로 연결되었다는 의미이다. 동그라미들의 번호는 1 부터 n 까지이다.
+각 테스트 케이스에 대해서 possible 이나 impossible 을 출력한다. 2 가지 색상으로 색칠이 가능하면 possible. 불가능하면 impossible 이다.
+3 +4 5 +1 2 +2 3 +3 4 +1 3 +2 4 +6 9 +1 4 +1 5 +1 6 +2 4 +2 5 +2 6 +3 4 +3 5 +3 6 +8 8 +1 2 +2 3 +3 4 +4 5 +5 6 +6 7 +7 8 +8 1 ++
impossible +possible +possible ++
두 정수 A와 B가 주어졌을 때, A와 B를 비교하는 프로그램을 작성하시오.
+첫째 줄에 A와 B가 주어진다. A와 B는 공백 한 칸으로 구분되어져 있다.
+첫째 줄에 다음 세 가지 중 하나를 출력한다.
+ +>'를 출력한다.<'를 출력한다.=='를 출력한다.1 2 ++
10 2 ++
5 5 ++
< ++
> ++
== ++
어떤 나라에 N개의 도시가 있다. 이 도시들은 일직선 도로 위에 있다. 편의상 일직선을 수평 방향으로 두자. 제일 왼쪽의 도시에서 제일 오른쪽의 도시로 자동차를 이용하여 이동하려고 한다. 인접한 두 도시 사이의 도로들은 서로 길이가 다를 수 있다. 도로 길이의 단위는 km를 사용한다.
+ +처음 출발할 때 자동차에는 기름이 없어서 주유소에서 기름을 넣고 출발하여야 한다. 기름통의 크기는 무제한이어서 얼마든지 많은 기름을 넣을 수 있다. 도로를 이용하여 이동할 때 1km마다 1리터의 기름을 사용한다. 각 도시에는 단 하나의 주유소가 있으며, 도시 마다 주유소의 리터당 가격은 다를 수 있다. 가격의 단위는 원을 사용한다.
+ +예를 들어, 이 나라에 다음 그림처럼 4개의 도시가 있다고 하자. 원 안에 있는 숫자는 그 도시에 있는 주유소의 리터당 가격이다. 도로 위에 있는 숫자는 도로의 길이를 표시한 것이다.
+ +제일 왼쪽 도시에서 6리터의 기름을 넣고, 더 이상의 주유 없이 제일 오른쪽 도시까지 이동하면 총 비용은 30원이다. 만약 제일 왼쪽 도시에서 2리터의 기름을 넣고(2×5 = 10원) 다음 번 도시까지 이동한 후 3리터의 기름을 넣고(3×2 = 6원) 다음 도시에서 1리터의 기름을 넣어(1×4 = 4원) 제일 오른쪽 도시로 이동하면, 총 비용은 20원이다. 또 다른 방법으로 제일 왼쪽 도시에서 2리터의 기름을 넣고(2×5 = 10원) 다음 번 도시까지 이동한 후 4리터의 기름을 넣고(4×2 = 8원) 제일 오른쪽 도시까지 이동하면, 총 비용은 18원이다.
+ +각 도시에 있는 주유소의 기름 가격과, 각 도시를 연결하는 도로의 길이를 입력으로 받아 제일 왼쪽 도시에서 제일 오른쪽 도시로 이동하는 최소의 비용을 계산하는 프로그램을 작성하시오.
+표준 입력으로 다음 정보가 주어진다. 첫 번째 줄에는 도시의 개수를 나타내는 정수 N(2 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 인접한 두 도시를 연결하는 도로의 길이가 제일 왼쪽 도로부터 N-1개의 자연수로 주어진다. 다음 줄에는 주유소의 리터당 가격이 제일 왼쪽 도시부터 순서대로 N개의 자연수로 주어진다. 제일 왼쪽 도시부터 제일 오른쪽 도시까지의 거리는 1이상 1,000,000,000 이하의 자연수이다. 리터당 가격은 1 이상 1,000,000,000 이하의 자연수이다.
+표준 출력으로 제일 왼쪽 도시에서 제일 오른쪽 도시로 가는 최소 비용을 출력한다.
+4 +2 3 1 +5 2 4 1 ++
4 +3 3 4 +1 1 1 1 ++
18 ++
10 ++
집과 사무실을 통근하는 n명의 사람들이 있다. 각 사람의 집과 사무실은 수평선 상에 있는 서로 다른 점에 위치하고 있다. 임의의 두 사람 A, B에 대하여, A의 집 혹은 사무실의 위치가 B의 집 혹은 사무실의 위치와 같을 수 있다. 통근을 하는 사람들의 편의를 위하여 일직선 상의 어떤 두 점을 잇는 철로를 건설하여, 기차를 운행하려고 한다. 제한된 예산 때문에, 철로의 길이는 d로 정해져 있다. 집과 사무실의 위치 모두 철로 선분에 포함되는 사람들의 수가 최대가 되도록, 철로 선분을 정하고자 한다.
+ +양의 정수 d와 n 개의 정수쌍, (hi, oi), 1 ≤ i ≤ n,이 주어져 있다. 여기서 hi와 oi는 사람 i의 집과 사무실의 위치이다. 길이 d의 모든 선분 L에 대하여, 집과 사무실의 위치가 모두 L에 포함되는 사람들의 최대 수를 구하는 프로그램을 작성하시오.
+ +그림 1. 8 명의 집과 사무실의 위치
+ +그림 1 에 있는 예를 고려해보자. 여기서 n = 8, (h1, o1) = (5, 40), (h2, o2) = (35, 25), (h3, o3) = (10, 20), (h4, o4) = (10, 25), (h5, o5) = (30, 50), (h6, o6) = (50, 60), (h7, o7) = (30, 25), (h8, o8) = (80, 100)이고, d = 30이다. 이 예에서, 위치 10 과 40 사이의 빨간색 선분 L이, 가장 많은 사람들에 대하여 집과 사무실 위치 모두 포함되는 선분 중 하나이다. 따라서 답은 4 이다.
+입력은 표준입력을 사용한다. 첫 번째 줄에 사람 수를 나타내는 양의 정수 n (1 ≤ n ≤ 100,000)이 주어진다. 다음 n개의 각 줄에 정수 쌍 (hi, oi)가 주어진다. 여기서 hi와 oi는 −100,000,000이상, 100,000,000이하의 서로 다른 정수이다. 마지막 줄에, 철로의 길이를 나타내는 정수 d (1 ≤ d ≤ 200,000,000)가 주어진다.
+출력은 표준출력을 사용한다. 길이 d의 임의의 선분에 대하여, 집과 사무실 위치가 모두 그 선분에 포함되는 사람들의 최대 수를 한 줄에 출력한다.
+8 +5 40 +35 25 +10 20 +10 25 +30 50 +50 60 +30 25 +80 100 +30 ++
4 +20 80 +70 30 +35 65 +40 60 +10 ++
5 +-5 5 +30 40 +-5 5 +50 40 +5 -5 +10 ++
4 ++
0 ++
3 ++
민식이는 수학학원에서 단어 수학 문제를 푸는 숙제를 받았다.
+ +단어 수학 문제는 N개의 단어로 이루어져 있으며, 각 단어는 알파벳 대문자로만 이루어져 있다. 이때, 각 알파벳 대문자를 0부터 9까지의 숫자 중 하나로 바꿔서 N개의 수를 합하는 문제이다. 같은 알파벳은 같은 숫자로 바꿔야 하며, 두 개 이상의 알파벳이 같은 숫자로 바뀌어지면 안 된다.
+ +예를 들어, GCF + ACDEB를 계산한다고 할 때, A = 9, B = 4, C = 8, D = 6, E = 5, F = 3, G = 7로 결정한다면, 두 수의 합은 99437이 되어서 최대가 될 것이다.
+ +N개의 단어가 주어졌을 때, 그 수의 합을 최대로 만드는 프로그램을 작성하시오.
+첫째 줄에 단어의 개수 N(1 ≤ N ≤ 10)이 주어진다. 둘째 줄부터 N개의 줄에 단어가 한 줄에 하나씩 주어진다. 단어는 알파벳 대문자로만 이루어져있다. 모든 단어에 포함되어 있는 알파벳은 최대 10개이고, 수의 최대 길이는 8이다. 서로 다른 문자는 서로 다른 숫자를 나타낸다.
+첫째 줄에 주어진 단어의 합의 최댓값을 출력한다.
+2 +AAA +AAA ++
2 +GCF +ACDEB ++
10 +A +B +C +D +E +F +G +H +I +J ++
2 +AB +BA ++
1998 ++
99437 ++
45 ++
187 ++
N개의 수가 주어졌을 때, XOR한 값이 가장 큰 두 수를 찾는 프로그램을 작성하시오.
+ +즉, A1, A2, ..., AN 중에서 i ≠ j이면서 Ai XOR Aj 가 가장 큰 것을 찾아야 한다.
+첫째 줄에 N (2 ≤ N ≤ 100,000)이 주어진다.
+ +둘째 줄에는 N개의 수가 주어진다. 입력으로 주어지는 수는 1,000,000,000보다 작거나 같은 음이 아닌 정수이다.
+첫째 줄에 XOR한 값이 가장 큰 두 수의 XOR한 결과를 출력한다.
+5 +1 2 3 4 5 ++
5 +0 1 0 1 0 ++
6 +1 2 4 8 16 32 ++
7 ++
1 ++
48 ++
어제, 지민이는 몰래 리조트에 갔다가 입구에 걸려있는 복권 광고를 하나 보았다.
+ +“1부터 N까지의 수 중에 서로 다른 M개의 수를 골라보세요. 저희도 1부터 N까지의 수 중에 서로 다른 M개의 수를 고를건데, 적어도 K개의 수가 같으면 당첨입니다.!”
+ +지민이는 돌아오면서 자신이 복권에 당첨될 확률이 궁금해졌다.
+ +지민이가 복권에 당첨될 확률을 구하는 프로그램을 작성하시오.
+첫째 줄에 세 정수 N, M, K가 주어진다.
+첫째 줄에 지민이가 복권에 당첨될 확률을 출력한다. 절대/상대 오차는 10-9까지 허용한다.
+3 1 1 ++
3 2 1 ++
8 2 1 ++
8 4 2 ++
0.3333333333333333 ++
1.0 ++
0.4642857142857143 ++
0.7571428571428571 ++
케빈 베이컨의 6단계 법칙에 의하면 지구에 있는 모든 사람들은 최대 6단계 이내에서 서로 아는 사람으로 연결될 수 있다. 케빈 베이컨 게임은 임의의 두 사람이 최소 몇 단계 만에 이어질 수 있는지 계산하는 게임이다.
+ +예를 들면, 전혀 상관없을 것 같은 인하대학교의 이강호와 서강대학교의 민세희는 몇 단계만에 이어질 수 있을까?
+ +천민호는 이강호와 같은 학교에 다니는 사이이다. 천민호와 최백준은 Baekjoon Online Judge를 통해 알게 되었다. 최백준과 김선영은 같이 Startlink를 창업했다. 김선영과 김도현은 같은 학교 동아리 소속이다. 김도현과 민세희는 같은 학교에 다니는 사이로 서로 알고 있다. 즉, 이강호-천민호-최백준-김선영-김도현-민세희 와 같이 5단계만 거치면 된다.
+ +케빈 베이컨은 미국 헐리우드 영화배우들 끼리 케빈 베이컨 게임을 했을때 나오는 단계의 총 합이 가장 적은 사람이라고 한다.
+ +오늘은 Baekjoon Online Judge의 유저 중에서 케빈 베이컨의 수가 가장 작은 사람을 찾으려고 한다. 케빈 베이컨 수는 모든 사람과 케빈 베이컨 게임을 했을 때, 나오는 단계의 합이다.
+ +예를 들어, BOJ의 유저가 5명이고, 1과 3, 1과 4, 2와 3, 3과 4, 4와 5가 친구인 경우를 생각해보자.
+ +1은 2까지 3을 통해 2단계 만에, 3까지 1단계, 4까지 1단계, 5까지 4를 통해서 2단계 만에 알 수 있다. 따라서, 케빈 베이컨의 수는 2+1+1+2 = 6이다.
+ +2는 1까지 3을 통해서 2단계 만에, 3까지 1단계 만에, 4까지 3을 통해서 2단계 만에, 5까지 3과 4를 통해서 3단계 만에 알 수 있다. 따라서, 케빈 베이컨의 수는 2+1+2+3 = 8이다.
+ +3은 1까지 1단계, 2까지 1단계, 4까지 1단계, 5까지 4를 통해 2단계 만에 알 수 있다. 따라서, 케빈 베이컨의 수는 1+1+1+2 = 5이다.
+ +4는 1까지 1단계, 2까지 3을 통해 2단계, 3까지 1단계, 5까지 1단계 만에 알 수 있다. 4의 케빈 베이컨의 수는 1+2+1+1 = 5가 된다.
+ +마지막으로 5는 1까지 4를 통해 2단계, 2까지 4와 3을 통해 3단계, 3까지 4를 통해 2단계, 4까지 1단계 만에 알 수 있다. 5의 케빈 베이컨의 수는 2+3+2+1 = 8이다.
+ +5명의 유저 중에서 케빈 베이컨의 수가 가장 작은 사람은 3과 4이다.
+ +BOJ 유저의 수와 친구 관계가 입력으로 주어졌을 때, 케빈 베이컨의 수가 가장 작은 사람을 구하는 프로그램을 작성하시오.
+첫째 줄에 유저의 수 N (2 ≤ N ≤ 100)과 친구 관계의 수 M (1 ≤ M ≤ 5,000)이 주어진다. 둘째 줄부터 M개의 줄에는 친구 관계가 주어진다. 친구 관계는 A와 B로 이루어져 있으며, A와 B가 친구라는 뜻이다. A와 B가 친구이면, B와 A도 친구이며, A와 B가 같은 경우는 없다. 친구 관계는 중복되어 들어올 수도 있으며, 친구가 한 명도 없는 사람은 없다. 또, 모든 사람은 친구 관계로 연결되어져 있다. 사람의 번호는 1부터 N까지이며, 두 사람이 같은 번호를 갖는 경우는 없다.
+첫째 줄에 BOJ의 유저 중에서 케빈 베이컨의 수가 가장 작은 사람을 출력한다. 그런 사람이 여러 명일 경우에는 번호가 가장 작은 사람을 출력한다.
+5 5 +1 3 +1 4 +4 5 +4 3 +3 2 ++
3 ++
N개의 정수 중 서로 다른 위치의 두 수를 뽑는 모든 경우의 두 수의 곱의 합을 구하라.
+ +예를 들어 N = 3이고 주어진 정수가 2, 3, 4일 때, 두 수를 뽑는 모든 경우는 (2, 3), (2, 4), (3, 4)이며 이때 각각의 곱은 6, 8, 12이다. 따라서 총합은 26이다.
+첫 번째 줄에는 입력 받을 정수의 개수 N(2 ≤ N ≤ 100,000)
+ +두 번째 줄에는 N 개의 정수가 주어진다. 이때 입력 받는 정수들의 범위는 0이상 10,000 이하이다.
+모든 경우의 곱의 합을 출력한다.
+3 +2 3 4 ++
4 +1 2 3 4 ++
4 +2 3 2 4 ++
26 ++
35 ++
44 ++
\(M\)개의 자연수 \(N\)과 정수 \(K\)가 주어졌을 때 이항 계수 \(\binom{N}{K}\)를 1,000,000,007로 나눈 나머지를 구하는 프로그램을 작성하시오.
+첫째 줄에 \(M\)이 주어진다. (1 ≤ \(M\) ≤ 100,000)
+ +둘째 줄부터 \(M\)개의 줄에 \(N\)과 \(K\)가 주어진다. (1 ≤ \(N\) ≤ 4,000,000, 0 ≤ \(K\) ≤ \(N\))
+총 \(M\)개의 줄에 \(\binom{N}{K}\)를 1,000,000,007로 나눈 나머지를 출력한다.
+5 +5 2 +5 3 +10 5 +20 10 +10 0 ++
10 +10 +252 +184756 +1 ++
An abbreviation (from Latin brevis, meaning short) is a shortened form of a word or phrase. In this problem you must write an automated tool that replaces a sequence of capitalized words with the corresponding abbreviation that consists of the first upper case letters only, followed by a full definition in parenthesis. See sample input and output.
+ +Let us make some formal definitions. A word in a text is a maximally long sequence of lower and upper case English letters. A capitalized word is a word that consists of an upper case letter followed by one or more lower case letters. For example, “Ab”, “Abc”, “Abcd”, and “Abcde“ are all capitalized words, while “ab”, “A”, “AB“, “ABc“ and “AbC“ are not.
+ +An abbreviatable sequence of words is a sequence of two or more capitalized words that are separated by exactly one space, no line breaks or punctuation are allowed inside it.
+ +An abbreviation of an abbreviatable sequence of words is a sequence of the first (upper case) letters of each word, followed by a single space, an opening parenthesis, the original abbreviatable sequence, and a closing parenthesis.
+The input file consists of up to 1 000 lines of text with up to 120 characters on each line. Each line consists of spaces, upper and lower case letters, commas or dots. There are no leading or trailing spaces on lines and there are no empty lines. There is at least one line in the input file.
+Write to the output file the original text with every abbreviatable sequence of words replaced with the corresponding abbreviation.
+This is ACM North Eastern European Regional Contest, +sponsored by International Business Machines. +The. Best. Contest. Ever. +A Great Opportunity for all contestants. ++
ab Ab A Abc AB Abcd ABc Abcde AbC ++
Oh No Extra Spaces.And,Punctuation Ruin Everything ++
This is ACM NEERC (North Eastern European Regional Contest), +sponsored by IBM (International Business Machines). +The. Best. Contest. Ever. +A GO (Great Opportunity) for all contestants. ++
ab Ab A Abc AB Abcd ABc Abcde AbC ++
Oh No ES (Extra Spaces).And,PRE (Punctuation Ruin Everything) ++
이다솜은 나무꾼이다. 이다솜은 산신령이 준 금도끼와 은도끼를 이용해서 나무를 열심히 했다. 나무가 끝난 후에 나무들을 쳐다보면서 내가 왜 나무를 하면서 살까 생각하다가, 나무가 엄청나게 값어치가 있다는 것을 알고 나무를 팔러 시장에 가기로 했다.
+ +지역 목재상에서 이다솜의 나무를 사려고 했지만, 너무 길이가 제멋대로여서 나무를 사는 것을 거절을 했다. 목재상의 조건은 일단 팔려고 하는 나무의 길이를 전부 같게 만들어 오라는 것이었다. (나무의 길이는 자연수로) 이다솜은 나무를 하나씩 여러 번 팔려고 했지만, 지역 목재상의 주인은 한 사람에게 평생 단 한번의 판매 기회를 제공하다고 했기 때문에, 이다솜은 근처 작업장으로 가서 나무를 자르기로 했다.
+ +작업장에서 나무를 한 번 자를 때는, C원이 든다. 그리고, 지역 목재상에서 나무를 살 때는, 한 단위에 W원씩 준다. (다른 말로 하면, K개의 나무가 있고, 길이가 L이면, 이다솜은 K*L*W원을 벌 수 있다.)
+ +이다솜이 현재 가지고 있는 나무의 길이가 주어졌을 때, 이다솜이 벌 수 있는 가장 큰 돈을 구하는 프로그램을 작성하시오.
+첫째 줄에 이다솜이 가지고 있는 나무의 개수 N과 나무를 자를 때 드는 비용 C와 나무 한 단위의 가격 W이 주어진다. 둘째 줄부터 총 N개의 줄에 이다솜이 가지고 잇는 나무의 길이가 한 줄에 하나씩 주어진다. N은 50보다 작거나 같은 자연수이고, C와 W는 10,000보다 작거나 같은 자연수이다. 그리고 나무의 길이는 모두 10,000보다 작거나 같은 자연수이다.
+첫째 줄에 이다솜이 벌 수 있는 돈의 최댓값을 출력한다.
+3 1 10 +26 +103 +59 ++
3 10 10 +26 +103 +59 ++
3 100 10 +26 +103 +59 ++
1770 ++
1680 ++
1230 ++
영선이는 길이가 a, b, c인 세 막대를 가지고 있고, 각 막대의 길이를 마음대로 줄일 수 있다.
+ +영선이는 세 막대를 이용해서 아래 조건을 만족하는 삼각형을 만들려고 한다.
+ +a, b, c가 주어졌을 때, 만들 수 있는 가장 큰 둘레를 구하는 프로그램을 작성하시오.
+첫째 줄에 a, b, c (1 ≤ a, b, c ≤ 100)가 주어진다.
+첫째 줄에 만들 수 있는 가장 큰 삼각형의 둘레를 출력한다.
+1 2 3 ++
2 2 2 ++
1 100 1 ++
41 64 16 ++
5 ++
6 ++
3 ++
113 ++
DNA란 A, C, G, T로만 이루어진 문자열을 의미한다.
+ +영선이는 인간 유전자를 연구하기 위해 세계에서 가장 권위있는 생물학자 효빈이를 고용했다. 효빈이가 연구하는 DNA는 문자열 S이다. 효빈이는 S에 포함되어 있지 않은 가장 짧은 DNA 문자열을 찾으려고 한다.
+ +예를 들어, S = "AGGTCTA"인 경우 정답은 "AC"나 "CC"가 된다. 하지만, "AG"는 S에 포함되어 있기 때문에 정답이 아니며, "AAA"는 길이가 3이기 때문에 (2인 정답이 존재해서) 정답이 아니다.
+ +S가 주어졌을 때, S에 포함되어 있지 않은 가장 짧은 DNA 문자열을 구하는 프로그램을 작성하시오.
+첫째 줄에 S가 주어진다. S의 길이는 2,000을 넘지 않는 자연수이다.
+S에 포함되어 있지 않은 가장 짧은 DNA 문자열을 아무거나 출력한다.
+AGGTCTA ++
AGACGACGGAGAACGA ++
A ++
AAGATACACCGGCTTCGTG ++
AC ++
T ++
C ++
CAT ++
BOJ에 새로운 비밀번호 규칙이 등장했다. 따라서, 영선이는 BOJ 비밀번호를 바꾸려고 한다.
+ +영선이의 예전 비밀번호가 주어졌을 때, 새로운 비밀번호 규칙을 만족하는 비밀번호로 변경하기 위해서 바꿔야하는 글자의 최소 개수를 구하는 프로그램을 작성하시오.
+첫째 줄에 예전 비밀번호가 주어진다. 비밀번호의 길이는 50을 넘지 않으며, 알파벳 소문자로만 이루어져 있다.
+ +둘째 줄에 K가 주어진다. K는 예전 비밀번호의 길이를 넘지 않는 자연수이다.
+첫째 줄에 새로운 비밀번호 규칙을 만족하기 위해서 바꿔야하는 글자의 최소 개수를 출력한다.
+bojboj +3 ++
loool +3 ++
baekjoon +8 ++
amavckdkz +7 ++
0 ++
1 ++
0 ++
5 ++
배열을 정렬하는 것은 쉽다. 수가 주어지면, 그 수의 각 자리수를 내림차순으로 정렬해보자.
+첫째 줄에 정렬하려고 하는 수 N이 주어진다. N은 1,000,000,000보다 작거나 같은 자연수이다.
+첫째 줄에 자리수를 내림차순으로 정렬한 수를 출력한다.
+2143 ++
999998999 ++
61423 ++
500613009 ++
4321 ++
999999998 ++
64321 ++
965310000 ++
다솜이는 기타를 많이 가지고 있다. 그리고 각각의 기타는 모두 다른 시리얼 번호를 가지고 있다. 다솜이는 기타를 빨리 찾아서 빨리 사람들에게 연주해주기 위해서 기타를 시리얼 번호 순서대로 정렬하고자 한다.
+ +모든 시리얼 번호는 알파벳 대문자 (A-Z)와 숫자 (0-9)로 이루어져 있다.
+ +시리얼번호 A가 시리얼번호 B의 앞에 오는 경우는 다음과 같다.
+ +시리얼이 주어졌을 때, 정렬해서 출력하는 프로그램을 작성하시오.
+첫째 줄에 기타의 개수 N이 주어진다. N은 50보다 작거나 같다. 둘째 줄부터 N개의 줄에 시리얼 번호가 하나씩 주어진다. 시리얼 번호의 길이는 최대 50이고, 알파벳 대문자 또는 숫자로만 이루어져 있다. 시리얼 번호는 중복되지 않는다.
+첫째 줄부터 차례대로 N개의 줄에 한줄에 하나씩 시리얼 번호를 정렬한 결과를 출력한다.
+5 +ABCD +145C +A +A910 +Z321 ++
2 +Z19 +Z20 ++
4 +34H2BJS6N +PIM12MD7RCOLWW09 +PYF1J14TF +FIPJOTEA5 ++
5 +ABCDE +BCDEF +ABCDA +BAAAA +ACAAA ++
A +ABCD +Z321 +145C +A910 ++
Z20 +Z19 ++
FIPJOTEA5 +PYF1J14TF +34H2BJS6N +PIM12MD7RCOLWW09 ++
ABCDA +ABCDE +ACAAA +BAAAA +BCDEF ++
Sherlock and Watson have recently enrolled in a computer programming course. Today, the tutor taught them about the balanced parentheses problem. A string S consisting only of characters ( and/or ) is balanced if:
(S), where S is a balanced string, or:Sherlock coded up the solution very quickly and started bragging about how good he is, so Watson gave him a problem to test his knowledge. He asked Sherlock to generate a string S of L + R characters, in which there are a total of L left parentheses ( and a total of R right parentheses ). Moreover, the string must have as many different balanced non-empty substrings as possible. (Two substrings are considered different as long as they start or end at different indexes of the string, even if their content happens to be the same). Note that S itself does not have to be balanced.
Sherlock is sure that once he knows the maximum possible number of balanced non-empty substrings, he will be able to solve the problem. Can you help him find that maximum number?
+The first line of the input gives the number of test cases, T. T test cases follow. Each test case consists of one line with two integers: L and R.
+For each test case, output one line containing Case #x: y, where x is the test case number (starting from 1) and y is the answer, as described above.
In Case 1, the only possible string is (. There are no balanced non-empty substrings.
In Case 2, the optimal string is (). There is only one balanced non-empty substring: the entire string itself.
In Case 3, both strings ()()( and (()() give the same optimal answer.
For the case ()()(, for example, the three balanced substrings are () from indexes 1 to 2, () from indexes 3 to 4, and ()() from indexes 1 to 4.
3 +1 0 +1 1 +3 2 ++
Case #1: 0 +Case #2: 1 +Case #3: 3 ++
666은 종말을 나타내는 수라고 한다. 따라서, 많은 블록버스터 영화에서는 666이 들어간 제목을 많이 사용한다. 영화감독 숌은 세상의 종말 이라는 시리즈 영화의 감독이다. 조지 루카스는 스타워즈를 만들 때, 스타워즈 1, 스타워즈 2, 스타워즈 3, 스타워즈 4, 스타워즈 5, 스타워즈 6과 같이 이름을 지었고, 피터 잭슨은 반지의 제왕을 만들 때, 반지의 제왕 1, 반지의 제왕 2, 반지의 제왕 3과 같이 영화 제목을 지었다. 하지만 숌은 자신이 조지 루카스와 피터 잭슨을 뛰어넘는다는 것을 보여주기 위해서 영화 제목을 좀 다르게 만들기로 했다.
+ +종말의 수란 어떤 수에 6이 적어도 3개 이상 연속으로 들어가는 수를 말한다. 제일 작은 종말의 수는 666이고, 그 다음으로 큰 수는 1666, 2666, 3666, .... 이다. 따라서, 숌은 첫 번째 영화의 제목은 "세상의 종말 666", 두 번째 영화의 제목은 "세상의 종말 1666"와 같이 이름을 지을 것이다. 일반화해서 생각하면, N번째 영화의 제목은 세상의 종말 (N번째로 작은 종말의 수) 와 같다.
+ +숌이 만든 N번째 영화의 제목에 들어간 수를 출력하는 프로그램을 작성하시오. 숌은 이 시리즈를 항상 차례대로 만들고, 다른 영화는 만들지 않는다.
+첫째 줄에 N이 주어진다. N은 10,000보다 작거나 같은 자연수이다.
+첫째 줄에 N번째 영화의 제목에 들어간 수를 출력한다.
+2 ++
3 ++
6 ++
187 ++
500 ++
1666 ++
2666 ++
5666 ++
66666 ++
166699 ++
총 N개의 문자열로 이루어진 집합 S가 주어진다.
+ +입력으로 주어지는 M개의 문자열 중에서 집합 S에 포함되어 있는 것이 총 몇 개인지 구하는 프로그램을 작성하시오.
+첫째 줄에 문자열의 개수 N과 M (1 ≤ N ≤ 10,000, 1 ≤ M ≤ 10,000)이 주어진다.
+ +다음 N개의 줄에는 집합 S에 포함되어 있는 문자열들이 주어진다.
+ +다음 M개의 줄에는 검사해야 하는 문자열들이 주어진다.
+ +입력으로 주어지는 문자열은 알파벳 소문자로만 이루어져 있으며, 길이는 500을 넘지 않는다. 집합 S에 같은 문자열이 여러 번 주어지는 경우는 없다.
+첫째 줄에 M개의 문자열 중에 총 몇 개가 집합 S에 포함되어 있는지 출력한다.
+5 11 +baekjoononlinejudge +startlink +codeplus +sundaycoding +codingsh +baekjoon +codeplus +codeminus +startlink +starlink +sundaycoding +codingsh +codinghs +sondaycoding +startrink +icerink ++
4 ++
길이가 N인 수열 A1, A2, ..., AN이 주어진다. 이때, 다음 쿼리를 수행하는 프로그램을 작성하시오.
+ +1 i v : Ai를 v로 바꾼다. (1 ≤ i ≤ N, 1 ≤ v ≤ 109)2 i j : Ai, Ai+1, ..., Aj에서 크기가 가장 작은 값의 인덱스를 출력한다. 그러한 값이 여러개인 경우에는 인덱스가 작은 것을 출력한다. (1 ≤ i ≤ j ≤ N, 1 ≤ v ≤ 109)수열의 인덱스는 1부터 시작한다.
+첫째 줄에 수열의 크기 N이 주어진다. (1 ≤ N ≤ 100,000)
+ +둘째 줄에는 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 109)
+ +셋째 줄에는 쿼리의 개수 M이 주어진다. (1 ≤ M ≤ 100,000)
+ +넷째 줄부터 M개의 줄에는 쿼리가 주어진다.
+2번 쿼리에 대해서 정답을 한 줄에 하나씩 순서대로 출력한다.
+5 +5 4 3 2 1 +6 +2 1 3 +2 1 4 +1 5 3 +2 3 5 +1 4 3 +2 3 5 ++
3 +4 +4 +3 ++
After several months of rehearsal, the cows are just about ready to put on their annual dance performance; this year they are performing the famous bovine ballet "Cowpelia".
+ +The only aspect of the show that remains to be determined is the size of the stage. A stage of size K can support K cows dancing simultaneously. The N cows in the herd (1 ≤ N ≤ 10,000) are conveniently numbered 1…N in the order in which they must appear in the dance. Each cow i plans to dance for a specific duration of time d(i). Initially, cows 1…K appear on stage and start dancing. When the first of these cows completes her part, she leaves the stage and cow K+1 immediately starts dancing, and so on, so there are always K cows dancing (until the end of the show, when we start to run out of cows). The show ends when the last cow completes her dancing part, at time T.
+ +Clearly, the larger the value of K, the smaller the value of T. Since the show cannot last too long, you are given as input an upper bound Tmax specifying the largest possible value of T. Subject to this constraint, please determine the smallest possible value of K.
+The first line of input contains N and Tmax, where Tmax is an integer of value at most 1 million.
+ +The next N lines give the durations d(1)…d(N) of the dancing parts for cows 1…N. Each d(i) value is an integer in the range 1…100,000.
+ +It is guaranteed that if K=N, the show will finish in time.
+ ++
Print out the smallest possible value of K such that the dance performance will take no more than Tmax units of time.
+5 8 +4 +7 +8 +6 +4 ++
4 ++
세준이는 N개의 빨대를 가지고 있다. N개의 빨대 중에 3개의 빨대를 선택했을 때, 이 빨대로 삼각형을 만들 수 있다면, 세 변의 길이의 합의 최댓값을 구하고 싶다.
+첫째 줄에 빨대의 개수 N이 주어진다. N은 3보다 크거나 같고, 1,000,000보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에 빨대의 길이가 한 줄에 하나씩 주어진다. 빨대의 길이는 1,000,000보다 작거나 같은 자연수이다.
+첫째 줄에 삼각형 세 변의 길이의 합의 최댓값을 출력한다. 만약 삼각형을 만들 수 없으면 -1을 출력한다.
+3 +1 +2 +3 ++
3 +1 +2 +2 ++
6 +2 +3 +2 +3 +2 +4 ++
5 +4 +5 +6 +7 +20 ++
-1 ++
5 ++
10 ++
18 ++
상담원으로 일하고 있는 백준이는 퇴사를 하려고 한다.
+ +오늘부터 N+1일째 되는 날 퇴사를 하기 위해서, 남은 N일 동안 최대한 많은 상담을 하려고 한다.
+ +백준이는 비서에게 최대한 많은 상담을 잡으라고 부탁을 했고, 비서는 하루에 하나씩 서로 다른 사람의 상담을 잡아놓았다.
+ +각각의 상담은 상담을 완료하는데 걸리는 기간 Ti와 상담을 했을 때 받을 수 있는 금액 Pi로 이루어져 있다.
+ +N = 7인 경우에 다음과 같은 상담 일정표를 보자.
+ +| + | 1일 | +2일 | +3일 | +4일 | +5일 | +6일 | +7일 | +
|---|---|---|---|---|---|---|---|
| Ti | +3 | +5 | +1 | +1 | +2 | +4 | +2 | +
| Pi | +10 | +20 | +10 | +20 | +15 | +40 | +200 | +
1일에 잡혀있는 상담은 총 3일이 걸리며, 상담했을 때 받을 수 있는 금액은 10이다. 5일에 잡혀있는 상담은 총 2일이 걸리며, 받을 수 있는 금액은 15이다.
+ +상담을 하는데 필요한 기간은 1일보다 클 수 있기 때문에, 모든 상담을 할 수는 없다. 예를 들어서 1일에 상담을 하게 되면, 2일, 3일에 있는 상담은 할 수 없게 된다. 2일에 있는 상담을 하게 되면, 3, 4, 5, 6일에 잡혀있는 상담은 할 수 없다.
+ +또한, N+1일째에는 회사에 없기 때문에, 6, 7일에 있는 상담을 할 수 없다.
+ +퇴사 전에 할 수 있는 상담의 최대 이익은 1일, 4일, 5일에 있는 상담을 하는 것이며, 이때의 이익은 10+20+15=45이다.
+ +상담을 적절히 했을 때, 백준이가 얻을 수 있는 최대 수익을 구하는 프로그램을 작성하시오.
+첫째 줄에 N (1 ≤ N ≤ 15)이 주어진다.
+ +둘째 줄부터 N개의 줄에 Ti와 Pi가 공백으로 구분되어서 주어지며, 1일부터 N일까지 순서대로 주어진다. (1 ≤ Ti ≤ 5, 1 ≤ Pi ≤ 1,000)
+첫째 줄에 백준이가 얻을 수 있는 최대 이익을 출력한다.
+7 +3 10 +5 20 +1 10 +1 20 +2 15 +4 40 +2 200 ++
10 +1 1 +1 2 +1 3 +1 4 +1 5 +1 6 +1 7 +1 8 +1 9 +1 10 ++
10 +5 10 +5 9 +5 8 +5 7 +5 6 +5 10 +5 9 +5 8 +5 7 +5 6 ++
10 +5 50 +4 40 +3 30 +2 20 +1 10 +1 10 +2 20 +3 30 +4 40 +5 50 ++
45 ++
55 ++
20 ++
90 ++
Farmer John finds that his cows are each easier to milk when they have another cow nearby for moral support. He therefore wants to take his \(M\) cows (\(M \leq 1,000,000,000\), \(M\) even) and partition them into \(M/2\) pairs. Each pair of cows will then be ushered off to a separate stall in the barn for milking. The milking in each of these \(M/2\) stalls will take place simultaneously.
+ +To make matters a bit complicated, each of Farmer John's cows has a different milk output. If cows of milk outputs \(A\) and \(B\) are paired up, then it takes a total of \(A+B\) units of time to milk them both.
+ +Please help Farmer John determine the minimum possible amount of time the entire milking process will take to complete, assuming he pairs the cows up in the best possible way.
+The first line of input contains \(N\) (\(1 \leq N \leq 100,000\)). Each of the next \(N\) lines contains two integers \(x\) and \(y\), indicating that FJ has \(x\) cows each with milk output \(y\) (\(1 \leq y \leq 1,000,000,000\)). The sum of the \(x\)'s is \(M\), the total number of cows.
+Print out the minimum amount of time it takes FJ's cows to be milked, assuming they are optimally paired up.
+Here, if the cows with outputs 8+2 are paired up, and those with outputs 5+5 are paired up, the both stalls take 10 units of time for milking. Since milking takes place simultaneously, the entire process would therefore complete after 10 units of time. Any other pairing would be sub-optimal, resulting in a stall taking more than 10 units of time to milk.
+3 +1 8 +2 5 +1 2 ++
10 ++
어떤 수가 소수의 N제곱(N ≥ 2) 꼴일 때, 그 수를 거의 소수라고 한다.
+ +두 정수 A와 B가 주어지면, A보다 크거나 같고, B보다 작거나 같은 거의 소수가 몇 개인지 출력한다.
+첫째 줄에 왼쪽 범위 A와 오른쪽 범위 B가 공백 한 칸을 사이에 두고 주어진다.
+첫째 줄에 총 몇 개가 있는지 출력한다.
+1 1000 ++
1 10 ++
5324 894739 ++
25 ++
3 ++
183 ++
ISBN(International Standard Book Number)은 전 세계 모든 도서에 부여된 고유번호로, 국제 표준 도서번호이다. ISBN에는 국가명, 발행자 등의 정보가 담겨 있으며 13자리의 숫자로 표시된다. 그중 마지막 숫자는 체크기호로 ISBN의 정확성 여부를 점검할 수 있는 숫자이다. 이 체크기호는 일련번호의 앞에서부터 각 자리마다 가중치 1, 3, 1, 3…. 를 곱한 것을 모두 더하고, 그 값을 10으로 나눈 나머지가 0이 되도록 만드는 숫자 m을 사용한다. 수학적으로는 다음과 같다.
+ +++ +ISBN이 abcdefghijklm 일 때, a+3b+c+3d+e+3f+g+3h+i+3j+k+3l+m ≡ 0 (mod 10)
+ +즉, 체크기호 m = 10 - (a+3b+c+3d+e+3f+g+3h+i+3j+k+3l) mod 10 이다.
+ +단, 10으로 나눈 나머지 값이 0일 경우 체크기호는 0이다.
+
전북대학교 중앙도서관에서 사서로 일하고 있는 영훈이는 책 정리를 하다가 개구쟁이 광현이에 의해서 ISBN이 훼손된 도서들을 발견했다. 광현이때문에 야근해야 하는 불쌍한 영훈이를 위해서 손상된 자리의 숫자를 찾아내는 프로그램을 작성해주자.
+ISBN 13자리 숫자가 입력된다. 훼손된 숫자는 *로 표시한다. (훼손된 일련번호는 체크기호를 제외한 무작위 한 자리이다.)
+훼손된 숫자 *에 알맞은 숫자를 출력한다.
+9788968322*73 ++
2 ++
정수 X에 사용할 수 있는 연산은 다음과 같이 세 가지 이다.
+ +정수 N이 주어졌을 때, 위와 같은 연산 세 개를 적절히 사용해서 1을 만들려고 한다. 연산을 사용하는 횟수의 최솟값을 출력하시오.
+첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다.
+첫째 줄에 연산을 하는 횟수의 최솟값을 출력한다.
+10의 경우에 10 → 9 → 3 → 1 로 3번 만에 만들 수 있다.
+2 ++
10 ++
1 ++
3 ++
흔한 수학 문제 중 하나는 주어진 점이 어느 사분면에 속하는지 알아내는 것이다. 사분면은 아래 그림처럼 1부터 4까지 번호를 갖는다. "Quadrant n"은 "제n사분면"이라는 뜻이다.
+ +예를 들어, 좌표가 (12, 5)인 점 A는 x좌표와 y좌표가 모두 양수이므로 제1사분면에 속한다. 점 B는 x좌표가 음수이고 y좌표가 양수이므로 제2사분면에 속한다.
+ +점의 좌표를 입력받아 그 점이 어느 사분면에 속하는지 알아내는 프로그램을 작성하시오. 단, x좌표와 y좌표는 모두 양수나 음수라고 가정한다.
+첫 줄에는 정수 x가 주어진다. (−1000 ≤ x ≤ 1000; x ≠ 0) 다음 줄에는 정수 y가 주어진다. (−1000 ≤ y ≤ 1000; y ≠ 0)
+점 (x, y)의 사분면 번호(1, 2, 3, 4 중 하나)를 출력한다.
+12 +5 ++
9 +-13 ++
1 ++
4 ++
도주는 동물을 좋아한다. 그중에서도 여우를 정말 좋아한다! 어느 날, 힐링을 위해 여우 사진을 검색하던 도주는 “여우 사인”이라는 손 모양을 발견했다.
+ +여우 사인은 엄지손가락, 중지, 약지 세 손가락을 서로 끝이 맞닿도록 모으고, 검지와 새끼손가락은 다른 손가락과 닿지 않도록 곧게 펴서 여우의 얼굴과 두 귀를 표현한 손 모양이다.
+ +도주는 자신의 여우 사랑을 널리 알리기 위해 때때로 이 손 모양을 하고 귀여운 척을 하기로 했다. 도주의 손 모양이 주어질 때, 그것을 여우 사인이라고 할 수 있는지 판별해 보자. 편의상 손 모양은 서로 닿아 있는 손가락 쌍의 나열으로 표현하며, 손가락들이 서로 닿아 있는 관계가 올바른 여우 사인의 그것과 같다면 여우 사인으로 인정한다.
+첫 번째 줄에 서로 닿아 있는 손가락 쌍의 개수 N(1 ≤ N ≤ 10)이 주어진다.
+ +두 번째 줄부터 N개의 줄에 걸쳐 서로 닿아 있는 두 손가락을 의미하는 1 이상 5 이하의 숫자 두 개가 공백으로 구분되어 주어진다. 1은 엄지손가락, 2는 검지, 3은 중지, 4는 약지, 5는 새끼손가락을 의미한다.
+ +입력 순서가 다른 것을 포함하여 같은 쌍이 여러 번 주어지거나 한 손가락만으로 이루어진 쌍이 주어지는 경우는 없다.
+첫 번째 줄에 도주의 손 모양을 여우 사인이라고 할 수 있으면 Wa-pa-pa-pa-pa-pa-pow!를, 그렇지 않으면 Woof-meow-tweet-squeek을 출력한다.
첫 번째 예시는 엄지손가락과 중지, 약지와 중지, 엄지손가락과 약지가 서로 닿아 있고 검지와 새끼손가락은 다른 손가락과 닿아 있지 않으므로 여우 사인이라고 할 수 있다.
+ +두 번째 예시는 검지만 펴고 다른 손가락은 접은 손 모양이다.
+3 +1 3 +4 3 +1 4 ++
5 +1 3 +3 4 +4 1 +1 5 +5 4 ++
Wa-pa-pa-pa-pa-pa-pow! ++
Woof-meow-tweet-squeek ++
개미는(뚠뚠) 오늘도(뚠뚠) 열심히(뚠뚠) 일을 하네.
+ +개미는 아무말도 하지 않지만 땀을 뻘뻘 흘리면서 매일 매일을 살길 위해서 열심히 일을 하네.
+ +한 치 앞도(뚠뚠) 모르는(뚠뚠) 험한 이 세상(뚠뚠) 그렇지만(뚠뚠) 오늘도 행복한 개미들!
+ +우리의 천재 공학자 윤수는 이 개미들이 왜 행복한지 궁금해졌다.
+ +행복의 비결이 개미가 사는 개미굴에 있다고 생각한 윤수는 개미굴의 구조를 알아보기 위해 로봇 개미를 만들었다.
+ +로봇 개미는 센서가 있어 개미굴의 각 층에 먹이가 있는 방을 따라 내려가다 더 이상 내려갈 수 없으면 그 자리에서 움직이지 않고 신호를 보낸다.
+ +이 신호로 로봇 개미는 개미굴 각 층을 따라 내려오면서 알게 된 각 방에 저장된 먹이 정보를 윤수한테 알려줄 수 있다.
+ +로봇 개미 개발을 완료한 윤수는 개미굴 탐사를 앞두고 로봇 개미를 테스트 해보기 위해 위 그림의 개미굴에 로봇 개미를 투입했다. 로봇 개미의 수는 각 개미굴의 저장소를 모두 확인할 수 있을 만큼 넣는다.
+ +다음은 로봇 개미들이 윤수에게 보내준 정보다.
+ +공백을 기준으로 왼쪽부터 순서대로 로봇 개미가 각 층마다 지나온 방에 있는 먹이 이름을 뜻한다.
+ +윤수는 로봇 개미들이 보내준 정보를 바탕으로 다음과 같이 개미굴의 구조를 손으로 그려봤다.
+ ++APPLE +--APPLE +--BANANA +----KIWI +KIWI +--APPLE +--BANANA ++ +
개미굴의 각 층은 "--" 로 구분을 하였다. 또 같은 층에 여러 개의 방이 있을 때에는 사전 순서가 앞서는 먹이 정보가 먼저 나온다.
+ +우리의 천재 공학자 윤수는 복잡한 개미굴들을 일일이 손으로 그리기 힘들어 우리에게 그려달라고 부탁했다.
+ +한치 앞도 모르는 험한 이세상 그렇지만 오늘도 행복한 개미들!
+ +행복의 비결을 알기 위해 윤수를 도와 개미굴이 어떤 구조인지 확인해보자.
+첫 번째 줄은 로봇 개미가 각 층을 따라 내려오면서 알게 된 먹이의 정보 개수 N (1 ≤ N ≤ 1000)개가 주어진다.
+ +두 번째 줄부터 N+1 번째 줄까지, 각 줄의 시작은 로봇 개미 한마리가 보내준 먹이 정보 개수 K (1 ≤ K ≤ 15)가 주어진다.
+ +다음 K개의 입력은 로봇 개미가 왼쪽부터 순서대로 각 층마다 지나온 방에 있는 먹이 정보이며 먹이 이름 길이 t는 1 ≤ t ≤ 15를 만족한다. 먹이 정보는 알파벳 대문자로만 이루어져 있다.
+개미굴의 시각화된 구조를 출력하여라.
+ +개미굴의 각 층을 "--" 로 구분하며, 같은 층에 여러개의 방이 있을 때에는 사전 순서가 앞서는 먹이 정보가 먼저 나온다.
+ +최상위 굴을 포함하여 하나의 굴에서 개미굴이 여러개로 나뉠 때 먹이 종류별로 최대 한 번만 나올 수 있다.
+3 +2 B A +4 A B C D +2 A C ++
4 +2 KIWI BANANA +2 KIWI APPLE +2 APPLE APPLE +3 APPLE BANANA KIWI ++
A +--B +----C +------D +--C +B +--A ++
APPLE +--APPLE +--BANANA +----KIWI +KIWI +--APPLE +--BANANA ++
조(Joe)는 중앙대학교 교수이고, 논리회로 설계 과목을 담당하고 있다. 그는 수업을 하면서 7명의 학생을 제외한 나머지 학생들에게 좋은 학점을 주겠다고 약속을 하였다.
+ +Joe 교수님을 돕기 위해서 학생들의 최종 성적이 주어질 때, 그의 연구실인 You See Lab으로 데려갈 성적이 좋지 못한 7명의 학생, 칠무해의 성적을 뽑아보자.
+첫째 줄에 학생의 수 N(8 ≤ N ≤ 10,000,000)이 주어진다.
+ +둘째 줄부터 N개의 줄에는 학생들의 성적이 무작위로 주어진다. 성적은 최소 0점부터 최대 100점까지 0.001 점 단위로 부여된다.
+하위 7명의 성적을 점수가 낮은 순으로 각 줄마다 출력한다. 하위 7명의 성적의 커트 라인에 동점자가 있을 경우에도 7명만 출력을 하면 된다.
+8 +20.000 +70.000 +50.000 +30.000 +70.000 +30.000 +60.000 +70.000 ++
20.000 +30.000 +30.000 +50.000 +60.000 +70.000 +70.000 ++
다솜이는 은진이의 옆집에 새로 이사왔다. 다솜이는 자기 방 번호를 예쁜 플라스틱 숫자로 문에 붙이려고 한다.
+ +다솜이의 옆집에서는 플라스틱 숫자를 한 세트로 판다. 한 세트에는 0번부터 9번까지 숫자가 하나씩 들어있다. 다솜이의 방 번호가 주어졌을 때, 필요한 세트의 개수의 최솟값을 출력하시오. (6은 9를 뒤집어서 이용할 수 있고, 9는 6을 뒤집어서 이용할 수 있다.)
+첫째 줄에 다솜이의 방 번호 N이 주어진다. N은 1,000,000보다 작거나 같은 자연수이다.
+첫째 줄에 필요한 세트의 개수를 출력한다.
+9999 ++
122 ++
12635 ++
888888 ++
2 ++
2 ++
1 ++
6 ++
네 점이 주어졌을 때, 네 점을 이용해 정사각형을 만들 수 있는지 없는지를 구하는 프로그램을 작성하시오.
+첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 네 줄로 이루어져 있으며, 점의 좌표가 한 줄에 하나씩 주어진다. 점의 좌표는 -100,000보다 크거나 같고, 100,000보다 작거나 같은 정수이다. 같은 점이 두 번 이상 주어지지 않는다.
+각 테스트 케이스마다 입력으로 주어진 네 점을 이용해서 정사각형을 만들 수 있으면 1을, 없으면 0을 출력한다.
+2 +1 1 +1 2 +2 1 +2 2 +2 2 +3 3 +4 4 +5 5 ++
1 +0 ++
*이 문제는 실제 인물과는 관련이 없습니다.*
+ +옛날 먼 옛날, 사냐라는 사람이 살았습니다. 사냐라는 사람은 뢰벗이라는 친구가 있었는데, 둘은 매우 닮았지만, 뢰벗이 좀 더 똑똑하고, 사냐가 좀 더 잘생겼다고 합니다. 뢰벗은 오보워치(Ovorwatch) 라는 게임에서 500점으로 상위 100.00%였습니다. 사냐는 이러한 뢰벗을 놀리기를 좋아했습니다. 이에 열을 받은 뢰벗은, 사냐에게 자신이 오보워치 500점을 탈출한다면, 자신이 내는 문제를 평생 풀도록 하겠다는 내기를 했고, 사냐는 뢰벗이 설마 탈출하겠냐는 생각으로 수락했습니다.
+ +그런데 그 일이 벌어졌습니다.
+ +뢰벗은 오보워치 점수를 무려 600점대 까지 올렸고, 사냐는 내기 때문에 뢰벗이 내는 문제를 평생 풀어야 하게 되었습니다. 뢰벗은 사냐에게 자신이 주는 자연수를 연속하지 않은 피보나치 수들의 합으로 나타내게 시켰습니다. (피보나치 수열이란 F(1) = 1, F(2) = 2, F(n+2) = F(n+1) + F(n)으로 정의되는 수열입니다.) 멍청한 사냐는 피보나치 수열을 손으로 계산하는데, 시간이 너무 오래걸려 미칠것만 같아졌습니다. 이에 똑똑한 뢰벗은 그것도 계산 못하냐며 놀렸고, 사냐는 시무룩해졌습니다. 시무룩해진 사냐의 노동을 도와줄 프로그램을 짜봅시다.
+자연수 N을 입력받는다. (N < 1018)
+자연수 N이 연속되지 않은 i1 < i2 < ... < ik에 대하여 F(i1) + F(i2) + ... + F(ik)로 나타내어 진다면, 첫째 줄에 k를 출력하고, 둘째 줄에 F(i1), F(i2), ... , F(ik)를 사이에 공백을 두고 출력하여라. 아니라면, 첫째 줄에 -1을 출력하여라. 만일 여러 가지 방법으로 연속하지 않은 피보나치 수들의 합으로 나타낼 수 있다면, 그 가운데 항의 수가 가장 많은 것을 출력하여라.
+10 ++
2 +2 8 ++
N개의 수로 이루어진 수열 A1, A2, ..., AN이 주어진다. 또, 수와 수 사이에 끼워넣을 수 있는 N-1개의 연산자가 주어진다. 연산자는 덧셈(+), 뺄셈(-), 곱셈(×), 나눗셈(÷)으로만 이루어져 있다.
+ +우리는 수와 수 사이에 연산자를 하나씩 넣어서, 수식을 하나 만들 수 있다. 이때, 주어진 수의 순서를 바꾸면 안 된다.
+ +예를 들어, 6개의 수로 이루어진 수열이 1, 2, 3, 4, 5, 6이고, 주어진 연산자가 덧셈(+) 2개, 뺄셈(-) 1개, 곱셈(×) 1개, 나눗셈(÷) 1개인 경우에는 총 60가지의 식을 만들 수 있다. 예를 들어, 아래와 같은 식을 만들 수 있다.
+ +식의 계산은 연산자 우선 순위를 무시하고 앞에서부터 진행해야 한다. 또, 나눗셈은 정수 나눗셈으로 몫만 취한다. 음수를 양수로 나눌 때는 C++14의 기준을 따른다. 즉, 양수로 바꾼 뒤 몫을 취하고, 그 몫을 음수로 바꾼 것과 같다. 이에 따라서, 위의 식 4개의 결과를 계산해보면 아래와 같다.
+ +N개의 수와 N-1개의 연산자가 주어졌을 때, 만들 수 있는 식의 결과가 최대인 것과 최소인 것을 구하는 프로그램을 작성하시오.
+첫째 줄에 수의 개수 N(2 ≤ N ≤ 11)가 주어진다. 둘째 줄에는 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 100) 셋째 줄에는 합이 N-1인 4개의 정수가 주어지는데, 차례대로 덧셈(+)의 개수, 뺄셈(-)의 개수, 곱셈(×)의 개수, 나눗셈(÷)의 개수이다.
+첫째 줄에 만들 수 있는 식의 결과의 최댓값을, 둘째 줄에는 최솟값을 출력한다. 연산자를 어떻게 끼워넣어도 항상 -10억보다 크거나 같고, 10억보다 작거나 같은 결과가 나오는 입력만 주어진다. 또한, 앞에서부터 계산했을 때, 중간에 계산되는 식의 결과도 항상 -10억보다 크거나 같고, 10억보다 작거나 같다.
+세 번째 예제의 경우에 다음과 같은 식이 최댓값/최솟값이 나온다.
+ +2 +5 6 +0 0 1 0 ++
3 +3 4 5 +1 0 1 0 ++
6 +1 2 3 4 5 6 +2 1 1 1 ++
30 +30 ++
35 +17 ++
54 +-24 ++
오늘은 스타트링크에 다니는 사람들이 모여서 축구를 해보려고 한다. 축구는 평일 오후에 하고 의무 참석도 아니다. 축구를 하기 위해 모인 사람은 총 N명이고 신기하게도 N은 짝수이다. 이제 N/2명으로 이루어진 스타트 팀과 링크 팀으로 사람들을 나눠야 한다.
+ +BOJ를 운영하는 회사 답게 사람에게 번호를 1부터 N까지로 배정했고, 아래와 같은 능력치를 조사했다. 능력치 Sij는 i번 사람과 j번 사람이 같은 팀에 속했을 때, 팀에 더해지는 능력치이다. 팀의 능력치는 팀에 속한 모든 쌍의 능력치 Sij의 합이다. Sij는 Sji와 다를 수도 있으며, i번 사람과 j번 사람이 같은 팀에 속했을 때, 팀에 더해지는 능력치는 Sij와 Sji이다.
+ +N=4이고, S가 아래와 같은 경우를 살펴보자.
+ +| i\j | +1 | +2 | +3 | +4 | +
|---|---|---|---|---|
| 1 | ++ | 1 | +2 | +3 | +
| 2 | +4 | ++ | 5 | +6 | +
| 3 | +7 | +1 | ++ | 2 | +
| 4 | +3 | +4 | +5 | ++ |
예를 들어, 1, 2번이 스타트 팀, 3, 4번이 링크 팀에 속한 경우에 두 팀의 능력치는 아래와 같다.
+ +1, 3번이 스타트 팀, 2, 4번이 링크 팀에 속하면, 두 팀의 능력치는 아래와 같다.
+ +축구를 재미있게 하기 위해서 스타트 팀의 능력치와 링크 팀의 능력치의 차이를 최소로 하려고 한다. 위의 예제와 같은 경우에는 1, 4번이 스타트 팀, 2, 3번 팀이 링크 팀에 속하면 스타트 팀의 능력치는 6, 링크 팀의 능력치는 6이 되어서 차이가 0이 되고 이 값이 최소이다.
+첫째 줄에 N(4 ≤ N ≤ 20, N은 짝수)이 주어진다. 둘째 줄부터 N개의 줄에 S가 주어진다. 각 줄은 N개의 수로 이루어져 있고, i번 줄의 j번째 수는 Sij 이다. Sii는 항상 0이고, 나머지 Sij는 1보다 크거나 같고, 100보다 작거나 같은 정수이다.
+첫째 줄에 스타트 팀과 링크 팀의 능력치의 차이의 최솟값을 출력한다.
+예제 2의 경우에 (1, 3, 6), (2, 4, 5)로 팀을 나누면 되고, 예제 3의 경우에는 (1, 2, 4, 5), (3, 6, 7, 8)로 팀을 나누면 된다.
+4 +0 1 2 3 +4 0 5 6 +7 1 0 2 +3 4 5 0 ++
6 +0 1 2 3 4 5 +1 0 2 3 4 5 +1 2 0 3 4 5 +1 2 3 0 4 5 +1 2 3 4 0 5 +1 2 3 4 5 0 ++
8 +0 5 4 5 4 5 4 5 +4 0 5 1 2 3 4 5 +9 8 0 1 2 3 1 2 +9 9 9 0 9 9 9 9 +1 1 1 1 0 1 1 1 +8 7 6 5 4 0 3 2 +9 1 9 1 9 1 0 9 +6 5 4 3 2 1 9 0 ++
0 ++
2 ++
1 ++
지도가 주어지면 모든 지점에 대해서 목표지점까지의 거리를 구하여라.
+ +문제를 쉽게 만들기 위해 오직 가로와 세로로만 움직일 수 있다고 하자.
+지도의 크기 n과 m이 주어진다. n은 세로의 크기, m은 가로의 크기다.(2 ≤ n ≤ 1000, 2 ≤ m ≤ 1000)
+ +다음 n개의 줄에 m개의 숫자가 주어진다. 0은 갈 수 없는 땅이고 1은 갈 수 있는 땅, 2는 목표지점이다. 입력에서 2는 단 한개이다.
+각 지점에서 목표지점까지의 거리를 출력한다. 원래 갈 수 없는 땅인 위치는 0을 출력하고, 원래 갈 수 있는 땅인 부분 중에서 도달할 수 없는 위치는 -1을 출력한다.
+15 15 +2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 0 0 0 0 1 +1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 0 1 0 0 0 +1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 ++
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 +1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 +2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 +3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 +4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 +5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 +6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 +7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 +8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 +9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 +10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 +11 12 13 14 15 16 17 18 19 20 0 0 0 0 25 +12 13 14 15 16 17 18 19 20 21 0 29 28 27 26 +13 14 15 16 17 18 19 20 21 22 0 30 0 0 0 +14 15 16 17 18 19 20 21 22 23 0 31 32 33 34 ++
방향성이 없는 그래프가 주어진다. 세준이는 1번 정점에서 N번 정점으로 최단 거리로 이동하려고 한다. 또한 세준이는 두 가지 조건을 만족하면서 이동하는 특정한 최단 경로를 구하고 싶은데, 그것은 바로 임의로 주어진 두 정점은 반드시 통과해야 한다는 것이다.
+ +세준이는 한번 이동했던 정점은 물론, 한번 이동했던 간선도 다시 이동할 수 있다. 하지만 반드시 최단 경로로 이동해야 한다는 사실에 주의하라. 1번 정점에서 N번 정점으로 이동할 때, 주어진 두 정점을 반드시 거치면서 최단 경로로 이동하는 프로그램을 작성하시오.
+첫째 줄에 정점의 개수 N과 간선의 개수 E가 주어진다. (2 ≤ N ≤ 800, 0 ≤ E ≤ 200,000) 둘째 줄부터 E개의 줄에 걸쳐서 세 개의 정수 a, b, c가 주어지는데, a번 정점에서 b번 정점까지 양방향 길이 존재하며, 그 거리가 c라는 뜻이다. (1 ≤ c ≤ 1,000) 다음 줄에는 반드시 거쳐야 하는 두 개의 서로 다른 정점 번호 v1과 v2가 주어진다. (v1 ≠ v2, v1 ≠ N, v2 ≠ 1) 임의의 두 정점 u와 v사이에는 간선이 최대 1개 존재한다.
+첫째 줄에 두 개의 정점을 지나는 최단 경로의 길이를 출력한다. 그러한 경로가 없을 때에는 -1을 출력한다.
+4 6 +1 2 3 +2 3 3 +3 4 1 +1 3 5 +2 4 5 +1 4 4 +2 3 ++
7 ++
세준이는 어떤 문자열을 팰린드롬으로 분할하려고 한다. 예를 들어, ABACABA를 팰린드롬으로 분할하면, {A, B, A, C, A, B, A}, {A, BACAB, A}, {ABA, C, ABA}, {ABACABA}등이 있다.
+ +분할의 개수의 최솟값을 출력하는 프로그램을 작성하시오.
+첫째 줄에 문자열이 주어진다. 이 문자열은 알파벳 대문자로만 이루어져 있고, 최대 길이는 2,500이다.
+첫째 줄에 팰린드롬 분할의 개수의 최솟값을 출력한다.
+BBCDDECAECBDABADDCEBACCCBDCAABDBADD ++
AAAA ++
ABCDEFGH ++
QWERTYTREWQWERT ++
22 ++
1 ++
8 ++
5 ++
여행을 떠난 세준이는 지도를 하나 구하였다. 이 지도는 아래 그림과 같이 직사각형 모양이며 여러 칸으로 나뉘어져 있다. 한 칸은 한 지점을 나타내는데 각 칸에는 그 지점의 높이가 쓰여 있으며, 각 지점 사이의 이동은 지도에서 상하좌우 이웃한 곳끼리만 가능하다.
+ +현재 제일 왼쪽 위 칸이 나타내는 지점에 있는 세준이는 제일 오른쪽 아래 칸이 나타내는 지점으로 가려고 한다. 그런데 가능한 힘을 적게 들이고 싶어 항상 높이가 더 낮은 지점으로만 이동하여 목표 지점까지 가고자 한다. 위와 같은 지도에서는 다음과 같은 세 가지 경로가 가능하다.
+ +
지도가 주어질 때 이와 같이 제일 왼쪽 위 지점에서 출발하여 제일 오른쪽 아래 지점까지 항상 내리막길로만 이동하는 경로의 개수를 구하는 프로그램을 작성하시오.
+첫째 줄에는 지도의 세로의 크기 M과 가로의 크기 N이 빈칸을 사이에 두고 주어진다. 이어 다음 M개 줄에 걸쳐 한 줄에 N개씩 위에서부터 차례로 각 지점의 높이가 빈 칸을 사이에 두고 주어진다. M과 N은 각각 500이하의 자연수이고, 각 지점의 높이는 10000이하의 자연수이다.
+첫째 줄에 이동 가능한 경로의 수 H를 출력한다. 모든 입력에 대하여 H는 10억 이하의 음이 아닌 정수이다.
+4 5 +50 45 37 32 30 +35 50 40 20 25 +30 30 25 17 28 +27 24 22 15 10 ++
3 ++
There are three mobile operators in Iran. Each operator has different prices for call and data usage, given in the table below. All prices are in Rials:
+ +| # | +Name | +Call (per minute) | +Data (per megabyte) | +
|---|---|---|---|
| 1 | +ParsTel | +30 | +40 | +
| 2 | +ParsCell | +35 | +30 | +
| 3 | +ParsPhone | +40 | +20 | +
Some foreign students have arrived Iran to participate in the ACM-ICPC, Tehran Site. They already know how many minutes they will call, and how much Internet they will use. For each student, you want to recommend an operator to minimize the total cost of call usage and data usage for that student.
+Each line of the input contains the information of one student. For each student, there are two positive integers c and d (1 ≤ c, d ≤ 1000) that show the amount of call (in minutes) and data usage (in megabytes) for the student, respectively. The input terminates with “0 0” that should not be processed.
+For each student, print a line containing the minimum total cost of call usage and data usage.
+10 60 +100 20 +24 12 +900 400 +50 50 +0 0 ++
1600 +3800 +1200 +43000 +3000 ++
Instead of a seated meal, some restaurants offer all-you-can-eat buffet lunches and dinners. This is usually a bargain for famished students. Alice likes such buffet meals, but is always worried about how best to fill her plate with food. She values the n different items on the menu differently, and her goal is to have as much value as she can on her plate, constrained by the limited area of the plate and the limited availability of some menu items. Luckily, items on the menu are easily dividable and Alice can take an arbitrary fraction of each dish. Can you help her fill her plate?
+The input is formed of n + 2 lines:
+ +Limits
+ +A single line consisting of an integer: the maximal value that Alice can fit on her plate.
+5 +1000 +50 230 +80 12 +10 1000000 +25 450 +2 50 ++
26790 ++
세준이는 양수와 +, -, 그리고 괄호를 가지고 식을 만들었다. 그리고 나서 세준이는 괄호를 모두 지웠다.
+ +그리고 나서 세준이는 괄호를 적절히 쳐서 이 식의 값을 최소로 만들려고 한다.
+ +괄호를 적절히 쳐서 이 식의 값을 최소로 만드는 프로그램을 작성하시오.
+첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다 많이 연속되는 숫자는 없다. 수는 0으로 시작할 수 있다. 입력으로 주어지는 식의 길이는 50보다 작거나 같다.
+첫째 줄에 정답을 출력한다.
+55-50+40 ++
10+20+30+40 ++
00009-00009 ++
-35 ++
100 ++
0 ++
세준이는 컵 3개를 탁자 위에 일렬로 엎어놓았다. 컵의 번호는 맨 왼쪽 컵부터 순서대로 1번, 2번 3번이고, 세준이는 이 컵을 이용해서 게임을 하려고 한다.
+ +먼저 1번 컵의 아래에 공을 하나 넣는다. 세준이는 두 컵을 고른 다음, 그 위치를 맞바꾸려고 한다. 예를 들어, 고른 컵이 1번과 2번이라면, 1번 컵이 있던 위치에 2번 컵을 이동시키고, 동시에 2번 컵이 있던 위치에 1번 컵을 이동시켜야 한다. 이때 공은 움직이지 않기 때문에, 공의 위치는 맨 처음 1번 컵이 있던 위치와 같다.
+ +세준이는 컵의 위치를 총 M번 바꿀 것이며, 컵의 위치를 바꾼 방법이 입력으로 주어진다. 위치를 M번 바꾼 이후에 공이 들어있는 컵의 번호를 구하는 프로그램을 작성하시오.
+첫째 줄에 컵의 위치를 바꾼 횟수 M이 주어지며, M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 M개의 줄에는 컵의 위치를 바꾼 방법 X와 Y가 주어지며, X번 컵과 Y번 컵의 위치를 서로 바꾸는 것을 의미한다. X와 Y의 값은 3보다 작거나 같고, X와 Y가 같을 수도 있다.
+ +컵을 이동시킨 후에 공이 컵 바깥에 있는 경우는 없다.
+첫째 줄에 공이 들어있는 컵의 번호를 출력한다. 공이 사라져서 컵 밑에 없는 경우에는 -1을 출력한다.
+4 +3 1 +2 3 +3 1 +3 2 ++
2 +1 2 +3 1 ++
5 +2 3 +1 3 +2 3 +2 1 +3 1 ++
9 +1 2 +3 2 +1 2 +2 1 +2 1 +3 2 +1 3 +3 1 +1 2 ++
3 ++
2 ++
3 ++
1 ++
본격적으로 for문 문제를 풀기 전에 주의해야 할 점이 있다. 입출력 방식이 느리면 여러 줄을 입력받거나 출력할 때 시간초과가 날 수 있다는 점이다.
+ +C++을 사용하고 있고 cin/cout을 사용하고자 한다면, cin.tie(NULL)과 sync_with_stdio(false)를 둘 다 적용해 주고, endl 대신 개행문자(\n)를 쓰자. 단, 이렇게 하면 더 이상 scanf/printf/puts/getchar/putchar 등 C의 입출력 방식을 사용하면 안 된다.
Java를 사용하고 있다면, Scanner와 System.out.println 대신 BufferedReader와 BufferedWriter를 사용할 수 있다. BufferedWriter.flush는 맨 마지막에 한 번만 하면 된다.
Python을 사용하고 있다면, input 대신 sys.stdin.readline을 사용할 수 있다. 단, 이때는 맨 끝의 개행문자까지 같이 입력받기 때문에 문자열을 저장하고 싶을 경우 .rstrip()을 추가로 해 주는 것이 좋다.
또한 입력과 출력 스트림은 별개이므로, 테스트케이스를 전부 입력받아서 저장한 뒤 전부 출력할 필요는 없다. 테스트케이스를 하나 받은 뒤 하나 출력해도 된다.
+ +자세한 설명 및 다른 언어의 경우는 이 글에 설명되어 있다.
+ +이 블로그 글에서 BOJ의 기타 여러 가지 팁을 볼 수 있다.
+첫 줄에 테스트케이스의 개수 T가 주어진다. T는 최대 1,000,000이다. 다음 T줄에는 각각 두 정수 A와 B가 주어진다. A와 B는 1 이상, 1,000 이하이다.
+각 테스트케이스마다 A+B를 한 줄에 하나씩 순서대로 출력한다.
+5 +1 1 +12 34 +5 500 +40 60 +1000 1000 ++
2 +46 +505 +100 +2000 ++
꿀귀 라이언 인형과, 마찬가지로 꿀귀인 어피치 인형이 N개 일렬로 놓여 있다. 라이언 인형은 1, 어피치 인형은 2로 표현하자. 라이언 인형이 K개 이상 있는 가장 작은 연속된 인형들의 집합의 크기를 구하여라.
+첫 줄에 N과 K가 주어진다. (1 ≤ K ≤ N ≤ 106)
+ +둘째 줄에 N개의 인형의 정보가 주어진다. (1 또는 2)
+K개 이상의 라이언 인형을 포함하는 가장 작은 연속된 인형들의 집합의 크기를 출력한다. 그런 집합이 없다면 -1을 출력한다.
+10 3 +1 2 2 2 1 2 1 2 2 1 ++
6 ++
정수 n개가 주어졌을 때, n개의 합을 구하는 함수를 작성하시오.
+ +작성해야 하는 함수는 다음과 같다.
+ +long long sum(int *a, int n);
+
+ a: 합을 구해야 하는 정수 n개가 저장되어 있는 배열 (0 ≤ a[i] ≤ 1,000,000, 1 ≤ n ≤ 3,000,000)n: 합을 구해야 하는 정수의 개수n개의 합long long sum(std::vector<int> &a);
+ a: 합을 구해야 하는 정수 n개가 저장되어 있는 배열 (0 ≤ a[i] ≤ 1,000,000, 1 ≤ n ≤ 3,000,000)a에 포함되어 있는 정수 n개의 합def solve(a: list) -> int
+ a: 합을 구해야 하는 정수 n개가 저장되어 있는 리스트 (0 ≤ a[i] ≤ 1,000,000, 1 ≤ n ≤ 3,000,000)a에 포함되어 있는 정수 n개의 합 (정수)long sum(int[] a); (클래스 이름: Test)
+ a: 합을 구해야 하는 정수 n개가 저장되어 있는 배열 (0 ≤ a[i] ≤ 1,000,000, 1 ≤ n ≤ 3,000,000)a에 포함되어 있는 정수 n개의 합sum(a []int) int
+ a: 합을 구해야 하는 정수 n개가 저장되어 있는 배열 (0 ≤ a[i] ≤ 1,000,000, 1 ≤ n ≤ 3,000,000)a에 포함되어 있는 정수 n개의 합45656이란 수를 보자.
+ +이 수는 인접한 모든 자리의 차이가 1이다. 이런 수를 계단 수라고 한다.
+ +N이 주어질 때, 길이가 N이면서 0부터 9까지 숫자가 모두 등장하는 계단 수가 총 몇 개 있는지 구하는 프로그램을 작성하시오. 0으로 시작하는 수는 계단수가 아니다.
+첫째 줄에 N이 주어진다. N은 1보다 크거나 같고, 100보다 작거나 같은 자연수이다.
+첫째 줄에 정답을 1,000,000,000으로 나눈 나머지를 출력한다.
+참고로, N=1일때부터, N=40일 때 까지 답을 모두 더하면 126461847755이 나온다.
+10 ++
1 ++
N줄에 0 이상 9 이하의 숫자가 세 개씩 적혀 있다. 내려가기 게임을 하고 있는데, 이 게임은 첫 줄에서 시작해서 마지막 줄에서 끝나게 되는 놀이이다.
+ +먼저 처음에 적혀 있는 세 개의 숫자 중에서 하나를 골라서 시작하게 된다. 그리고 다음 줄로 내려가는데, 다음 줄로 내려갈 때에는 다음과 같은 제약 조건이 있다. 바로 아래의 수로 넘어가거나, 아니면 바로 아래의 수와 붙어 있는 수로만 이동할 수 있다는 것이다. 이 제약 조건을 그림으로 나타내어 보면 다음과 같다.
+ +별표는 현재 위치이고, 그 아랫 줄의 파란 동그라미는 원룡이가 다음 줄로 내려갈 수 있는 위치이며, 빨간 가위표는 원룡이가 내려갈 수 없는 위치가 된다. 숫자표가 주어져 있을 때, 얻을 수 있는 최대 점수, 최소 점수를 구하는 프로그램을 작성하시오. 점수는 원룡이가 위치한 곳의 수의 합이다.
+첫째 줄에 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 숫자가 세 개씩 주어진다. 숫자는 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 중의 하나가 된다.
+첫째 줄에 얻을 수 있는 최대 점수와 최소 점수를 띄어서 출력한다.
+3 +1 2 3 +4 5 6 +4 9 0 ++
18 6 ++
자연수 N과 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오.
+ +첫째 줄에 자연수 N과 M이 주어진다. (1 ≤ M ≤ N ≤ 8)
+한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다.
+ +수열은 사전 순으로 증가하는 순서로 출력해야 한다.
+3 1 ++
4 2 ++
4 4 ++
1 +2 +3 ++
1 2 +1 3 +1 4 +2 1 +2 3 +2 4 +3 1 +3 2 +3 4 +4 1 +4 2 +4 3 ++
1 2 3 4 +1 2 4 3 +1 3 2 4 +1 3 4 2 +1 4 2 3 +1 4 3 2 +2 1 3 4 +2 1 4 3 +2 3 1 4 +2 3 4 1 +2 4 1 3 +2 4 3 1 +3 1 2 4 +3 1 4 2 +3 2 1 4 +3 2 4 1 +3 4 1 2 +3 4 2 1 +4 1 2 3 +4 1 3 2 +4 2 1 3 +4 2 3 1 +4 3 1 2 +4 3 2 1 ++
자연수 N과 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오.
+ +첫째 줄에 자연수 N과 M이 주어진다. (1 ≤ M ≤ N ≤ 8)
+한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다.
+ +수열은 사전 순으로 증가하는 순서로 출력해야 한다.
+3 1 ++
4 2 ++
4 4 ++
1 +2 +3 ++
1 2 +1 3 +1 4 +2 3 +2 4 +3 4 ++
1 2 3 4 ++
자연수 N과 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오.
+ +첫째 줄에 자연수 N과 M이 주어진다. (1 ≤ M ≤ N ≤ 7)
+한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다.
+ +수열은 사전 순으로 증가하는 순서로 출력해야 한다.
+3 1 ++
4 2 ++
3 3 ++
1 +2 +3 ++
1 1 +1 2 +1 3 +1 4 +2 1 +2 2 +2 3 +2 4 +3 1 +3 2 +3 3 +3 4 +4 1 +4 2 +4 3 +4 4 ++
1 1 1 +1 1 2 +1 1 3 +1 2 1 +1 2 2 +1 2 3 +1 3 1 +1 3 2 +1 3 3 +2 1 1 +2 1 2 +2 1 3 +2 2 1 +2 2 2 +2 2 3 +2 3 1 +2 3 2 +2 3 3 +3 1 1 +3 1 2 +3 1 3 +3 2 1 +3 2 2 +3 2 3 +3 3 1 +3 3 2 +3 3 3 ++
자연수 N과 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오.
+ +첫째 줄에 자연수 N과 M이 주어진다. (1 ≤ M ≤ N ≤ 8)
+한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다.
+ +수열은 사전 순으로 증가하는 순서로 출력해야 한다.
+3 1 ++
4 2 ++
3 3 ++
1 +2 +3 ++
1 1 +1 2 +1 3 +1 4 +2 2 +2 3 +2 4 +3 3 +3 4 +4 4 ++
1 1 1 +1 1 2 +1 1 3 +1 2 2 +1 2 3 +1 3 3 +2 2 2 +2 2 3 +2 3 3 +3 3 3 ++
N개의 자연수와 자연수 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오. N개의 자연수는 모두 다른 수이다.
+ +첫째 줄에 N과 M이 주어진다. (1 ≤ M ≤ N ≤ 8)
+ +둘째 줄에 N개의 수가 주어진다. 입력으로 주어지는 수는 10,000보다 작거나 같은 자연수이다.
+한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다.
+ +수열은 사전 순으로 증가하는 순서로 출력해야 한다.
+3 1 +4 5 2 ++
4 2 +9 8 7 1 ++
4 4 +1231 1232 1233 1234 ++
2 +4 +5 ++
1 7 +1 8 +1 9 +7 1 +7 8 +7 9 +8 1 +8 7 +8 9 +9 1 +9 7 +9 8 ++
1231 1232 1233 1234 +1231 1232 1234 1233 +1231 1233 1232 1234 +1231 1233 1234 1232 +1231 1234 1232 1233 +1231 1234 1233 1232 +1232 1231 1233 1234 +1232 1231 1234 1233 +1232 1233 1231 1234 +1232 1233 1234 1231 +1232 1234 1231 1233 +1232 1234 1233 1231 +1233 1231 1232 1234 +1233 1231 1234 1232 +1233 1232 1231 1234 +1233 1232 1234 1231 +1233 1234 1231 1232 +1233 1234 1232 1231 +1234 1231 1232 1233 +1234 1231 1233 1232 +1234 1232 1231 1233 +1234 1232 1233 1231 +1234 1233 1231 1232 +1234 1233 1232 1231 ++
N개의 자연수와 자연수 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오. N개의 자연수는 모두 다른 수이다.
+ +첫째 줄에 N과 M이 주어진다. (1 ≤ M ≤ N ≤ 8)
+ +둘째 줄에 N개의 수가 주어진다. 입력으로 주어지는 수는 10,000보다 작거나 같은 자연수이다.
+한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다.
+ +수열은 사전 순으로 증가하는 순서로 출력해야 한다.
+3 1 +4 5 2 ++
4 2 +9 8 7 1 ++
4 4 +1231 1232 1233 1234 ++
2 +4 +5 ++
1 7 +1 8 +1 9 +7 8 +7 9 +8 9 ++
1231 1232 1233 1234 ++
N개의 자연수와 자연수 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오. N개의 자연수는 모두 다른 수이다.
+ +첫째 줄에 N과 M이 주어진다. (1 ≤ M ≤ N ≤ 7)
+ +둘째 줄에 N개의 수가 주어진다. 입력으로 주어지는 수는 10,000보다 작거나 같은 자연수이다.
+한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다.
+ +수열은 사전 순으로 증가하는 순서로 출력해야 한다.
+3 1 +4 5 2 ++
4 2 +9 8 7 1 ++
3 3 +1231 1232 1233 ++
2 +4 +5 ++
1 1 +1 7 +1 8 +1 9 +7 1 +7 7 +7 8 +7 9 +8 1 +8 7 +8 8 +8 9 +9 1 +9 7 +9 8 +9 9 ++
1231 1231 1231 +1231 1231 1232 +1231 1231 1233 +1231 1232 1231 +1231 1232 1232 +1231 1232 1233 +1231 1233 1231 +1231 1233 1232 +1231 1233 1233 +1232 1231 1231 +1232 1231 1232 +1232 1231 1233 +1232 1232 1231 +1232 1232 1232 +1232 1232 1233 +1232 1233 1231 +1232 1233 1232 +1232 1233 1233 +1233 1231 1231 +1233 1231 1232 +1233 1231 1233 +1233 1232 1231 +1233 1232 1232 +1233 1232 1233 +1233 1233 1231 +1233 1233 1232 +1233 1233 1233 ++
N개의 자연수와 자연수 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오. N개의 자연수는 모두 다른 수이다.
+ +첫째 줄에 N과 M이 주어진다. (1 ≤ M ≤ N ≤ 8)
+ +둘째 줄에 N개의 수가 주어진다. 입력으로 주어지는 수는 10,000보다 작거나 같은 자연수이다.
+한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다.
+ +수열은 사전 순으로 증가하는 순서로 출력해야 한다.
+3 1 +4 5 2 ++
4 2 +9 8 7 1 ++
4 4 +1231 1232 1233 1234 ++
2 +4 +5 ++
1 1 +1 7 +1 8 +1 9 +7 7 +7 8 +7 9 +8 8 +8 9 +9 9 ++
1231 1231 1231 1231 +1231 1231 1231 1232 +1231 1231 1231 1233 +1231 1231 1231 1234 +1231 1231 1232 1232 +1231 1231 1232 1233 +1231 1231 1232 1234 +1231 1231 1233 1233 +1231 1231 1233 1234 +1231 1231 1234 1234 +1231 1232 1232 1232 +1231 1232 1232 1233 +1231 1232 1232 1234 +1231 1232 1233 1233 +1231 1232 1233 1234 +1231 1232 1234 1234 +1231 1233 1233 1233 +1231 1233 1233 1234 +1231 1233 1234 1234 +1231 1234 1234 1234 +1232 1232 1232 1232 +1232 1232 1232 1233 +1232 1232 1232 1234 +1232 1232 1233 1233 +1232 1232 1233 1234 +1232 1232 1234 1234 +1232 1233 1233 1233 +1232 1233 1233 1234 +1232 1233 1234 1234 +1232 1234 1234 1234 +1233 1233 1233 1233 +1233 1233 1233 1234 +1233 1233 1234 1234 +1233 1234 1234 1234 +1234 1234 1234 1234 ++
다항식(polynomial)은 문자의 거듭제곱의 상수 배들의 합을 표현하는 수식이다. 예를 들어 x2 - 2x + 3 같은 식을 의미한다. 그 중 변수가 하나인 것을 일변수 다항식이라고 하고 보통 다음과 같이 표현한다.
+ +f(x) = anxn + an-1xn-1 + ... + a2x2 + a1x + a0
+ +최대 일차 일변수 다항식이 주어졌을 때 그 함수를 미분한 결과를 출력하는 프로그램을 작성하시오.
+첫째 줄에 최대 일차 일변수 다항식이 주어진다. 항의 개수는 최대 2개이고, 변수는 항상 x로 주어지며, 각 항은 공백 문자로 구분되지 않는다. 주어지는 계수와 상수의 절댓값은 10,000을 넘지 않는 정수이다. 단, 계수의 절댓값이 1인 경우에는 계수를 생략한다. 차수가 같은 항은 한 번만 주어진다.
+ +다항식은 차수가 큰 것부터 작아지는 순서대로 주어진다.
+주어진 일변수 다항식을 미분한 결과를 출력한다.
+문제에서 다루는 함수인 멱함수의 미분법은 (xn)' = nxn-1 를 사용한다.
+ +또한 미분 가능 함수에 대하여 합의 법칙, (f(x) + g(x))' = f'(x) + g'(x) 가 성립한다.
+6x-6 ++
6 ++
빈 공간, 벽, 그리고 두 명의 플레이어 A와 B의 시작지점이 주어졌을 때, A와 B가 서로의 위치를 바꾸는데 드는 턴의 최솟값을 구하는 프로그램을 작성하시오.
+ +한 턴에 하나 또는 두 명의 플레이어는 움직일 수 있다. 한 번 움직인다는 것은 현재 위치에서 위, 왼쪽, 오른쪽, 아래, 4가지 대각선 중 하나로 이동하는 것이다. 하지만, 벽으로 이동하거나, 게임 판을 벗어나게 이동할 수는 없다. 그리고 각 턴의 마지막에 두 플레이어는 같은 곳에 있으면 안 된다. 한 턴에 두 플레이어가 서로 교차하는 경로를 가지는 것은 안 된다. 경로를 서로 교차하는 것이라는 것은 한 턴에 서로의 위치를 바꾸는 것을 의미한다.
+ +예를 들어, A가 게임 판의 가장 왼쪽 위에 있고, B가 바로 오른쪽에 있다고 해보자. 만약, B가 왼쪽으로 움직인다면, A는 오른쪽으로 움직일 수 없다. 이때가 경로가 교차하는 것이다. 하지만, B가 왼쪽을 제외한 다른 방향으로 이동한다면, A는 오른쪽으로 이동할 수 있다.
+ +A가 (0, 0)에 있고, B가 (0, 1)에 있을 때, A가 오른쪽 아래방향 대각선으로 움직이고, B가 왼쪽 아래방향 대각선으로 움직일 때, (0.5, 0.5)에서 만나기는 하지만, 이것은 경로가 교차하는 것이 아니다.
+첫째 줄에 게임 판의 세로 크기 N과 가로 크기 M이 주어진다. N과 M은 20보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에 게임 판의 상태가 주어진다. 빈 공간은 ., 벽은 X, A의 위치는 A, B의 위치는 B와 같이 표시된다.
+첫째 줄에 A와 B가 서로의 위치를 바꾸는데 드는 최소 턴을 출력한다. 만약 바꿀 수 없으면 -1을 출력한다.
+3 9 +XXXXXXXXX +A.......B +XXXX.XXXX ++
4 4 +.... +.A.. +..B. +.... ++
3 9 +XXXXXXXXX +A...X...B +XXXXXXXXX ++
3 9 +XXXXXXXXX +A.......B +XXXXXXXXX ++
5 15 +...A.XXXXX..... +.....XXXXX..... +............... +.....XXXXX.B... +.....XXXXX..... ++
20 20 +AB.................X +XXXXXXXXXXXXXXXXXXX. +X..................X +.XXXXXXXXXXXXXXXXXXX +X..................X +XXXXXXXXXXXXXXXXXXX. +X..................X +.XXXXXXXXXXXXXXXXXXX +X..................X +XXXXXXXXXXXXXXXXXXX. +X..................X +.XXXXXXXXXXXXXXXXXXX +X..................X +XXXXXXXXXXXXXXXXXXX. +X..................X +.XXXXXXXXXXXXXXXXXXX +X..................X +XXXXXXXXXXXXXXXXXXX. +...................X +.XXXXXXXXXXXXXXXXXXX ++
8 ++
2 ++
-1 ++
-1 ++
13 ++
379 ++
APC에 온 것을 환영한다. 만약 여러분이 학교에서 자료구조를 수강했다면 해시 함수에 대해 배웠을 것이다. 해시 함수란 임의의 길이의 입력을 받아서 고정된 길이의 출력을 내보내는 함수로 정의한다. 해시 함수는 무궁무진한 응용 분야를 갖는데, 대표적으로 자료의 저장과 탐색에 쓰인다.
+ +이 문제에서는 여러분이 앞으로 유용하게 쓸 수 있는 해시 함수를 하나 가르쳐주고자 한다. 먼저, 편의상 입력으로 들어오는 문자열에는 영문 소문자(a, b, ..., z)로만 구성되어있다고 가정하자. 영어에는 총 26개의 알파벳이 존재하므로 a에는 1, b에는 2, c에는 3, ..., z에는 26으로 고유한 번호를 부여할 수 있다. 결과적으로 우리는 하나의 문자열을 수열로 변환할 수 있다. 예를 들어서 문자열 "abba"은 수열 1, 2, 2, 1로 나타낼 수 있다.
+ +해시 값을 계산하기 위해서 우리는 문자열 혹은 수열을 하나의 정수로 치환하려고 한다. 간단하게는 수열의 값을 모두 더할 수도 있다. 해시 함수의 정의에서 유한한 범위의 출력을 가져야 한다고 했으니까 적당히 큰 수 M으로 나눠주자. 짜잔! 해시 함수가 완성되었다. 이를 수식으로 표현하면 아래와 같다.
+ +\[H = \sum_{i=0}^{l-1}{a_i} \mod M\]
+ +해시 함수의 입력으로 들어올 수 있는 문자열의 종류는 무한하지만 출력 범위는 정해져있다. 다들 비둘기 집의 원리에 대해서는 한 번쯤 들어봤을 것이다. 그 원리에 의하면 서로 다른 문자열이더라도 동일한 해시 값을 가질 수 있다. 이를 해시 충돌이라고 하는데, 좋은 해시 함수는 최대한 충돌이 적게 일어나야 한다. 위에서 정의한 해시 함수는 알파벳의 순서만 바꿔도 충돌이 일어나기 때문에 나쁜 해시 함수이다. 그러니까 조금 더 개선해보자.
+ +어떻게 하면 순서가 달라졌을때 출력값도 달라지게 할 수 있을까? 머리를 굴리면 수열의 각 항마다 고유한 계수를 부여하면 된다는 아이디어를 생각해볼 수 있다. 가장 대표적인 방법은 항의 번호에 해당하는 만큼 특정한 숫자를 거듭제곱해서 곱해준 다음 더하는 것이 있다. 이를 수식으로 표현하면 아래와 같다.
+ +\[H = \sum_{i=0}^{l-1}{a_ir^i} \mod M\]
+ +보통 r과 M은 서로소인 숫자로 정하는 것이 일반적이다. 우리가 직접 정하라고 하면 힘들테니까 r의 값은 26보다 큰 소수인 31로 하고 M의 값은 1234567891(놀랍게도 소수이다!!)로 하자.
+ +이제 여러분이 할 일은 위 식을 통해 주어진 문자열의 해시 값을 계산하는 것이다. 그리고 이 함수는 간단해 보여도 자주 쓰이니까 기억해뒀다가 잘 써먹도록 하자.
+첫 줄에는 문자열의 길이 L이 들어온다. 둘째 줄에는 영문 소문자로만 이루어진 문자열이 들어온다.
+ +입력으로 주어지는 문자열은 모두 알파벳 소문자로만 구성되어 있다.
+문제에서 주어진 해시함수와 입력으로 주어진 문자열을 사용해 계산한 해시 값을 정수로 출력한다.
+예제 1: abcde의 해시 값은 1 × 310 + 2 × 311 + 3 × 312 + 4 × 313 + 5 × 314 = 1 + 62 + 2883 + 119164 + 4617605 = 4739715이다.
+ +예제 2: zzz의 해시 값은 26 × 310 + 26 × 311 + 26 × 312 = 26 + 806 + 24986 = 25818이다.
+5 +abcde ++
3 +zzz ++
1 +i ++
4739715 ++
25818 ++
9 ++
CodingSchool is conducting an explorace to welcome new students. It is compulsory for each team to visit all check points (not necessarily following the sequence). At each check point, the team will have to complete a specific activity. Each team can plan a strategy on the sequence of check points to visit. The distance of each path is no more than 500 meters.
+ +Because they don’t want the new student to wander away and get lost, CodingSchool wants to put their committee on the paths and only allow the student to use path that have a committee. But CodingSchool only have a limited number of committee, so they don’t want to use all path. Shorter path is preferred because it use less committee. While at the same time, they must make sure that there exists a way to travel between every two checkpoints. Help CodingSchool by determining the minimum total distance of path that they must cover.
+First line of input is integer T (1 ≤ T ≤ 10) that represents the number of test cases. Each test case starts with a line with two integers N (1 ≤ N ≤ 20) and M (1 ≤ M ≤ N*(N-1)), that represents the number of check points and the number of paths to consider respectively. In the following M lines, there are 3 integers a, b (1 ≤ a, b ≤ N) and d (1 ≤ d ≤ 500) that represent the start check points (a), the end check points (b) and the distance of the path (d) that connects check points a and b.
+For each test case, output the minimum distance as shown in the sample output.
+3 +5 7 +1 2 75 +2 3 32 +3 4 62 +1 4 50 +3 5 100 +4 5 45 +1 5 78 +6 8 +1 2 70 +1 4 82 +2 3 57 +2 5 105 +3 4 160 +3 6 55 +4 5 97 +4 6 75 +4 5 +1 2 10 +1 3 30 +1 4 40 +2 3 20 +3 4 50 ++
Case #1: 189 meters +Case #2: 354 meters +Case #3: 70 meters ++
“호 안에 수류탄!!”
+ +대한건아 욱제는 수류탄 투척 훈련을 받고 있다. 욱제를 필두로, 훈련장에는 욱제를 포함한 N명의 전우들이 일렬(1열 횡대 ㅎ)로 서있다. 군대에 끌려온 사실에 심술이 난 욱제는 수류탄의 안전핀을 뽑아 전우에게 던졌다. 마찬가지로 심술이 난 전우들도 욱제가 던진 수류탄을 받아 전우들에게 던지기 시작했다.
+ +이제 수류탄은 뜨거운 감자처럼 욱제와 전우들 사이를 옮겨 다닌다. 전우들은 팔 힘이 모두 다르기 때문에 수류탄을 던질 수 있는 사거리도 모두 다르다. 욱제와 전우들이 가지고 노는 훈련용 수류탄은 바닥에 떨어지기 전에는 절대 터지지 않는 특수한 수류탄이다.
+ +욱제와 전우들은 특급 전사이기 때문에 사거리 내에 있는 누구에게나 정확히 수류탄을 던질 수 있고, 마찬가지로 정확히 날아오는 수류탄은 항상 받을 수 있다. 한 위치에 여러명의 전우가 서있다면 그 중 아무나 받아 다음 전우에게 던질 수 있다.
+ +누군가의 팔 힘이 모자라 수류탄이 다음 전우에게 전달되지 못하고 바닥에 떨어지는 경우도 있을 수 있다. 이때는 수류탄에서 폭죽이 터지며 불꽃놀이가 시작되고, 동시에 욱제와 전우들의 영창 생활도 시작된다.
+ +???: “중대장은 오늘 너희에게 큰 실망을 했다”
+ +이 게임을 중대장님이 모르게 끝마치려면 마지막 전우(왼쪽에서부터 N번째 전우)가 수류탄을 받아 조용히 행사용 폭죽 더미에 섞어놓아야 한다. 욱제와 전우들은 항상 최선을 다해 최적의 방법으로 게임을 조용히 끝마칠 수 있도록 노력한다. 과연 영창을 건 이 게임의 끝은 어디일까?
+첫째 줄에 욱제를 포함한 전우들의 인원 수 N이 주어진다. (1 ≤ N ≤ 30,000)
+ +둘째 줄에 욱제를 포함한 N명 전우들의 좌표가 주어진다. 이는 수직선 위의 음이 아닌 정수로 표현되어 주어지며 욱제의 좌표는 항상 0이다. (0 ≤ 좌표 ≤ 1,000,000)
+ +N이 1보다 크다면, 셋째 줄에 욱제를 포함하고 마지막 전우를 제외한 N-1명 전우들의 사거리가 욱제부터 순서대로 주어진다. N이 1이면 셋째 줄이 주어지지 않는다. (0 ≤ 사거리 ≤ 1,000,000)
+게임이 조용히 마무리 될 수 있으면 “권병장님, 중대장님이 찾으십니다”를, 그렇지 않으면 “엄마 나 전역 늦어질 것 같아”을 출력한다.
+5 +0 5 10 15 100 +10 5 6 100 ++
5 +0 5 10 15 100 +10 5 6 0 ++
권병장님, 중대장님이 찾으십니다 ++
엄마 나 전역 늦어질 것 같아 ++
성원이는 수학을 정말 못 하는 고등학생이다. 수학을 못하는 대신 근성과 팔 힘이 뛰어난 성원이는 수학 시험에서 수학 지식을 사용하지 않고 근성과 체력을 사용해 문제를 푼다. 지난 시험에서는 아래 사진에 나와있는 문제를 근성과 체력을 사용해 열심히 풀었지만 사진에서 볼 수 있듯이 틀려버리고 말았다!
+ +결국 이 문제는 틀려버렸지만 성원이는 여전히 자신의 체력에 강한 자신감을 갖고 있다. 어떤 어려운 문제가 나와도 이런 식으로 근성과 체력을 사용하면 다 풀 수 있으니 이 방법은 최고의 방법이라고 생각하고 있다.
+ +성원이의 친구 형석이는 근성과 체력으로 수학 문제를 푸는 것은 굉장히 무식한 방법이라고 생각한다. 형석이는 수학을 공부하면 문제를 훨씬 빨리 풀 수 있다는 것을 알려주기 위해 위 사진에 나와있는 문제를 갖고 성원이와 퀴즈 내기를 하기로 했다. 위 사진의 문제를 다시 정리하면 아래와 같다.
+ +++ +"한 변의 길이가 1인 정사각형을 아래 그림과 같이 겹치지 않게 빈틈없이 계속 붙여 나간다. 가장 아랫부분의 정사각형이 n개가 되었을 때, 실선으로 이루어진 도형의 둘레의 길이를 구하시오."
+
가장 아랫부분의 정사각형 개수가 주어지면 그에 해당하는 답을 출력하는 프로그램을 만들어 형석이를 도와주자!
+첫 번째 줄에 가장 아랫부분의 정사각형 개수 n이 주어진다. (1 ≤ n ≤ 109)
+첫 번째 줄에 형석이가 말해야 하는 답을 출력한다.
+1+
3+
4+
12+
부산일과학고등학교의 효진이는 수학의 귀재이다. 어떤 문제라도 보면 1분 내에 풀어버린다는 학교의 전설이 내려올 정도였는데, 이런 킹ㅡ갓 효진에게도 고민이 생겼다. 대부분의 문제에서 반복되는 연산이 있었기 때문이다! 이 연산은 너무 길어서 종이에 풀던 효진이는 너무 고통스러워서, 자신이 새로 연산자를 만들기로 했다.
+ +연산자의 기호는 @으로, A@B = (A+B)×(A-B)으로 정의내리기로 했다.
+ +하지만, 효진이는 막상 큰 숫자가 들어오자 계산하기 너무 귀찮아졌다.
+ +효진이를 도와 정수 A, B가 주어지면 A@B를 계산하는 프로그램을 만들어주자!
+첫째 줄에 A, B가 주어진다. (1 ≤ A, B ≤ 100,000)
+첫째 줄에 A@B의 결과를 출력한다.
+4 3 ++
3 4 ++
7 ++
-7 ++
다음은 한결이가 거울과 한 얘기중 일부이다.
+ +솔직히 한결이는 기억력이 쓰레기다. 그래서 소수를 외우고 있지 못하다. 하지만 이렇게 허세를 부리고 나니 거울한테 참교육을 시전해주고 싶었다. 한결이를 도와 k번째 소수를 알려주자.
+ +소수의 정의는 다음과 같다.
+ +2 이상의 자연수 N이 1과 N을 제외하고 어떤 자연수로도 나누어 떨어지지 않을 때 소수라고 한다.
+자연수 K가 주어진다.(1 ≤ K ≤ 500,000)
+K번째 소수를 출력하자.
+1 ++
3 ++
2 ++
5 ++
코이 초등학교에 새로 부임하신 교장 선생님은 어린 학생들의 행복감과 학생들의 성적 차이 관계를 알아보기로 했다. 그래서 이전 성적을 조사하여 학생 들의 시험 점수 차이 변화를 알아보려고 한다.
+ +예를 들어서 2016년 학생 8명의 점수가 다음과 같다고 하자.
+ +27, 35, 92, 75, 42, 53, 29, 87
+ +그러면 가장 높은 점수는 92점이고 가장 낮은 점수는 27점이므로 점수의 최대 차이는 65이다. 한편 2017년 학생 8명의 점수가 다음과 같았다.
+ +85, 42, 79, 95, 37, 11, 72, 32
+ +이때 가장 높은 점수는 95점이고 가장 낮은 점수는 11점이므로 점수의 최대 차이는 84이다.
+ +N명 학생들의 점수가 주어졌을 때, 가장 높은 점수와 가장 낮은 점수의 차이를 구하는 프로그램을 작성하시오
+표준 입력으로 다음 정보가 주어진다. 첫 번째 줄에는 학생 수 N이 주어진다. 다음 줄에는 N명의 학생 점수가 공백 하나를 사이에 두고 주어진다.
+표준 출력으로 가장 높은 점수와 가장 낮은 점수의 차이를 출력한다.
+모든 서브태스크에서 2 ≤ N ≤ 1,000이고 입력되는 학생들의 점수는 0 이상 1,000 이하의 정수이다.
+5 +27 35 92 75 42 ++
8 +85 42 79 95 37 11 72 32 ++
65 ++
84 ++
N×N 격자의 각 칸에 수가 하나씩 적혀 있는 정사각형 모양의 게임 보드가 있다. 편의상 가장 왼쪽 위 칸의 좌표를 (1, 1), 가장 오른쪽 아래 칸의 좌표를 (N, N)으로 생각한다. 첫 번째 좌표는 열 번호, 두 번째 좌표는 행 번호를 각각 나타낸다. 이 게임 보드에서 임의로 두 개의 칸을 골라 차(車)를 하나씩 놓으려고 한다. 물론 두 개의 칸은 서로 달라야 한다.
+ +자신과 같은 열 또는 같은 행에 차(車)가 하나라도 놓여 있다면 그 칸은 "차의 공격을 받는 칸"에 해당된다. 하지만 차(車)가 직접 놓여 있는 칸은 "차의 공격을 받는 칸"에 해당되지 않는다.
+ +게임 보드에 적혀 있는 수들이 주어지면, "차의 공격을 받는 칸"에 적혀 있는 수들의 합이 최대가 되도록 두 개의 차(車)를 배치하는 프로그램을 작성하시오.
+첫째 줄에 N(2 ≤ N ≤ 300)이 주어진다. 이어서 N개의 줄에 걸쳐 게임 보드에 적혀 있는 수들이 한 줄에 N개씩 빈 칸을 사이에 두고 주어진다. 주어지는 수는 모두 0 이상 1,000이하의 정수이다.
+첫째 줄에, "차의 공격을 받는 칸"에 적혀 있는 수들의 합이 최대가 되도록 두 개의 차(車)를 배치했을 때 그 최대합을 출력한다.
+3 +0 1 4 +3 0 2 +1 4 1 ++
4 +0 1 1 1 +1 0 4 3 +0 1 3 5 +0 0 2 5 ++
5 +4 2 2 3 3 +4 2 1 4 0 +1 3 4 0 1 +4 3 0 2 3 +0 0 3 0 4 ++
15 ++
23 ++
40 ++
‘쩰리’는 점프하는 것을 좋아하는 젤리다. 단순히 점프하는 것에 지루함을 느낀 ‘쩰리’는 새로운 점프 게임을 해보고 싶어 한다. 새로운 점프 게임의 조건은 다음과 같다.
+ +새로운 게임이 맘에 든 ‘쩰리’는, 계속 게임을 진행해 마침내 최종 단계에 도달했다. 하지만, 게임을 진행하는 구역이 너무 넓어져버린 나머지, 이 게임에서 이길 수 있는지 없는지 가늠할 수 없어졌다. ‘쩰리’는 유능한 프로그래머인 당신에게 주어진 구역에서 승리할 수 있는 지 알아봐 달라고 부탁했다. ‘쩰리’를 도와 주어진 게임 구역에서 끝 점(오른쪽 맨 아래 칸)까지 도달할 수 있는지를 알아보자!
+입력의 첫 번째 줄에는 게임 구역의 크기 N (2 ≤ N ≤ 64)이 주어진다.
+ +입력의 두 번째 줄부터 마지막 줄까지 게임판의 구역(맵)이 주어진다.
+ +게임판의 승리 지점(오른쪽 맨 아래 칸)에는 -1이 쓰여있고, 나머지 칸에는 0 이상 100 이하의 정수가 쓰여있다.
+‘쩰리’가 끝 점에 도달할 수 있으면 “HaruHaru”(인용부호 없이), 도달할 수 없으면 “Hing” (인용부호 없이)을 한 줄에 출력합니다.
+3 +1 1 10 +1 5 1 +2 2 -1 ++
3 +2 2 1 +2 2 2 +1 2 -1 ++
HaruHaru ++
Hing ++
안녕? 내 이름은 이다솜. 나의 꿈은 포켓몬 마스터야. 일단 포켓몬 마스터가 되기 위해선 포켓몬을 한 마리 잡아야겠지? 근처 숲으로 가야겠어.
+ +(뚜벅 뚜벅)
+ +얏! 꼬렛이다. 꼬렛? 귀여운데, 나의 첫 포켓몬으로 딱 어울린데? 내가 잡고 말겠어. 가라! 몬스터볼~
+ +(펑!) 헐랭... 왜 안 잡히지?ㅜㅜ 몬스터 볼만 던지면 되는 게 아닌가...ㅜㅠ
+ +(터벅터벅)
+ +어? 누구지?
+ +오박사 : 나는 태초마을의 포켓몬 박사 오민식 박사라네. 다솜아, 포켓몬을 잡을 때는, 일단 상대 포켓몬의 체력을 적당히 바닥으로 만들어놓고 몬스터 볼을 던져야 한단다. 자, 내 포켓몬 이상해꽃으로 한번 잡아보렴. 포켓몬의 기술을 쓰는 것을 보고 포켓몬을 줄지 안줄지 결정을 하겠네. 자 한번 해보아라. 다솜아.
+ +이다솜 : 이상해꽃이라...음.. 꽃이니깐 왠지 햇빛을 받아서 공격을 할 것 같은데... 음... 이상해꽃! 햇빛공격!!!
+ +(꼬렛이 이상해꽃에게 공격을 받아 체력이 25 감소했다.) 가라! 몬스터 볼!!! (꼬렛을 잡았습니다.) 야호! 신난다. 꼬렛을 잡았다.
+ +오박사 : 오우!! 방금 쓴 공격은 솔라빔이라고 하네.. 어떻게 공격을 한 건가? 솔라빔이란 공격에 대해서 공부를 한 건가?
+ +이다솜 : 꽃이니깐 왠지 햇빛을 제대로 받으면 광합성을 해서 음.. 그냥 그럴 것 같아서요 ☞☜
+ +오박사 : 다른 아이들은 넝쿨채찍이나, 나뭇잎 공격을 하는데, 다솜이는 역시 뭔가 다르구나. 그럼 나와 함께 연구소로 가자꾸나. 내가 포켓몬을 한 마리 줄 테니, 너의 꿈을 펼쳐보아라. 꿈은 이루어진단다.
+ +이다솜 : 네! 오박사님, 고마워요.ㅜㅜ
+ +오박사 : 가자. 나의 연구소는 너의 옆집의 아랫집이란다. 같이 가도록하자. 지금 포켓몬을 주마.
+ +이다솜 : 네. 야호!!
+ +'
오영식 : 어? 오박사님 얘는 누구인가요?
+ +오박사 : 얘는 너의 라이벌이 될 친구 이다솜이라고 하네. 자, 포켓몬을 한 마리 골라보도록 해봐라 다솜아. 레이디퍼스트 네가 먼저 골라봐라.
+ +이다솜 : 저는 생각해둔 포켓몬이 있어요. 피카츄 골라도 될까요?
+ +오박사 : 그래 여기 피카츄가 한 마리 있단다. 피카츄를 가져가거라.
+ +오영식 : 그럼 저는 이브이를 가져가겠어요. 그럼 나중에 보자 이다솜.
+ +이다솜 : 그럼 꼬렛을 다시 잡으러 가야겠다. 영식아, 그리고 민식박사님 빠잉!
+ +이다솜 : 피카츄 공격!
+ +가라 몬스터 볼!
+ +이다솜 : 야호! 신난다. 꼬렛을 잡았다!!!!!
+ +이다솜 : 그럼! 일단 사천왕을 이기고 오겠어!
+ +이다솜 : 여기가 사천왕과 대결하려면 가야하는 곳인가..
+ +경비원 : 사천왕과 대결을 하려면, 마을의 체육관 리더를 이겨서 배지를 8개를 모아야 한다네... 배지를 모아서 오도록 하게
+ +이다솜 : 잉ㅠㅜ... 그럼 배지부터 모아야 하는구나ㅠㅜㅠㅜ 나쁘당 그냥 좀 봐주지..
+ +<1 년 후>
+ +그동안의 줄거리 : 이다솜은 일단 상록 숲의 체육관 리더에게 도전을 했다. 하지만 상록숲 체육관의 리더는 실종된 상태. 따라서 회색마을부터 도전하기로 했다. 체육관의 리더를 이기면서, 로켓단을 해체시키기도 하고, 여러 가지 사건도 있었다. 결국 전설의 포켓몬도 잡고, 이제 사천왕을 이기려고 도전하기로 했다. 사천왕은 모두 가볍게 이기고, 이제 마지막 라이벌 오!영!식! 이다.
+ +오영식 : 훗. 1년 전의 그 이다솜이 사천왕을 이기고 현재 포켓몬 마스터인 나에게 덤벼? 어디 한번 덤벼보시지.
+ +이다솜 : 헐랭... 나를 우습게보네.... 한번 두고 보시지! 그럼 대결이닷!
+ +이다솜 : 휴... 이겼다.
+ +오영식 : 내가 지다니 분하다. ㅜㅜ
+ +오박사 : 그럼 다솜아 이제 진정한 포켓몬 마스터가 되기 위해 도감을 완성시키도록 하여라. 일단 네가 현재 가지고 있는 포켓몬 도감에서 포켓몬의 이름을 보면 포켓몬의 번호를 말하거나, 포켓몬의 번호를 보면 포켓몬의 이름을 말하는 연습을 하도록 하여라. 나의 시험을 통과하면, 내가 새로 만든 도감을 주도록 하겠네.
+첫째 줄에는 도감에 수록되어 있는 포켓몬의 개수 N이랑 내가 맞춰야 하는 문제의 개수 M이 주어져. N과 M은 1보다 크거나 같고, 100,000보다 작거나 같은 자연수인데, 자연수가 뭔지는 알지? 모르면 물어봐도 괜찮아. 나는 언제든지 질문에 답해줄 준비가 되어있어.
+ +둘째 줄부터 N개의 줄에 포켓몬의 번호가 1번인 포켓몬부터 N번에 해당하는 포켓몬까지 한 줄에 하나씩 입력으로 들어와. 포켓몬의 이름은 모두 영어로만 이루어져있고, 또, 음... 첫 글자만 대문자이고, 나머지 문자는 소문자로만 이루어져 있어. 아참! 일부 포켓몬은 마지막 문자만 대문자일 수도 있어. 포켓몬 이름의 최대 길이는 20, 최소 길이는 2야. 그 다음 줄부터 총 M개의 줄에 내가 맞춰야하는 문제가 입력으로 들어와. 문제가 알파벳으로만 들어오면 포켓몬 번호를 말해야 하고, 숫자로만 들어오면, 포켓몬 번호에 해당하는 문자를 출력해야해. 입력으로 들어오는 숫자는 반드시 1보다 크거나 같고, N보다 작거나 같고, 입력으로 들어오는 문자는 반드시 도감에 있는 포켓몬의 이름만 주어져. 그럼 화이팅!!!
+첫째 줄부터 차례대로 M개의 줄에 각각의 문제에 대한 답을 말해줬으면 좋겠어!!!. 입력으로 숫자가 들어왔다면 그 숫자에 해당하는 포켓몬의 이름을, 문자가 들어왔으면 그 포켓몬의 이름에 해당하는 번호를 출력하면 돼. 그럼 땡큐~
+ +이게 오박사님이 나에게 새로 주시려고 하는 도감이야. 너무 가지고 싶다ㅠㅜ. 꼭 만점을 받아줬으면 좋겠어!! 파이팅!!!
+26 5 +Bulbasaur +Ivysaur +Venusaur +Charmander +Charmeleon +Charizard +Squirtle +Wartortle +Blastoise +Caterpie +Metapod +Butterfree +Weedle +Kakuna +Beedrill +Pidgey +Pidgeotto +Pidgeot +Rattata +Raticate +Spearow +Fearow +Ekans +Arbok +Pikachu +Raichu +25 +Raichu +3 +Pidgey +Kakuna ++
Pikachu +26 +Venusaur +16 +14 ++
N×N 크기의 공간에 물고기 M마리와 아기 상어 1마리가 있다. 공간은 1×1 크기의 정사각형 칸으로 나누어져 있다. 한 칸에는 물고기가 최대 1마리 존재한다.
+ +아기 상어와 물고기는 모두 크기를 가지고 있고, 이 크기는 자연수이다. 가장 처음에 아기 상어의 크기는 2이고, 아기 상어는 1초에 상하좌우로 인접한 한 칸씩 이동한다.
+ +아기 상어는 자신의 크기보다 큰 물고기가 있는 칸은 지나갈 수 없고, 나머지 칸은 모두 지나갈 수 있다. 아기 상어는 자신의 크기보다 작은 물고기만 먹을 수 있다. 따라서, 크기가 같은 물고기는 먹을 수 없지만, 그 물고기가 있는 칸은 지나갈 수 있다.
+ +아기 상어가 어디로 이동할지 결정하는 방법은 아래와 같다.
+ +아기 상어의 이동은 1초 걸리고, 물고기를 먹는데 걸리는 시간은 없다고 가정한다. 즉, 아기 상어가 먹을 수 있는 물고기가 있는 칸으로 이동했다면, 이동과 동시에 물고기를 먹는다. 물고기를 먹으면, 그 칸은 빈 칸이 된다.
+ +아기 상어는 자신의 크기와 같은 수의 물고기를 먹을 때 마다 크기가 1 증가한다. 예를 들어, 크기가 2인 아기 상어는 물고기를 2마리 먹으면 크기가 3이 된다.
+ +공간의 상태가 주어졌을 때, 아기 상어가 몇 초 동안 엄마 상어에게 도움을 요청하지 않고 물고기를 잡아먹을 수 있는지 구하는 프로그램을 작성하시오.
+첫째 줄에 공간의 크기 N(2 ≤ N ≤ 20)이 주어진다.
+ +둘째 줄부터 N개의 줄에 공간의 상태가 주어진다. 공간의 상태는 0, 1, 2, 3, 4, 5, 6, 9로 이루어져 있고, 아래와 같은 의미를 가진다.
+ +아기 상어는 공간에 한 마리 있다.
+첫째 줄에 아기 상어가 엄마 상어에게 도움을 요청하지 않고 물고기를 잡아먹을 수 있는 시간을 출력한다.
+3 +0 0 0 +0 0 0 +0 9 0 ++
3 +0 0 1 +0 0 0 +0 9 0 ++
4 +4 3 2 1 +0 0 0 0 +0 0 9 0 +1 2 3 4 ++
6 +5 4 3 2 3 4 +4 3 2 3 4 5 +3 2 9 5 6 6 +2 1 2 3 4 5 +3 2 1 6 5 4 +6 6 6 6 6 6 ++
6 +6 0 6 0 6 1 +0 0 0 0 0 2 +2 3 4 5 6 6 +0 0 0 0 0 2 +0 2 0 0 0 0 +3 9 3 0 0 1 ++
6 +1 1 1 1 1 1 +2 2 6 2 2 3 +2 2 5 2 2 3 +2 2 2 4 6 3 +0 0 0 0 0 6 +0 0 0 0 0 9 ++
0 ++
3 ++
14 ++
60 ++
48 ++
39 ++
자연수 A를 B번 곱한 수를 알고 싶다. 단 구하려는 수가 매우 커질 수 있으므로 이를 C로 나눈 나머지를 구하는 프로그램을 작성하시오.
+첫째 줄에 A, B, C가 빈 칸을 사이에 두고 순서대로 주어진다. A, B, C는 모두 2,147,483,647 이하의 자연수이다.
+첫째 줄에 A를 B번 곱한 수를 C로 나눈 나머지를 출력한다.
+10 11 12 ++
4+
You have recently been hired as an architect for the BAPC (Bureau of Architecture and Promising Constructions), responsible for top-quality buildings such as the Tower of Pisa. However, in the past couple of weeks, some of the constructions that the BAPC has made have collapsed! It is up to you to figure out whether any other constructions are in danger.
+ +After some research it seems like the x-coordinate of the center of gravity of some of the constructions is off: if this is too much to the left or to the right, the construction will fall over. Hence, you decide to check all the blueprints and see whether the constructions are stable or not.
+ +Given is an up to 100 by 100 grid of characters in .#/\_|-. The . characters denote empty space, while each other character represents a completely filled 1 × 1 box (any difference in symbols used is due to the artistic freedom of the other architects), whose center of mass is at the center of the box.
Every construction forms a single connected component that touches the ground, i.e. the bottom layer of the grid.
+ +The construction falls to the left if the x-coordinate of the center of gravity is less than the x-coordinate of the leftmost point of the construction that touches the ground, and it falls to the right if the x-coordinate of the center of gravity is larger than the x-coordinate of the rightmost point of the construction that touches the ground. It is guaranteed that the center of gravity is never exactly above the leftmost or rightmost point where the building touches the ground.
+ +Given a blueprint, is the construction balanced, does it fall to the left, or does it fall to the right?
+., indicating empty space, or one of #/\_|-, indicating a filled 1 × 1 box .3 3 +/-\ +|.| +#.# ++
3 3 +... +___ +..| ++
3 3 +./\ +.\/ +.|. ++
20 19 +................... +.........-____---.. +........._/\\////-. +.......--//#\#\/_.. +......._/\///////_. +......-/#######\/-. +......////\/#\#/_.. +....../\#\#/////_.. +....._/#####\#\/... +....._/\////////-.. +...../########/-... +...._///\/#\#\/.... +...._/#/#/\/\/_.... +..._/\#######/-.... +..._/\////////-.... +.../\#\#\#\#/-..... +.._///\\\\#\/-..... +.._//////////-..... +..////##////-...... +.-____##____....... ++
balanced ++
left ++
balanced ++
balanced ++
파스칼의 삼각형은 이항계수를 삼각형 형태로 배열한 것인데, 블레즈 파스칼(1623-1662)을 따라 이름 붙여졌다.
+ +단순한 형태로, 파스칼의 삼각형은 다음과 같은 방법으로 만들 수 있다.
+ +예를 들어, n=3이면 3번째 행의 2번째 수는 위 행의 인접한 두 수 (1과 1)을 더해서 만든다.
+ +n=6일 때, 파스칼 삼각형의 6번째 행의 10은 5번째 행의 인접한 두 수(4와 6)을 더해서 구한다.
+ +![]()
같은 방식으로 n=11일 때, 다음과 같은 파스칼의 삼각형을 만들 수 있다.
+ +![]()
정수 n과 k가 주어졌을 때 파스칼의 삼각형에 있는 n번째 행에서 k번째 수를 출력하는 프로그램을 작성하시오. 이때, 이 수는 이항계수 C(n-1,k-1)임에 주의하시오.
+첫째 줄에 정수 n과 k가 빈칸을 사이에 두고 차례로 주어진다. 이 때, 1 ≤ k ≤ n ≤ 30을 만족한다.
+첫째 줄에 n번째 행에 있는 k번째 수를 출력한다.
+5 3 ++
11 3 ++
6 ++
45 ++
배성일력 73년, 대륙을 주름잡던 성일 제국은 무리한 정복 전쟁 끝에 멸망하게 되었다. 기회를 노리던 반란군들은 혼란을 틈타 제각각 왕국을 선포했고, 왕국들은 제국의 자리를 차지하기 위해 수많은 전쟁을 치르게 되었다.
+ +전쟁은 다음과 같은 방식으로 진행된다.
+ +다른 왕국의 속국이 아닌 왕국은 자신의 속국이 아닌 다른 왕국을 공격하여 전쟁을 벌일 수 있다. 만약 전쟁에서 승리한다면 그 왕국과 그 왕국의 속국들을 전부 자신의 속국으로 삼게 된다. 때로는 다른 왕국의 속국을 공격하는 경우도 있는데, 이 경우 그 왕국의 종주국(그 왕국을 거느린 왕국)은 그 왕국을 지키기 위해 지원을 아끼지 않는다. 따라서 여기서 승리한다면 빈털터리가 된 종주국과 그 속국들까지도 전부 자신의 속국으로 삼을 수 있다. 그러나 전쟁에서 패배한다면 자신과 자신의 속국들이 전부 상대 왕국(만약 다른 왕국의 속국이라면 그 종주국)의 속국으로 넘어가게 된다.
+ +속국은 기본적으로 다른 왕국을 공격할 수 없지만, 한 가지 예외가 있다. 바로 자신의 종주국을 공격하는 것이다. 만약 이 전쟁에서 속국이 승리한다면 속국 신세에서 벗어나 종주국이었던 왕국과 그 속국들을 속국으로 삼게 된다. 그러나 종주국이 승리한다면 아쉽게도 아무 일도 일어나지 않는다.
+ +왕국들의 이름과 두 왕국의 전쟁 결과들이 주어질 때, 모든 전쟁이 끝난 후 속국이 아닌 왕국들의 수와 속국이 아닌 각 왕국의 이름을 출력하라.
+첫째 줄에 왕국들의 수 N(2 ≤ N ≤ 500), 전쟁 결과의 수 M(1 ≤ M ≤ 2,000) 이 주어진다.
+ +둘째 줄부터 N개의 줄에 걸쳐 각 왕국의 이름이 주어진다.
+ +왕국의 이름은 항상 “Kingdom of ”로 시작하며, 그 뒤로 공백 없는 하나의 단어로 이루어진다. 왕국 이름은 알파벳 대소문자와 공백으로만 이루어지고, 이름의 총 길이는 공백을 포함해 20을 넘지 않는다. 또한 왕국의 이름은 중복되지 않는다.
+ +그다음 줄부터 M개의 줄에 걸쳐 전쟁의 결과가 주어진다.
+ +전쟁의 결과로 왕국1의 이름, 왕국2의 이름, w(w = 1 or 2)가 공백 없이 쉼표(,)를 사이에 둔 형식으로 주어지며, w가 1인 경우 왕국1이, 2인 경우 왕국2가 승리했다는 것을 뜻한다. 왕국 이름의 입력 순서는 어느 쪽이 먼저 공격했는지와는 관계가 없으며, 문제 조건에 따라 성립할 수 있는 전쟁만이 입력으로 주어진다.
+첫째 줄에 속국이 아닌 왕국의 수를 출력한다.
+ +둘째 줄부터 속국이 아닌 왕국의 이름을 ASCII 사전 순으로 정렬하여 한 줄에 하나씩 출력한다.
+5 2 +Kingdom of A +Kingdom of B +Kingdom of C +Kingdom of D +Kingdom of E +Kingdom of A,Kingdom of B,1 +Kingdom of C,Kingdom of D,2 ++
5 5 +Kingdom of A +Kingdom of B +Kingdom of C +Kingdom of D +Kingdom of E +Kingdom of A,Kingdom of B,2 +Kingdom of C,Kingdom of D,1 +Kingdom of E,Kingdom of C,2 +Kingdom of C,Kingdom of D,2 +Kingdom of D,Kingdom of E,2 ++
5 4 +Kingdom of A +Kingdom of B +Kingdom of C +Kingdom of D +Kingdom of E +Kingdom of A,Kingdom of B,2 +Kingdom of C,Kingdom of D,1 +Kingdom of E,Kingdom of C,2 +Kingdom of A,Kingdom of C,1 ++
3 +Kingdom of A +Kingdom of D +Kingdom of E ++
2 +Kingdom of B +Kingdom of E ++
1 +Kingdom of B ++
용사는 공주를 구하기 위해 무시무시한 용이 있는 던전으로 향하기로 하였습니다. 우선 용사는 용사 자신과 던전을 분석하였습니다.
+ +용사에게는 세 종류의 능력치가 있습니다.
+ +던전은 총 N개의 방으로 이루어져 있고 i번째 방을 통해서만 i+1번째 방으로 이동 할 수 있습니다. 방에는 포션이 있거나 몬스터가 있는데 몬스터가 있을 경우 몬스터를 쓰러트려야지 다음방으로 이동 할 수 있습니다. N번째 방에는 공주와 용이 있고, 용을 무찌르면 공주를 구할 수 있습니다.
+ +몬스터가 있는 방에 올 경우 다음과 같이 전투가 진행됩니다.
+ +포션이 있는 방에 올 경우 포션을 마셔서 현재 용사의 생명력 HCurHP가 일정량 회복되고 공격력 HATK도 일정량만큼 증가됩니다. 회복된 생명력이 최대 생명력 HMaxHP보다 큰 경우 용사의 현재 생명력 HCurHP가 최대 생명력 HMaxHP와 같아집니다.
+ +용사는 던전으로 향하기 전에 만반의 준비를 하고 있습니다. 용사는 수련을 하면 최대 생명력 HMaxHP를 늘릴 수 있는데 얼마나 수련해야 할지 고민입니다.
+ +용사는 N번 방에 있는 용을 쓰러트리기 위한 최소의 HMaxHP를 여러분이 계산해주면 좋겠다고 합니다.
+첫 번째 줄에 방의 개수 N (1 ≤ N ≤ 123,456) 과 용사의 초기 공격력 HATK (1 ≤ HATK ≤ 1,000,000) 가 주어집니다.
+ +i+1번째 줄엔 i번째 방의 정보를 나타내는 세개의 정수 ti, ai, hi (ti ∈ {1, 2}, 1 ≤ ai, hi ≤ 1,000,000) 가 주어집니다.
+ +ti가 1인 경우 공격력이 ai이고 생명력이 hi인 몬스터가 있음을 나타내고, ti가 2인 경우 용사의 공격력 HATK를 ai만큼 증가시켜주고 용사의 현재 생명력 HCurHP를 hi만큼 회복시켜주는 포션이 있음을 나타냅니다.
+용사가 N번째 방에 있는 용을 쓰러트리기 위한 최소의 HMaxHP를 출력합니다.
+3 3 +1 1 20 +2 3 10 +1 3 100+
1 1 +1 1000000 1000000+
49+
999999000001+
승민이는 동물원의 원숭이들을 관리하는 사육사입니다. 이 동물원에는 N마리의 원숭이들이 있고 원숭이들에게 1번부터 N번까지 번호를 붙였습니다.
+ +7일간 동물원에서 원숭이들끼리 스포츠 경기를 진행하는 이벤트를 열게 되었습니다. 경기는 A팀과 B팀으로 나뉘어 하루에 한 번 진행되며 모든 원숭이는 경기에 참여해야 하지만 팀원의 수는 달라도 괜찮습니다. 단, 각 팀에는 최소 한 마리의 원숭이가 있어야 합니다.
+ +승민이는 원숭이들끼리 너무 친해지는 것을 막기 위해 모든 두 원숭이에 대해서 적어도 한번은 적으로 만나도록 대진표를 구성하고 싶어합니다. 승민이를 도와 경기 대진표를 짜주세요.
+첫 번째 줄에 원숭이의 수를 나타내는 정수 N (2 ≤ N ≤ 99) 가 주어집니다.
+일곱 개의 줄에 팀의 구성을 출력합니다.
+ +i (1 ≤ i ≤ 7) 번째 줄에는 길이가 N이고 문자 'A' 또는 문자 'B'로 만 구성된 문자열을 출력합니다. i번째 문자열의 j번째 문자는 i번째 날 j번 원숭이가 속한 팀을 나타냅니다.
문제에서 설명한 방식대로 팀을 구성하는 대진표가 여러 개 있다면 그 중 한 개만 출력합니다.
+7+
10+
BBBBABA +BAAAABA +BBBBBBA +BAAAAAB +AABABAA +ABBABAB +BBABABA+
BBBBABABAA +AABABBBBBB +BBAAAAABAA +BABAAABBAB +ABBBABABAB +BBABAABBBB +AABABABBAB+
N명의 고리 회원들은 치킨을 주문하고자 합니다.
+ +치킨은 총 M가지 종류가 있고 회원마다 특정 치킨의 선호도가 있습니다. 한 사람의 만족도는 시킨 치킨 중에서 선호도가 가장 큰 값으로 결정됩니다. 진수는 회원들의 만족도의 합이 최대가 되도록 치킨을 주문하고자 합니다.
+ +시키는 치킨의 종류가 많아질수록 치킨을 튀기는 데에 걸리는 시간도 길어지기 때문에 최대 세 가지 종류의 치킨만 시키고자 합니다.
+ +진수를 도와 가능한 만족도의 합의 최댓값을 구해주세요.
+첫 번째 줄에 고리 회원의 수 N (1 ≤ N ≤ 30) 과 치킨 종류의 수 M (3 ≤ M ≤ 30) 이 주어집니다.
+ +두 번째 줄부터 N개의 줄에 각 회원의 치킨 선호도가 주어집니다.
+ +i+1번째 줄에는 i번째 회원의 선호도 ai,1, ai,2, ..., ai,M (1 ≤ ai,j ≤ 9) 가 주어집니다.
+첫 번째 줄에 고리 회원들의 만족도의 합의 최댓값을 출력합니다.
+3 5 +1 2 3 4 5 +5 4 3 2 1 +1 2 3 2 1+
4 6 +1 2 3 4 5 6 +6 5 4 3 2 1 +3 2 7 9 2 5 +4 5 6 3 2 1+
13+
25+
하나 이상의 연속된 소수의 합으로 나타낼 수 있는 자연수들이 있다. 몇 가지 자연수의 예를 들어 보면 다음과 같다.
+ +하지만 연속된 소수의 합으로 나타낼 수 없는 자연수들도 있는데, 20이 그 예이다. 7+13을 계산하면 20이 되기는 하나 7과 13이 연속이 아니기에 적합한 표현이 아니다. 또한 한 소수는 반드시 한 번만 덧셈에 사용될 수 있기 때문에, 3+5+5+7과 같은 표현도 적합하지 않다.
+ +자연수가 주어졌을 때, 이 자연수를 연속된 소수의 합으로 나타낼 수 있는 경우의 수를 구하는 프로그램을 작성하시오.
+첫째 줄에 자연수 N이 주어진다. (1 ≤ N ≤ 4,000,000)
+첫째 줄에 자연수 N을 연속된 소수의 합으로 나타낼 수 있는 경우의 수를 출력한다.
+20 ++
3 ++
41 ++
53 ++
0+
1 ++
3 ++
2 ++
여러 개의 숫자들이 주어졌을 때, 이들 중 가장 큰 숫자를 출력하는 프로그램을 작성하시오.
+첫째 줄에 n, m(15 ≤ n ≤ m ≤ 1000)이 주어진다. 다음 n개의 줄에는 공백(' ')과 별 표('*')로 이루어진 숫자들이 주어진다. 각 줄마다 총 m개의 문자가 있다.
+ +모든 숫자들은 어떤 자연수 k에 대해 가로 3k, 세로 5k 크기의 직사각형에 딱 맞게 들어가고, 이 직사각형을 다시 15개의 k × k 정사각형들로 분할할 경우 각 정사각형 안의 문자들은 모두 공백 혹은 별 표 중 한 종류로만 이루어져 있음이 보장된다.
+ +위에서 언급한 숫자를 포함하는 직사각형들에 대해, 어떤 직사각형도 서로 겹쳐져 있지 않다. 또한 어떤 직사각형도 상하좌우 혹은 대각선 방향으로 맞닿아 있지 않다. 가장 큰 숫자는 하나만 주어진다.
+첫째 줄에 가장 큰 숫자를 출력한다.
++*** ** ** *** * +* * * * * ** +* * * * ** * * +* * * * * *** +*** *** *** *** * + +*** * *** *** *** +* * * * * * * +** *** * *** *** + * * * * * * * +*** *** * *** *+
17 27 +** + * ****** + * ****** ********* +* ** ********* +*** ** ********* + ** *** + ** *** + ** *** + ** ****** + ** ****** + ** ****** + *** + * *** + ** *** + * * ********* + *** ********* + * ********* ++
3 ++
맨날 학교 칠판에 이등변삼각형을 그리고 노는 피카츄가 어느 날, 칠판에 변 AB와 변 AC의 길이가 모두 N인 이등변 삼각형을 그린 다음, 친구들에게 아래와 같은 문제를 냈다.
+ +++ +이등변삼각형 ABC에서 변 BC 위에 점 P1, P2, ··· , PK을 잡는다. (B ≠ Pi ≠ C (i = 1, 2, ··· , K))
+ +i = 1, 2, ··· , K에 대하여 함수 F(i)를 (선분 APi의 길이)²+(선분 BPi의 길이)×(선분 CPi의 길이)로 정의한다.
+ +이때, F(1)+F(2)+···+F(K)의 값은 얼마인지 구하시오.
+
피카츄의 친구들은 문제 조차도 이해를 못하고 있다! 우리가 대신해서 피카츄가 낸 문제를 해결해 보자.
+첫째 줄에 N과 K의 값이 사이에 공백을 한 개 두고 차례대로 주어진다. 단, N과 K는 100,000 이하의 양의 정수이다.
+첫째 줄에 문제에서 요구하는 정답을 x라고 할 때, x보다 크지 않은 최대의 정수를 출력한다.
+4 7 ++
112 ++
곧 졸업을 앞둔 민호는 대학교 생활 동안 구매만 해놓고 한 번도 펴보지 않은 전공책에 먼지가 쌓여 있는 것을 보고는, 이 책들을 어떻게 처리해야 할지 고민 중이다. 열심히 고민한 끝에 민호는 결국 전공책을 모두 버리기로 마음먹었다. 하지만 그냥 버리기엔 심심한 민호는 전공책 제목에 있는 글자들을 오려서 단어 만들기 놀이를 하려고 한다. 단어 만들기 놀이는 아래 예시와 같다.
+ +COMPUTERARCHITECTURE (35,000원)ALGORITHM (47,000원)NETWORK (43,000원)OPERATINGSYSTEM (40,000원)만약 민호가 만들고 싶은 단어가 ALMIGHTY라고 하면, 위 4개의 책 중, 1번 책에서 A를, 2번 책에서 L, M, I, G, H, T를, 4번 책에서 Y를 오려내어 원하는 단어를 만들 수 있다. 이때 드는 비용은 1번, 2번, 4번 책 가격의 합인 122,000원이다.
만약 ANT라는 단어를 만들고 싶다고 하면, 2번 책에서 A를, 3번 책에서 N, T를 오려내어 원하는 단어를 만들 수 있다. 이때 드는 비용은 2번과 3번 책 가격을 합하여 90,000원이다. 그런데, ANT라는 단어에서 A를 2번 책에서 오려내지 않고, 4번 책에 있는 A를 오려낼 수도 있다. 만약 4번 책에서 A를 오려냈을 때 드는 비용은 3번과 4번 책 가격을 합하여 83,000원으로 2번과 3번 책을 고른 비용보다 작다. 하지만, 4번 책에는 ANT가 모두 포함되어 있으므로, 4번 책만 선택했을 때 드는 비용이 40,000원이다. 이는 ANT라는 단어를 만들기 위해서 가장 적은 비용이다.
민호는 여러 개의 전공책들을 나열해 놓고는, 심각한 고민 끝에 전공책 제목에 있는 글자를 오려내어 자신이 원하는 단어를 만들기 위해서는 여러 가지 경우가 있다는 것을 깨달았다. 매우 심심했던 민호는 가장 적은 비용으로 자신이 원하는 단어를 만들려면 어떤 전공책들을 선택해야 하는지 궁금했다. 하지만 일일이 가능한 조합을 만들어 보는 것은 매우 시간 낭비라고 생각한 민호는 컴퓨터공학과답게 프로그램을 만들려고 한다.
+ +민호를 도와 각 전공책의 가격과 제목이 주어졌을 때, 가장 적은 비용으로 민호가 원하는 단어를 만들기 위해서 어떤 전공책을 선택해야 하는지 알아보자.
+첫 번째 줄에는 민호가 만들고자 하는 단어를 의미하는 문자열 T (1 ≤ |T| ≤ 10)가 주어진다. T는 항상 대문자이며, |T|는 문자열 T의 길이를 의미한다.
+ +두 번째 줄에는 민호가 가진 전공책의 개수를 의미하는 정수 N (1 ≤ N ≤ 16)이 주어진다.
+ +다음 N개의 각 줄에는 전공책 가격을 의미하는 정수 Ci (10,000 ≤ Ci ≤ 100,000)와 제목을 의미하는 문자열 Wi (1 ≤ |Wi| ≤ 50)가 주어진다. Wi는 항상 대문자이다.
+민호가 원하는 단어 T를 만들기 위해서 선택해야 하는 전공책의 가장 적은 가격의 합을 출력한다. 만약 단어를 만들 수 없다면 -1을 출력한다.
ANT +4 +35000 COMPUTERARCHITECTURE +47000 ALGORITHM +43000 NETWORK +40000 OPERATINGSYSTEM ++
ALMIGHTY +4 +35000 COMPUTERARCHITECTURE +47000 ALGORITHM +43000 NETWORK +40000 OPERATINGSYSTEM ++
BAKEJOON +3 +25000 JAVA +10000 OOP +30000 BINARYCHECK ++
JAVA +2 +30000 CPLUSPLUS +25000 PYTHON ++
40000 ++
87000 ++
65000 ++
-1 ++
집에서 시간을 보내던 오영식은 박성원의 부름을 받고 급히 달려왔다. 박성원이 캠프 때 쓸 N개의 랜선을 만들어야 하는데 너무 바빠서 영식이에게 도움을 청했다.
+ +이미 오영식은 자체적으로 K개의 랜선을 가지고 있다. 그러나 K개의 랜선은 길이가 제각각이다. 박성원은 랜선을 모두 N개의 같은 길이의 랜선으로 만들고 싶었기 때문에 K개의 랜선을 잘라서 만들어야 한다. 예를 들어 300cm 짜리 랜선에서 140cm 짜리 랜선을 두 개 잘라내면 20cm는 버려야 한다. (이미 자른 랜선은 붙일 수 없다.)
+ +편의를 위해 랜선을 자르거나 만들 때 손실되는 길이는 없다고 가정하며, 기존의 K개의 랜선으로 N개의 랜선을 만들 수 없는 경우는 없다고 가정하자. 그리고 자를 때는 항상 센티미터 단위로 정수길이만큼 자른다고 가정하자. N개보다 많이 만드는 것도 N개를 만드는 것에 포함된다. 이때 만들 수 있는 최대 랜선의 길이를 구하는 프로그램을 작성하시오.
+첫째 줄에는 오영식이 이미 가지고 있는 랜선의 개수 K, 그리고 필요한 랜선의 개수 N이 입력된다. K는 1이상 10,000이하의 정수이고, N은 1이상 1,000,000이하의 정수이다. 그리고 항상 K ≦ N 이다. 그 후 K줄에 걸쳐 이미 가지고 있는 각 랜선의 길이가 센티미터 단위의 정수로 입력된다. 랜선의 길이는 231-1보다 작거나 같은 자연수이다.
+첫째 줄에 N개를 만들 수 있는 랜선의 최대 길이를 센티미터 단위의 정수로 출력한다.
+802cm 랜선에서 4개, 743cm 랜선에서 3개, 457cm 랜선에서 2개, 539cm 랜선에서 2개를 잘라내 모두 11개를 만들 수 있다.
+4 11 +802 +743 +457 +539 ++
200 ++
피리 부는 사나이 성우는 오늘도 피리를 분다.
+ +성우가 피리를 불 때면 영과일 회원들은 자기도 모르게 성우가 정해놓은 방향대로 움직이기 시작한다. 성우가 정해놓은 방향은 총 4가지로 U, D, L, R이고 각각 위, 아래, 왼쪽, 오른쪽으로 이동하게 한다.
+ +이를 지켜보던 재훈이는 더 이상 움직이기 힘들어하는 영과일 회원들을 지키기 위해 특정 지점에 ‘SAFE ZONE’ 이라는 최첨단 방음 시설을 만들어 회원들이 성우의 피리 소리를 듣지 못하게 하려고 한다. 하지만 예산이 넉넉하지 않은 재훈이는 성우가 설정해 놓은 방향을 분석해서 최소 개수의 ‘SAFE ZONE’을 만들려 한다.
+ +성우가 설정한 방향 지도가 주어졌을 때 재훈이를 도와서 영과일 회원들이 지도 어느 구역에 있더라도 성우가 피리를 불 때 ‘SAFE ZONE’에 들어갈 수 있게 하는 ‘SAFE ZONE’의 최소 개수를 출력하는 프로그램을 작성하시오.
+첫 번째 줄에 지도의 행의 수를 나타내는 N(1 ≤ N ≤ 1,000)과 지도의 열의 수를 나타내는 M(1 ≤ M ≤ 1,000)이 주어진다.
+ +두 번째 줄부터 N개의 줄에 지도의 정보를 나타내는 길이가 M인 문자열이 주어진다.
+ +지도 밖으로 나가는 방향의 입력은 주어지지 않는다.
+첫 번째 줄에 ‘SAFE ZONE’의 최소 개수를 출력한다.
+3 4 +DLLL +DRLU +RRRU ++
2 ++
N!에서 뒤에서부터 처음 0이 아닌 숫자가 나올 때까지 0의 개수를 구하는 프로그램을 작성하시오.
+첫째 줄에 N이 주어진다. (0 ≤ N ≤ 500)
+첫째 줄에 구한 0의 개수를 출력한다.
+10 ++
3 ++
2 ++
0 ++
크기가 N×M인 종이가 있고, 종이는 1×1크기의 칸으로 나누어져 있다. 이 종이의 각 칸 위에 1×1×1 크기의 정육면체를 놓아 3차원 도형을 만들었다.
+ +종이의 각 칸에 놓인 정육면체의 개수가 주어졌을 때, 이 도형의 겉넓이를 구하는 프로그램을 작성하시오.
+ +위의 그림은 3×3 크기의 종이 위에 정육면체를 놓은 것이고, 겉넓이는 60이다.
+첫째 줄에 종이의 크기 N, M이 주어진다. 둘째 줄부터 N개의 줄에는 종이의 각 칸에 놓인 정육면체의 수가 주어진다.
+첫째 줄에 도형의 겉넓이를 출력한다.
+1 1 +1 ++
3 3 +1 3 4 +2 2 3 +1 2 4 ++
6 ++
60 ++
수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 때 걷는다면 1초 후에 X-1 또는 X+1로 이동하게 된다. 순간이동을 하는 경우에는 1초 후에 2*X의 위치로 이동하게 된다.
+ +수빈이와 동생의 위치가 주어졌을 때, 수빈이가 동생을 찾을 수 있는 가장 빠른 시간이 몇 초 후인지 구하는 프로그램을 작성하시오.
+첫 번째 줄에 수빈이가 있는 위치 N과 동생이 있는 위치 K가 주어진다. N과 K는 정수이다.
+수빈이가 동생을 찾는 가장 빠른 시간을 출력한다.
+수빈이가 5-10-9-18-17 순으로 가면 4초만에 동생을 찾을 수 있다.
+5 17 ++
4 ++
길이가 N인 수열 A1, A2, ..., AN이 주어진다. 이때, 다음 쿼리를 수행하는 프로그램을 작성하시오.
+ +1 i j k: Ai, Ai+1, ..., Aj에 k를 더한다.2 x: Ax 를 출력한다.첫째 줄에 수열의 크기 N (1 ≤ N ≤ 100,000)이 주어진다.
+ +둘째 줄에는 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 1,000,000)
+ +셋째 줄에는 쿼리의 개수 M (1 ≤ M ≤ 100,000)이 주어진다.
+ +넷째 줄부터 M개의 줄에는 쿼리가 한 줄에 하나씩 주어진다. 1번 쿼리의 경우 1 ≤ i ≤ j ≤ N, -1,000,000 ≤ k ≤ 1,000,000 이고, 2번 쿼리의 경우 1 ≤ x ≤ N이다. 2번 쿼리는 하나 이상 주어진다.
+2번 쿼리가 주어질 때마다 출력한다.
+5 +1 2 3 4 5 +4 +1 3 4 6 +2 3 +1 1 3 -2 +2 3 ++
9 +7 ++
길이가 N인 수열 A1, A2, ..., AN이 주어진다. 이때, 다음 쿼리를 수행하는 프로그램을 작성하시오.
+ +1 i v: Ai = v로 변경한다.2 k i j: k번째 1번 쿼리까지 적용되었을 때, Ai, Ai+1, ..., Aj의 합을 출력한다.첫째 줄에 수열의 크기 N (1 ≤ N ≤ 100,000)이 주어진다.
+ +둘째 줄에는 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 1,000,000)
+ +셋째 줄에는 쿼리의 개수 M (1 ≤ M ≤ 100,000)이 주어진다.
+ +넷째 줄부터 M개의 줄에는 쿼리가 한 줄에 하나씩 주어진다. 1번 쿼리의 경우 1 ≤ i ≤ N, 1 ≤ v ≤ 1,000,000 이고, 2번 쿼리의 경우 1 ≤ i ≤ j ≤ N이고, 0 ≤ k ≤ (쿼리가 주어진 시점까지 있었던 1번 쿼리의 수)이다.
+ +입력으로 주어지는 모든 수는 정수이다.
+모든 2번 쿼리마다 합을 출력한다.
+5 +1 2 3 4 5 +7 +1 2 5 +2 0 1 3 +2 1 1 3 +1 4 2 +2 0 2 5 +2 1 2 5 +2 2 2 5 ++
6 +9 +14 +17 +15 ++
Unbeknownst to Farmer John, Bessie is quite the patron of the arts! Most recently, she has begun studying many of the great poets, and now, she wants to try writing some poetry of her own.
+ +Bessie knows () words, and she wants to arrange them into poems. Bessie has determined the length, in syllables, of each of her words, and she has also assigned them into "rhyme classes". Every word rhymes only with other words in the same rhyme class.
+ +Bessie's poems each include lines (), and each line must consist of () syllables. Moreover, Bessie's poetry must adhere to a specific rhyme scheme.
+ +Bessie would like to know how many different poems she can write that satisfy the given constraints.
+The first line of input contains , , and .
+ +The next lines of input each contain two numbers () and (). This indicates that Bessie knows a word with length (in syllables) in rhyme class .
+ +The final lines of input describe Bessie's desired rhyme scheme and each contain one uppercase letter . All lines corresponding to equal values of must end with words in the same rhyme class. Lines with different values of don't necessarily end with words in different rhyme classes.
+Output the number of poems Bessie can write that satisfy these constraints. Because this number may be very large, please compute it modulo 1,000,000,007.
+In this example, Bessie knows three words. The first two words rhyme, and have lengths of three syllables and four syllables, and the last word is three syllables long and doesn't rhyme with the others. She wants to write a three-line poem such that each line contains ten syllables and the first and last lines rhyme. There are 960 such poems. One example of a valid poem is the following (where 1, 2, and 3 represent the first, second, and third words): 121 123 321
+3 3 10 +3 1 +4 1 +3 2 +A +B +A ++
960 ++
그래프의 정점의 집합을 둘로 분할하여, 각 집합에 속한 정점끼리는 서로 인접하지 않도록 분할할 수 있을 때, 그러한 그래프를 특별히 이분 그래프 (Bipartite Graph) 라 부른다.
+ +그래프가 입력으로 주어졌을 때, 이 그래프가 이분 그래프인지 아닌지 판별하는 프로그램을 작성하시오.
+입력은 여러 개의 테스트 케이스로 구성되어 있는데, 첫째 줄에 테스트 케이스의 개수 K가 주어진다. 각 테스트 케이스의 첫째 줄에는 그래프의 정점의 개수 V와 간선의 개수 E가 빈 칸을 사이에 두고 순서대로 주어진다. 각 정점에는 1부터 V까지 차례로 번호가 붙어 있다. 이어서 둘째 줄부터 E개의 줄에 걸쳐 간선에 대한 정보가 주어지는데, 각 줄에 인접한 두 정점의 번호 u, v (u ≠ v)가 빈 칸을 사이에 두고 주어진다.
+K개의 줄에 걸쳐 입력으로 주어진 그래프가 이분 그래프이면 YES, 아니면 NO를 순서대로 출력한다.
+2 +3 2 +1 3 +2 3 +4 4 +1 2 +2 3 +3 4 +4 2 ++
YES +NO ++
짝수 N을 두 소수의 합으로 나타내는 표현을 골드바흐 파티션이라고 한다. 짝수 N이 주어졌을 때, 골드바흐 파티션의 개수를 구해보자. 두 소수의 순서만 다른 것은 같은 파티션이다.
+첫째 줄에 테스트 케이스의 개수 T (1 ≤ T ≤ 100)가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 정수 N은 짝수이고, 2 < N ≤ 1,000,000을 만족한다.
+각각의 테스트 케이스마다 골드바흐 파티션의 수를 출력한다.
+5 +6 +8 +10 +12 +100 ++
1 +1 +2 +1 +6 ++
월드전자는 노트북을 제조하고 판매하는 회사이다. 노트북 판매 대수에 상관없이 매년 임대료, 재산세, 보험료, 급여 등 A만원의 고정 비용이 들며, 한 대의 노트북을 생산하는 데에는 재료비와 인건비 등 총 B만원의 가변 비용이 든다고 한다.
+ +예를 들어 A=1,000, B=70이라고 하자. 이 경우 노트북을 한 대 생산하는 데는 총 1,070만원이 들며, 열 대 생산하는 데는 총 1,700만원이 든다.
+ +노트북 가격이 C만원으로 책정되었다고 한다. 일반적으로 생산 대수를 늘려 가다 보면 어느 순간 총 수입(판매비용)이 총 비용(=고정비용+가변비용)보다 많아지게 된다. 최초로 총 수입이 총 비용보다 많아져 이익이 발생하는 지점을 손익분기점(BREAK-EVEN POINT)이라고 한다.
+ +A, B, C가 주어졌을 때, 손익분기점을 구하는 프로그램을 작성하시오.
+첫째 줄에 A, B, C가 빈 칸을 사이에 두고 순서대로 주어진다. A, B, C는 21억 이하의 자연수이다.
+첫 번째 줄에 손익분기점 즉 최초로 이익이 발생하는 판매량을 출력한다. 손익분기점이 존재하지 않으면 -1을 출력한다.
+이 문제에서 설명하는 손익분기점은 회계학에서 정의하는 손익분기점과 다를 수 있다.
+1000 70 170 ++
3 2 1 ++
2100000000 9 10 ++
11+
-1 ++
2100000001 ++
낚시왕이 상어 낚시를 하는 곳은 크기가 R×C인 격자판으로 나타낼 수 있다. 격자판의 각 칸은 (r, c)로 나타낼 수 있다. r은 행, c는 열이고, (R, C)는 아래 그림에서 가장 오른쪽 아래에 있는 칸이다. 칸에는 상어가 최대 한 마리 들어있을 수 있다. 상어는 크기와 속도를 가지고 있다.
+ +낚시왕은 처음에 1번 열의 한 칸 왼쪽에 있다. 다음은 1초 동안 일어나는 일이며, 아래 적힌 순서대로 일어난다. 낚시왕은 가장 오른쪽 열의 오른쪽 칸에 이동하면 이동을 멈춘다.
+ +상어는 입력으로 주어진 속도로 이동하고, 속도의 단위는 칸/초이다. 상어가 이동하려고 하는 칸이 격자판의 경계를 넘는 경우에는 방향을 반대로 바꿔서 속력을 유지한채로 이동한다.
+ +왼쪽 그림의 상태에서 1초가 지나면 오른쪽 상태가 된다. 상어가 보고 있는 방향이 속도의 방향, 왼쪽 아래에 적힌 정수는 속력이다. 왼쪽 위에 상어를 구분하기 위해 문자를 적었다.
+ +상어가 이동을 마친 후에 한 칸에 상어가 두 마리 이상 있을 수 있다. 이때는 크기가 가장 큰 상어가 나머지 상어를 모두 잡아먹는다.
+ +낚시왕이 상어 낚시를 하는 격자판의 상태가 주어졌을 때, 낚시왕이 잡은 상어 크기의 합을 구해보자.
+첫째 줄에 격자판의 크기 R, C와 상어의 수 M이 주어진다. (2 ≤ R, C ≤ 100, 0 ≤ M ≤ R×C)
+ +둘째 줄부터 M개의 줄에 상어의 정보가 주어진다. 상어의 정보는 다섯 정수 r, c, s, d, z (1 ≤ r ≤ R, 1 ≤ c ≤ C, 0 ≤ s ≤ 1000, 1 ≤ d ≤ 4, 1 ≤ z ≤ 10000) 로 이루어져 있다. (r, c)는 상어의 위치, s는 속력, d는 이동 방향, z는 크기이다. d가 1인 경우는 위, 2인 경우는 아래, 3인 경우는 오른쪽, 4인 경우는 왼쪽을 의미한다.
+ +두 상어가 같은 크기를 갖는 경우는 없고, 하나의 칸에 둘 이상의 상어가 있는 경우는 없다.
+낚시왕이 잡은 상어 크기의 합을 출력한다.
+4 6 8 +4 1 3 3 8 +1 3 5 2 9 +2 4 8 4 1 +4 5 0 1 4 +3 3 1 2 7 +1 5 8 4 3 +3 6 2 1 2 +2 2 2 3 5 ++
100 100 0 ++
4 5 4 +4 1 3 3 8 +1 3 5 2 9 +2 4 8 4 1 +4 5 0 1 4 ++
2 2 4 +1 1 1 1 1 +2 2 2 2 2 +1 2 1 2 3 +2 1 2 1 4 ++
22 ++
0 ++
22 ++
4 ++
초기에 개의 집합 이 있다. 여기에 합집합 연산과, 두 원소가 같은 집합에 포함되어 있는지를 확인하는 연산을 수행하려고 한다.
+ +집합을 표현하는 프로그램을 작성하시오.
+첫째 줄에 , 이 주어진다. 은 입력으로 주어지는 연산의 개수이다. 다음 개의 줄에는 각각의 연산이 주어진다. 합집합은 의 형태로 입력이 주어진다. 이는 가 포함되어 있는 집합과, 가 포함되어 있는 집합을 합친다는 의미이다. 두 원소가 같은 집합에 포함되어 있는지를 확인하는 연산은 의 형태로 입력이 주어진다. 이는 와 가 같은 집합에 포함되어 있는지를 확인하는 연산이다.
+1로 시작하는 입력에 대해서 와 가 같은 집합에 포함되어 있으면 "YES" 또는 "yes"를, 그렇지 않다면 "NO" 또는 "no"를 한 줄에 하나씩 출력한다.
7 8 +0 1 3 +1 1 7 +0 7 6 +1 7 1 +0 3 7 +0 4 2 +0 1 1 +1 1 1 ++
NO +NO +YES ++
중앙대학교 소프트웨어대학 새내기들을 맞이하게 된 17학번 김영기는 두 학번이라는 차이를 극복하기 위해 새내기들과 친해지려고 노력하고 있다. 그 노력 중 하나는 바로 새내기들과의 술자리에 참여하는 것이다. 그러나 혼자 가기에 민망했던 영기는 동기 보성이를 꼬셔 같이 술자리에 참석했다. 새내기들과 같이 술을 마시게 된 영기와 보성이는 분위기가 가라 앉을 때쯤 The Game of Death라고 불리는 죽음의 술게임을 제안한다.
+ +죽음의 게임의 룰은 간단하다.
+ +게임에 참여하는 N명의 사람들은 원탁에 둘러앉게 된다. 게임을 시작하는 사람은 0번, 그 오른쪽 사람은 1번, 그 오른쪽은 2번, N-1번의 오른쪽 사람은 다시 0번이 된다.
+ +0번이 "신난다! 아싸 재미난다! 아싸 더 게임 오브 데! 스!" 라고 외침과 동시에, 모든 사람들은 각각 테이블에 둘러 앉은 사람들 중 한 명을 지목한다. 그리고 나서 0번은 임의의 양의 정수 M을 외친다.
+ +그 다음, 0번은 "1"이라고 말한다. 이때 "1"이라고 말한 사람이 지목한 사람은 "2"라고 말하고, "2"라고 말한 사람이 지목한 사람은 "3"이라고 말하고, 같은 방식으로 반복해 M까지 말하게 된다. 이때 마지막으로 M이라고 말한 사람이 지목한 사람은 벌주를 마시게 된다.
+ +새내기에게 벌주를 마시게 하기에는 죄책감이 들었던 영기는 동기인 보성이를 공격하기로 결심했다. 게임 참여자들간에 지목을 완료한 상태가 주어질때, 보성이가 벌주를 마시기 위해 영기가 불러야 하는 가장 작은 양의 정수 M을 보성이 몰래 귀띔해 주도록 하자.
+ +김영기는 게임을 제안하였기에 자연스럽게 0번이 된다.
+첫 번째 줄에 게임에 참여하는 사람의 수 N(3 ≤ N ≤ 150)과 보성이의 번호 K(1 ≤ K ≤ N - 1)가 공백을 두고 주어진다.
+ +두번째 줄부터 N줄에 걸쳐 i(0 ≤ i ≤ N - 1)번 사람이 지목하는 사람의 번호 ai(0 ≤ ai ≤ N - 1)가 주어진다. 자기 자신을 지목하는 경우도 존재할 수 있다.
+영기가 말해야 하는 가장 작은 양의 정수 M을 출력한다. 만약 어떤 방법으로도 보성이가 걸리지 않는다면 -1을 출력한다.
+5 3 +1 +3 +2 +1 +4 ++
6 2 +1 +3 +5 +4 +0 +2 ++
2 ++
-1 ++
서버실은 여러 대의 서버 컴퓨터들을 안정적으로 운영할 수 있는 환경을 유지하기 위해 설치된 공간을 말한다.
+ +이 회사의 서버실은 N×N 칸으로 구분되어 있고, 각 칸마다 서버 랙이 있어 컴퓨터를 여러 대 쌓을 수 있다. 서버가 과열되지 않도록 서버실에는 언제나 냉방기가 작동하고 있다. 그런데 회사가 경제적으로 어려움에 처한 나머지, 서버실의 운영 비용을 줄이기 위해 서버실 내의 컴퓨터 중 절반만 정상적으로 관리하기로 하였다.
+ +냉방기에서 나온 차가운 공기는 서버실의 아래쪽부터 서서히 차오른다. 1분마다 컴퓨터 한 대의 높이만큼 방을 채운다. 이 회사의 서버 컴퓨터는 환경에 매우 민감하여 차가운 공기를 받아야만 동작하고 그렇지 못하면 장애를 일으킨다.
+ +서버실의 컴퓨터 중 절반 이상이 켜지려면 몇 분이 필요할까?
+정수 N이 주어진다. (1 ≤ N ≤ 1000)
+ +N×N개의 각 칸에 컴퓨터가 몇 대 쌓여있는지가 입력된다. 한 칸에는 최대 10,000,000대까지 쌓여있을 수 있다.
+몇 분이 지나야 전체 컴퓨터의 절반 이상이 장애를 일으키지 않고 동작할 수 있는지 출력한다.
+5 +1 4 0 2 1 +0 0 5 6 3 +8 4 7 2 0 +7 1 0 5 3 +4 5 7 9 1 ++
3 ++
히스토그램에 대해서 알고 있는가? 히스토그램은 아래와 같은 막대그래프를 말한다.
+ +각 칸의 간격은 일정하고, 높이는 어떤 정수로 주어진다. 위 그림의 경우 높이가 각각 2 1 4 5 1 3 3이다.
+ +이러한 히스토그램의 내부에 가장 넓이가 큰 직사각형을 그리려고 한다. 아래 그림의 빗금 친 부분이 그 예이다. 이 직사각형의 밑변은 항상 히스토그램의 아랫변에 평행하게 그려져야 한다.
+ +주어진 히스토그램에 대해, 가장 큰 직사각형의 넓이를 구하는 프로그램을 작성하시오.
+첫 행에는 N (1 ≤ N ≤ 100,000) 이 주어진다. N은 히스토그램의 가로 칸의 수이다. 다음 N 행에 걸쳐 각 칸의 높이가 왼쪽에서부터 차례대로 주어진다. 각 칸의 높이는 1,000,000,000보다 작거나 같은 자연수 또는 0이다.
+첫째 줄에 가장 큰 직사각형의 넓이를 출력한다. 이 값은 20억을 넘지 않는다.
+7 +2 +1 +4 +5 +1 +3 +3 ++
8+
냉장고에서 맛있게 숙성되고 있는 마카롱은 심심한 나머지 새로운 수 체계를 생각해냈다. 마카롱은 이를 케이크 수라고 이름 붙이고, 다음과 같이 정의했다.
+ +또한 마카롱은 케이크 수들을 비교하기 위해 등호 "="도 새로 정의했다.
아직 끝나지 않았다. 이 케이크 수는 기존의 수와 다르게 매우 특이한 연산을 적용할 수 있다. 연산의 이름은 🍰이고 다음과 같이 정의된다!
+ +a 🍰 b = (a.z + b.x, a.y × b.y, a.x + b.z)
+ +SCCC의 회장 욱제는 케이크 수를 이용해 문제를 만들기로 했다. 마카롱과 욱제를 기쁘게 하기 위해서 문제를 풀어주자! 욱제가 만든 문제는 다음과 같다.
+ +케이크 수 a, c 가 주어졌을 때, 다음을 만족하는 케이크 수 b를 계산하자.
+ +a 🍰 b = c
+ +a, c는 b가 항상 유일하게 존재하도록 주어진다.
+첫째 줄에 케이크 수 a를 구성하는 자연수 a.x, a.y, a.z 가 차례대로 주어진다. (1 ≤ a.x, a.y, a.z ≤ 100)
+ +둘째 줄에 케이크 수 c를 구성하는 자연수 c.x, c.y, c.z 가 차례대로 주어진다. (1 ≤ c.x, c.y, c.z ≤ 100)
+문제의 조건을 만족하는 b.x, b.y, b.z를 하나의 공백을 사이에 두고 차례대로 출력한다.
+ +b는 1 ≤ b.x, b.y, b.z ≤ 100 이고 반드시 유일하게 존재한다.
+15 16 17 +19 32 90 ++
15 8 15 +22 8 22 ++
2 2 75 ++
7 1 7 ++
선물 포장 공장을 말아먹은 욱제는 계곡에서 백숙을 파느라 학교에 자주 가지 못한다. 하지만 월클의 인생은 피곤한 법! 욱제는 지금처럼 힘든 시기에도 자신을 기다리는 5조5억명의 열렬한 팬들을 위해 가끔씩 학교에 가 줘야 한다. 욱제는 백숙이 끓는 걸 지켜봐야 해서 가게를 오래 비울 수 없다. 그래서 욱제는 한 번 학교에 간 뒤 최소 시간동안 머물다가 모든 팬들과 한 번씩 인사를 하고 학교를 떠나려고 한다.
+ +욱제는 임의의 시각에 학교에 오거나 학교를 떠날 수 있고, 단 한 번의 왕복만 한다. 동시에 여러 팬들에게 인사를 끝낼 수도 있다. 욱제는 잘생겨서 인사하면 팬들이 심쿵사로 바로 쓰러지기 때문에 인사를 하는데 소요되는 시간은 0이라고 하자.
+ +<그림 1>
+ +예를 들어 3명의 팬 A, B, C가 학교에 머무르는 시간이 <그림 1>과 같다고 하자. 이 경우 시각 2에 3명의 팬이 모두 학교에 있으므로, 욱제는 시각 2에 학교에 와서 3명에게 동시에 인사를 하고 바로 가게로 돌아갈 수 있다. 시각 3이나 4도 마찬가지이다. 이때 욱제가 학교에 머무는 시간의 총합은 0이다.
+ +<그림 2>
+ +다른 예로 2명의 팬 A와 B가 학교에 있는 시간이 <그림 2>와 같다고 하자. 욱제는 시각 4부터 시각 5까지 학교에 머물면서 시각 4에 A와, 시각 5에 B와 인사를 하고 학교를 떠날 수 있다. 이때 욱제가 학교에 머무는 시간은 1이다.
+ +백숙집 주방 이모 효빈이는 N명의 팬들이 학교에 머무르는 시간 [s, e]들을 몰래 조사했다. 효빈이는 욱제가 학교에 머무르는 시간을 계산해서 그 시간동안 땡땡이를 치기로 했다. 효빈이와 함께 욱제가 학교에 머무르는 최소의 시간을 계산해 보자!
+첫째 줄에 욱제의 열렬한 팬의 수 N이 주어진다. (1 ≤ N ≤ 100,000)
+ +둘째 줄부터 N개의 줄에 걸쳐, 각 줄에 정수 si, ei (1 ≤ si ≤ ei ≤ 100,000)가 순서대로 주어진다. 이는 i번째 팬이 학교에 있는 시간 [si, ei]을 의미한다.
+욱제가 학교에 머물러야 하는 최소의 시간을 출력한다.
+3 +2 5 +1 4 +2 4 ++
2 +1 4 +5 6 ++
0 ++
1 ++
인하대학교 후문 뒤쪽에는 어두운 굴다리가 있다. 겁쟁이 상빈이는 길이 조금이라도 어둡다면 가지 않는다. 따라서 굴다리로 가면 최단거리로 집까지 갈수 있지만, 굴다리는 어둡기 때문에 빙빙 돌아서 집으로 간다. 안타깝게 여긴 인식이는 굴다리 모든 길 0~N을 밝히게 가로등을 설치해 달라고 인천광역시에 민원을 넣었다. 인천광역시에서 가로등을 설치할 개수 M과 각 가로등의 위치 x들의 결정을 끝냈다. 그리고 각 가로등은 높이만큼 주위를 비출 수 있다. 하지만 갑자기 예산이 부족해진 인천광역시는 가로등의 높이가 높을수록 가격이 비싸지기 때문에 최소한의 높이로 굴다리 모든 길 0~N을 밝히고자 한다. 최소한의 예산이 들 높이를 구하자. 단 가로등은 모두 높이가 같아야 하고, 정수이다.
+ +다음 그림을 보자.
+ +가로등의 높이가 H라면 왼쪽으로 H, 오른쪽으로 H만큼 주위를 비춘다.
+ +다음 그림은 예제1에 대한 설명이다.
+ +가로등의 높이가 1일 경우 0~1사이의 길이 어둡기 때문에 상빈이는 지나가지 못한다.
+ +아래 그림처럼 높이가 2일 경우 0~5의 모든 길이 밝기 때문에 상빈이는 지나갈 수 있다.
+ +첫 번째 줄에 굴다리의 길이 N 이 주어진다. (1 ≤ N ≤ 100,000)
+ +두 번째 줄에 가로등의 개수 M 이 주어진다. (1 ≤ M ≤ N)
+ +다음 줄에 M 개의 설치할 수 있는 가로등의 위치 x 가 주어진다. (0 ≤ x ≤ N)
+ +가로등의 위치 x는 오름차순으로 입력받으며 가로등의 위치는 중복되지 않으며, 정수이다.
+굴다리의 길이 N을 모두 비추기 위한 가로등의 최소 높이를 출력한다.
+5 +2 +2 4 ++
3 +1 +0 ++
2 ++
3 ++
크기가 N인 수열 A = A1, A2, ..., AN이 있다. 수열의 각 원소 Ai에 대해서 오큰수 NGE(i)를 구하려고 한다. Ai의 오큰수는 오른쪽에 있으면서 Ai보다 큰 수 중에서 가장 왼쪽에 있는 수를 의미한다. 그러한 수가 없는 경우에 오큰수는 -1이다.
+ +예를 들어, A = [3, 5, 2, 7]인 경우 NGE(1) = 5, NGE(2) = 7, NGE(3) = 7, NGE(4) = -1이다. A = [9, 5, 4, 8]인 경우에는 NGE(1) = -1, NGE(2) = 8, NGE(3) = 8, NGE(4) = -1이다.
+첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에 수열 A의 원소 A1, A2, ..., AN (1 ≤ Ai ≤ 1,000,000)이 주어진다.
+총 N개의 수 NGE(1), NGE(2), ..., NGE(N)을 공백으로 구분해 출력한다.
+4 +3 5 2 7 ++
4 +9 5 4 8 ++
5 7 7 -1 ++
-1 8 8 -1 ++
혜아는 답답한 3차원 세계를 벗어나 자유로운 2차원 좌표계 위로 집을 옮길 계획이다. 이 좌표계에는 그 어떤 위치에도 주거할 수 있는 시설이 있기 때문에 혜아는 두 실수 Hx, Hy 를 골라 좌표 (Hx, Hy)로 이사할 것이다.
+ +이사할 집의 위치를 결정하기 위해 절대적으로 중요한 것은 편의시설이 집으로부터 얼마나 멀리 떨어져 있느냐는 점이다. 좌표계에는 N개의 편의시설이 있는데, 좌표계의 주거지역 정책에 따라 x, y 좌표가 모두 정수인 곳에만 편의시설이 있다.
+ +혜아는 N개의 편의시설로 이동하는 데 드는 거리의 평균값이 최소가 되는 좌표로 이사를 가고 싶었지만, 이런 좌표를 찾는 것이 너무 어렵다는 것을 깨달았다. 그래서 그나마 좌표를 찾기 쉽도록 가장 가까운 편의시설까지의 거리와 가장 먼 편의시설까지의 거리의 평균이 최소가 되는 좌표로 이사하려고 한다. 이 좌표계에서 거리는 유클리드 거리를 사용하여, 두 좌표 (Ax, Ay)와 (Bx, By) 사이의 거리는 으로 나타난다고 할 때, 혜아를 도와 가능한 위치 중 하나를 구해 주는 프로그램을 작성해보자.
+첫 번째 줄에 편의시설의 개수 N(1 ≤ N ≤ 103)이 주어진다.
+ +다음 N개의 줄의 각 줄에는 두 정수 x와 y(-104 ≤ x, y ≤ 104)가 공백 하나를 사이에 두고 주어진다. 이는 (x, y)에 편의시설이 하나 존재한다는 뜻이다.
+첫 번째 줄에 혜아가 이사할 곳의 좌표 (Hx, Hy)를 나타내는 두 실수 Hx, Hy를 공백 하나로 구분하여 출력한다. 가장 가까운 편의시설까지의 거리와 가장 먼 편의시설까지의 거리의 평균을 정답과 비교했을 때 절대오차 혹은 상대오차가 10-6 이하면 정답으로 인정한다.
+5 +-4 1 +0 -3 +0 1 +2 2 +4 -3 ++
0.666666666667 0.333333333333 ++
2차원 좌표 평면 위의 두 선분 L1, L2가 주어졌을 때, 두 선분이 교차하는지 아닌지 구해보자.
+ +L1의 양 끝 점은 (x1, y1), (x2, y2), L2의 양 끝 점은 (x3, y3), (x4, y4)이다.
+첫째 줄에 L1의 양 끝 점 x1, y1, x2, y2가, 둘째 줄에 L2의 양 끝 점 x3, y3, x4, y4가 주어진다. 세 점이 일직선 위에 있는 경우는 없다.
+L1과 L2가 교차하면 1, 아니면 0을 출력한다.
+1 1 5 5 +1 5 5 1 ++
1 1 5 5 +6 10 10 6 ++
1 ++
0 ++
2차원 좌표 평면 위의 두 선분 L1, L2가 주어졌을 때, 두 선분이 교차하는지 아닌지 구해보자. 한 선분의 끝 점이 다른 선분이나 끝 점 위에 있는 것도 교차하는 것이다.
+ +L1의 양 끝 점은 (x1, y1), (x2, y2), L2의 양 끝 점은 (x3, y3), (x4, y4)이다.
+첫째 줄에 L1의 양 끝 점 x1, y1, x2, y2가, 둘째 줄에 L2의 양 끝 점 x3, y3, x4, y4가 주어진다.
+L1과 L2가 교차하면 1, 아니면 0을 출력한다.
+1 1 5 5 +1 5 5 1 ++
1 1 5 5 +6 10 10 6 ++
1 1 5 5 +5 5 1 1 ++
1 1 5 5 +3 3 5 5 ++
1 1 5 5 +3 3 1 3 ++
1 1 5 5 +5 5 9 9 ++
1 1 5 5 +6 6 9 9 ++
1 1 5 5 +5 5 1 5 ++
1 1 5 5 +6 6 1 5 ++
1 ++
0 ++
1 ++
1 ++
1 ++
1 ++
0 ++
1 ++
0 ++
방학동안 기숙사에 홀로 남겨진 인호는 우울하고 고독하다. 다행히 인호는 M일의 방학 동안 N개의 약속이 잡혀있기에, 약속 날짜의 효율적인 배치를 통해 방학 내에 느낄 우울함의 합을 최소화하려고 한다.
+ +인호의 기분은 정수로 표현 가능하며, 기분이 0 미만인 날에 (기분)2 만큼 우울함을 느낀다. 인호의 기분은 오늘 약속이 있다면 약속의 기대행복 값인 Hi이며, 약속이 없으면 어제의 기분에서 1을 뺀 값이다.
+ +인호는 하루에 최대 한 개의 약속을 소화할 수 있으며, N개의 약속들의 순서는 주어진 순서대로여야 한다.
+ +방학은 내일부터 시작이며, 오늘 인호의 기분은 0일 때, 약속을 적절히 배치하여 인호가 방학 동안 느낄 우울함의 합을 최소화하자.
+첫 번째 줄에는 인호의 약속 개수인 음이 아닌 정수 N과 방학의 일수인 자연수 M이 공백으로 구분되어 주어진다. (0 ≤ N < M < 1000)
+ +두 번째 줄에는 N개의 정수 H1, H2, ..., HN이 공백으로 구분되어 주어진다. Hi는 i 번째 약속의 기대행복 값이다. (1 ≤ Hi < 100)
+첫 번째 줄에 인호가 방학 동안 느낄 우울함의 합의 최솟값을 출력한다.
+3 10 +2 2 1 ++
2 ++
두 자연수 A와 B가 있을 때, A = BC를 만족하는 자연수 C를 A의 약수라고 한다. 예를 들어, 2의 약수는 1, 2가 있고, 24의 약수는 1, 2, 3, 4, 6, 8, 12, 24가 있다. 자연수 A의 약수의 합은 A의 모든 약수를 더한 값이고, f(A)로 표현한다. x보다 작거나 같은 모든 자연수 y의 f(y)값을 더한 값은 g(x)로 표현한다.
+ +자연수 N이 주어졌을 때, g(N)을 구해보자.
+첫째 줄에 테스트 케이스의 개수 T(1 ≤ T ≤ 100,000)가 주어진다. 둘째 줄부터 테스트 케이스가 한 줄에 하나씩 주어지며 자연수 N(1 ≤ N ≤ 1,000,000)이 주어진다.
+각각의 테스트 케이스마다, 한 줄에 하나씩 g(N)를 출력한다.
+5 +1 +2 +10 +70 +10000 ++
1 +4 +87 +4065 +82256014 ++
2019년 1학기가 시작되고 많은 사람을 만나며 밥과 술에 탕진을 해버린 영기는 2학기에 탕진할 돈을 마련하기 위해 중앙대 근처의 고급 레스토랑, "정식당"에서 알바를 하게 되었다.
+ +정식당의 사장 정우는 새로 들어온 알바생 영기를 위해 정식당만의 특별한 음식 주문법을 알려주려고 한다.
+ +정식당에는 다양한 메뉴들이 있지만 크게 3가지로 나눌 수 있는데 A개의 "일반메뉴", B개의 "특별메뉴", C개의 "서비스메뉴"로 나뉘어져 있다. 일반메뉴는 자유롭게 주문할 수 있으나 특별메뉴와 서비스메뉴는 주문할 때 다음의 제약이 있다.
+ +다양한 메뉴와 특별한 메뉴 주문법에 영기는 알바를 하면서 혼돈이 오기 시작했다. 받아서는 안될 주문을 받기도 하며 사장님에게 된통 혼나기도 하며 심지어는 자기 발에 걸려 넘어지기까지 했다.
+ +가게를 찾아온 손님들이 주문하는 것이 옳은 주문인지 아닌지 헷갈려하는 영기는 우리에게 도움을 요청했다. 영기가 주문을 잘 받아올 수 있도록 우리가 도와주자.
+첫째 줄에 50,000 이하의 양의 정수 A, B, C가 공백을 두고 주어진다.
+ +두번째 줄부터 A줄에 걸쳐 일반메뉴의 이름과 가격이 공백을 두고 주어진다. 그 다음 B줄에 걸쳐 특별메뉴의 이름과 가격이 공백을 두고 주어진다. 그 다음 C줄에 걸쳐 서비스메뉴의 이름이 주어진다.
+ +그 다음 줄에서 손님이 주문하는 음식의 수를 나타내는 150,000 이하의 자연수 N이 주어진다.
+ +그 다음 N줄에 걸쳐 손님이 주문하는 음식의 이름들이 주어진다. 같은 음식을 여러번 주문할 수도 있으며 메뉴에 있는 음식만 주문한다.
+ +일반메뉴와 스페셜메뉴의 가격은 1,000,000 이하의 양의 정수이며 메뉴의 이름은 20자 이하의 알파벳 소문자로만 이루어져 있으며 일반메뉴, 특별메뉴, 그리고 서비스메뉴들의 이름은 모두 다르다
+영기가 받은 주문이 옳은 주문이면 "Okay"를, 그렇지 않은 주문이라면 "No"를 출력하자. 따옴표는 출력하지 않는다.
이 문제는 픽션입니다. 문제에 나오는 인물, 사건, 배경은 실제와 아무런 관련이 없습니다.
+3 2 3 +noodle 10000 +tteokbokki 5000 +sundae 7000 +cutlet 12000 +friedrice 8000 +dumpling +potatochips +fishcake +6 +noodle +noodle +cutlet +friedrice +cutlet +potatochips ++
Okay ++
방향그래프가 주어지면 주어진 시작점에서 다른 모든 정점으로의 최단 경로를 구하는 프로그램을 작성하시오. 단, 모든 간선의 가중치는 10 이하의 자연수이다.
+첫째 줄에 정점의 개수 V와 간선의 개수 E가 주어진다. (1 ≤ V ≤ 20,000, 1 ≤ E ≤ 300,000) 모든 정점에는 1부터 V까지 번호가 매겨져 있다고 가정한다. 둘째 줄에는 시작 정점의 번호 K(1 ≤ K ≤ V)가 주어진다. 셋째 줄부터 E개의 줄에 걸쳐 각 간선을 나타내는 세 개의 정수 (u, v, w)가 순서대로 주어진다. 이는 u에서 v로 가는 가중치 w인 간선이 존재한다는 뜻이다. u와 v는 서로 다르며 w는 10 이하의 자연수이다. 서로 다른 두 정점 사이에 여러 개의 간선이 존재할 수도 있음에 유의한다.
+첫째 줄부터 V개의 줄에 걸쳐, i번째 줄에 i번 정점으로의 최단 경로의 경로값을 출력한다. 시작점 자신은 0으로 출력하고, 경로가 존재하지 않는 경우에는 INF를 출력하면 된다.
+5 6 +1 +5 1 1 +1 2 2 +1 3 3 +2 3 4 +2 4 5 +3 4 6 ++
0 +2 +3 +7 +INF ++
월드피자 원주 지점에서 N개의 피자 반죽을 오븐에 넣고 구우려고 한다. 그런데, 월드피자에서 만드는 피자 반죽은 지름이 제각각이다. 그런가하면, 월드피자에서 사용하는 오븐의 모양도 몹시 오묘하다. 이 오븐은 깊은 관처럼 생겼는데, 관의 지름이 깊이에 따라 들쭉날쭉하게 변한다. 아래는 오븐의 단면 예시이다.
+ +피자 반죽은 완성되는 순서대로 오븐에 들어간다. 이렇게 N개의 피자가 오븐에 모두 들어가고 나면, 맨 위의 피자가 얼마나 깊이 들어가 있는지가 궁금하다. 이를 알아내는 프로그램을 작성하시오.
+첫째 줄에 오븐의 깊이 D와 피자 반죽의 개수 N이 공백을 사이에 두고 주어진다. (1 ≤ D, N ≤ 300,000) 둘째 줄에는 오븐의 최상단부터 시작하여 깊이에 따른 오븐의 지름이 차례대로 주어진다. 셋째 줄에는 피자 반죽이 완성되는 순서대로, 그 각각의 지름이 주어진다. 오븐의 지름이나 피자 반죽의 지름은 10억 이하의 자연수이다.
+첫째 줄에, 마지막 피자 반죽의 위치를 출력한다. 오븐의 최상단이 1이고, 최하단 가장 깊은 곳이 D이 된다. 만약 피자가 모두 오븐에 들어가지 않는다면, 0을 출력한다.
+7 3 +5 6 4 3 6 2 3 +3 2 5 ++
2 ++
민수는 같은 반 친구들과 369게임을 하고 있다. 369게임은 여러 명이 원형으로 둘러 앉아 시작 위치의 사람이 1을 외치며 시작된다. 이후 시계방향으로 돌아가며 2, 3, 4와 같이 1씩 증가된 수가 자기 수가 된다. 순서대로 돌아오는 자기 수에 3, 6, 혹은 9가 포함되어 있지 않다면 그 수를 말해야 하며, 3, 6, 혹은 9가 포함되어 있으면 그 개수만큼 박수를 쳐야 한다. 이 규칙을 지키지 못하면 게임이 종료된다.
+ +민수는 369게임이 N까지 규칙을 지키며 진행된다면 그때까지의 들은 박수의 횟수 가 총 몇 번인지 궁금했다. 예를 들어 N = 14라면, 3, 6, 9, 13에서 각각 한 번의 박 수를 치게 되므로 총 4회의 박수를 듣게 될 것이다. N = 36이라면 3, 6, 9, 13, 16. 19. 23. 26. 29. 30. 31. 32. 33. 34. 35, 36에서 박수를 치게 되는데 33, 36에서는 각 각 두 번 박수를 쳐야 하므로 총 18회가 된다. 1 이상의 정수 N에 대하여 369게임을 N까지 규칙을 지키며 진행된다면 그때까지 듣게 되는 박수의 총 횟수를 계산하여 출력하는 프로그램을 작성하시오.
+첫 번째 줄에 정수 N이 주어진다 (1 ≤ N ≤ 106).
+박수의 총 횟수를 정수로 출력한다.
+14 ++
36 ++
4 ++
18 ++
김진영이 듣도 못한 사람의 명단과, 보도 못한 사람의 명단이 주어질 때, 듣도 보도 못한 사람의 명단을 구하는 프로그램을 작성하시오.
+첫째 줄에 듣도 못한 사람의 수 N, 보도 못한 사람의 수 M이 주어진다. 이어서 둘째 줄부터 N개의 줄에 걸쳐 듣도 못한 사람의 이름과, N+2째 줄부터 보도 못한 사람의 이름이 순서대로 주어진다. 이름은 띄어쓰기 없이 알파벳 소문자로만 이루어지며, 그 길이는 20 이하이다. N, M은 500,000 이하의 자연수이다.
+ +듣도 못한 사람의 명단에는 중복되는 이름이 없으며, 보도 못한 사람의 명단도 마찬가지이다.
+듣보잡의 수와 그 명단을 사전순으로 출력한다.
+3 4 +ohhenrie +charlie +baesangwook +obama +baesangwook +ohhenrie +clinton ++
2 +baesangwook +ohhenrie ++
민오는 1번부터 N번까지 총 N개의 문제로 되어 있는 문제집을 풀려고 한다. 문제는 난이도 순서로 출제되어 있다. 즉 1번 문제가 가장 쉬운 문제이고 N번 문제가 가장 어려운 문제가 된다.
+ +어떤 문제부터 풀까 고민하면서 문제를 훑어보던 민오는, 몇몇 문제들 사이에는 '먼저 푸는 것이 좋은 문제'가 있다는 것을 알게 되었다. 예를 들어 1번 문제를 풀고 나면 4번 문제가 쉽게 풀린다거나 하는 식이다. 민오는 다음의 세 가지 조건에 따라 문제를 풀 순서를 정하기로 하였다.
+ +예를 들어서 네 개의 문제가 있다고 하자. 4번 문제는 2번 문제보다 먼저 푸는 것이 좋고, 3번 문제는 1번 문제보다 먼저 푸는 것이 좋다고 하자. 만일 4-3-2-1의 순서로 문제를 풀게 되면 조건 1과 조건 2를 만족한다. 하지만 조건 3을 만족하지 않는다. 4보다 3을 충분히 먼저 풀 수 있기 때문이다. 따라서 조건 3을 만족하는 문제를 풀 순서는 3-1-4-2가 된다.
+ +문제의 개수와 먼저 푸는 것이 좋은 문제에 대한 정보가 주어졌을 때, 주어진 조건을 만족하면서 민오가 풀 문제의 순서를 결정해 주는 프로그램을 작성하시오.
+첫째 줄에 문제의 수 N(1 ≤ N ≤ 32,000)과 먼저 푸는 것이 좋은 문제에 대한 정보의 개수 M(1 ≤ M ≤ 100,000)이 주어진다. 둘째 줄부터 M개의 줄에 걸쳐 두 정수의 순서쌍 A,B가 빈칸을 사이에 두고 주어진다. 이는 A번 문제는 B번 문제보다 먼저 푸는 것이 좋다는 의미이다.
+ +항상 문제를 모두 풀 수 있는 경우만 입력으로 주어진다.
+첫째 줄에 문제 번호를 나타내는 1 이상 N 이하의 정수들을 민오가 풀어야 하는 순서대로 빈칸을 사이에 두고 출력한다.
+4 2 +4 2 +3 1 ++
3 1 4 2 ++
병든 나이트가 N × M 크기 체스판의 가장 왼쪽아래 칸에 위치해 있다. 병든 나이트는 건강한 보통 체스의 나이트와 다르게 4가지로만 움직일 수 있다.
+ +병든 나이트는 여행을 시작하려고 하고, 여행을 하면서 방문한 칸의 수를 최대로 하려고 한다. 병든 나이트의 이동 횟수가 4번보다 적지 않다면, 이동 방법을 모두 한 번씩 사용해야 한다. 이동 횟수가 4번보다 적은 경우(방문한 칸이 5개 미만)에는 이동 방법에 대한 제약이 없다.
+ +체스판의 크기가 주어졌을 때, 병든 나이트가 여행에서 방문할 수 있는 칸의 최대 개수를 구해보자.
+첫째 줄에 체스판의 세로 길이 N와 가로 길이 M이 주어진다. N과 M은 2,000,000,000보다 작거나 같은 자연수이다.
+병든 나이트가 여행에서 방문할 수 있는 칸의 개수중 최댓값을 출력한다.
+100 50 ++
1 1 ++
17 5 ++
2 4 ++
20 4 ++
48 ++
1 ++
4 ++
2 ++
4 ++
대학원생인 형욱이는 연구실에 출근할 때 주로 지하철을 이용한다. 지하철은 A와 B, 두 개의 회사에서 운영하고 있다. 두 회사는 경쟁사 관계로 사람들이 상대 회사의 지하철을 이용하는 것을 매우 싫어한다. 그래서 A와 B는 모두 상대 회사의 지하철로 환승할 때 마다 비싼 요금을 받고 있다.
+ +형욱이는 가난한 대학원생이기 때문에 돈을 아끼는 것이 가장 중요하다. 형욱이에게 최적의 출근경로를 찾아주자. 최적의 출근 경로란 환승 횟수를 최소로 하는 경로 중 소요시간이 가장 짧은 경로이다. 여기에서의 환승은 이동하면서 지하철역을 운영하는 회사가 바뀔 때 마다 환승 1회로 계산한다.
+ +위의 그림에서 원은 지하철역을 의미하고 선들은 지하철역들이 연결되어 있는 지를 나타낸다. 흰색으로 표시된 지하철역은 A회사가 운영하는 지하철역이고 검은색으로 표시된 역은 B회사가 운영하는 지하철역이다. 이 때 붉게 표시된 경로로 이동하는 것이 환승 2회로 가장 적게 환승하면서 시간이 가장 짧은 경로이다.
+첫째 줄에 지하철역의 수 N과 도착지의 번호 M이 공백을 사이에 두고 정수로 주어진다. 지하철역은 순서대로 0 부터 N-1까지 존재하며 출발지는 항상 0 이다. (2 ≤ N ≤ 1000, 0 < M < 1000)
+ +그 다음 N 줄에 걸쳐 각각의 지하철역을 운영하는 회사의 정보 Ci(0 ≤ i < N)가 0 또는 1로 주어진다. 0은 A회사를 뜻하고 1은 B회사를 뜻한다.
+ +그 다음 N 줄은 지하철역간의 연결 상태 Eij(0 ≤ Eij ≤ 1000)가 정수로 주어진다. Eij가 0인 경우 i번째 역과 j번째 역이 연결되어 있지 않음을 의미하고 0보다 클 경우 두 역이 연결되어 있으며 이동시간이 Eij라는 것을 의미한다.
+최적의 경로를 이용할 때 환승 횟수와 총 소요 시간을 공백으로 구분하여 출력한다.
+ +또한 출발지와 도착지는 무조건 연결되어 있음이 보장된다.
+6 3 +0 +1 +1 +0 +1 +0 +0 3 1 0 10 0 +3 0 0 15 0 0 +1 0 0 0 0 1 +0 15 0 0 10 0 +10 0 0 10 0 1 +0 0 1 0 1 0 ++
2 18 ++
서양 장기인 체스에는 대각선 방향으로 움직일 수 있는 비숍(bishop)이 있다. < 그림 1 >과 같은 정사각형 체스판 위에 B라고 표시된 곳에 비숍이 있을 때 비숍은 대각선 방향으로 움직여 O로 표시된 칸에 있는 다른 말을 잡을 수 있다.
+ +< 그림 1 >
+ +그런데 체스판 위에는 비숍이 놓일 수 없는 곳이 있다. < 그림 2 >에서 체스판에 색칠된 부분은 비숍이 놓일 수 없다고 하자. 이와 같은 체스판에 서로가 서로를 잡을 수 없도록 하면서 비숍을 놓는다면 < 그림 3 >과 같이 최대 7개의 비숍을 놓을 수 있다. 색칠된 부분에는 비숍이 놓일 수 없지만 지나갈 수는 있다.
+ +< 그림 2 >
+ +< 그림 3 >
+ +정사각형 체스판의 한 변에 놓인 칸의 개수를 체스판의 크기라고 한다. 체스판의 크기와 체스판 각 칸에 비숍을 놓을 수 있는지 없는지에 대한 정보가 주어질 때, 서로가 서로를 잡을 수 없는 위치에 놓을 수 있는 비숍의 최대 개수를 구하는 프로그램을 작성하시오.
+첫째 줄에 체스판의 크기가 주어진다. 체스판의 크기는 10이하의 자연수이다. 둘째 줄부터 아래의 예와 같이 체스판의 각 칸에 비숍을 놓을 수 있는지 없는지에 대한 정보가 체스판 한 줄 단위로 한 줄씩 주어진다. 비숍을 놓을 수 있는 곳에는 1, 비숍을 놓을 수 없는 곳에는 0이 빈칸을 사이에 두고 주어진다.
+첫째 줄에 주어진 체스판 위에 놓을 수 있는 비숍의 최대 개수를 출력한다.
+5 +1 1 0 1 1 +0 1 0 0 0 +1 0 1 0 1 +1 0 0 0 0 +1 0 1 1 1 ++
7 ++
10,000 이하의 자연수로 이루어진 길이 N짜리 수열이 주어진다. 이 수열에서 연속된 수들의 부분합 중에 그 합이 S 이상이 되는 것 중, 가장 짧은 것의 길이를 구하는 프로그램을 작성하시오.
+첫째 줄에 N (10 ≤ N < 100,000)과 S (0 < S ≤ 100,000,000)가 주어진다. 둘째 줄에는 수열이 주어진다. 수열의 각 원소는 공백으로 구분되어져 있으며, 10,000이하의 자연수이다.
+첫째 줄에 구하고자 하는 최소의 길이를 출력한다. 만일 그러한 합을 만드는 것이 불가능하다면 0을 출력하면 된다.
+10 15 +5 1 3 5 10 7 4 9 2 8 ++
2 ++
ICPC Bangkok Regional에 참가하기 위해 수완나품 국제공항에 막 도착한 팀 레드시프트 일행은 눈을 믿을 수 없었다. 공항의 대형 스크린에 올해가 2562년이라고 적혀 있던 것이었다.
+ +불교 국가인 태국은 불멸기원(佛滅紀元), 즉 석가모니가 열반한 해를 기준으로 연도를 세는 불기를 사용한다. 반면, 우리나라는 서기 연도를 사용하고 있다. 불기 연도가 주어질 때 이를 서기 연도로 바꿔 주는 프로그램을 작성하시오.
+서기 연도를 알아보고 싶은 불기 연도 y가 주어진다. (1000 ≤ y ≤ 3000)
+불기 연도를 서기 연도로 변환한 결과를 출력한다.
+2541 ++
1998 ++
solved.ac는 Sogang ICPC Team 학회원들의 알고리즘 공부에 도움을 주고자 만든 서비스이다. 지금은 서강대뿐만 아니라 수많은 사람들이 solved.ac의 도움을 받아 알고리즘 공부를 하고 있다.
+ +ICPC Team은 백준 온라인 저지에서 문제풀이를 연습하는데, 백준 온라인 저지의 문제들에는 난이도 표기가 없어서, 지금까지는 다양한 문제를 풀어 보고 싶더라도 난이도를 가늠하기 어려워 무슨 문제를 풀어야 할지 판단하기 곤란했기 때문에 solved.ac가 만들어졌다. solved.ac가 생긴 이후 전국에서 200명 이상의 기여자 분들께서 소중한 난이도 의견을 공유해 주셨고, 지금은 약 7,000문제에 난이도 표기가 붙게 되었다.
+ +어떤 문제의 난이도는 그 문제를 푼 사람들이 제출한 난이도 의견을 바탕으로 결정한다. 난이도 의견은 그 사용자가 생각한 난이도를 의미하는 정수 하나로 주어진다. solved.ac가 사용자들의 의견을 바탕으로 난이도를 결정하는 방식은 다음과 같다.
+ +절사평균이란 극단적인 값들이 평균을 왜곡하는 것을 막기 위해 가장 큰 값들과 가장 작은 값들을 제외하고 평균을 내는 것을 말한다. 30% 절사평균의 경우 위에서 15%, 아래에서 15%를 각각 제외하고 평균을 계산한다. 따라서 20명이 투표했다면, 가장 높은 난이도에 투표한 3명과 가장 낮은 난이도에 투표한 3명의 투표는 평균 계산에 반영하지 않는다는 것이다.
+ +제외되는 사람의 수는 위, 아래에서 각각 반올림한다. 25명이 투표한 경우 위, 아래에서 각각 3.75명을 제외해야 하는데, 이 경우 반올림해 4명씩을 제외한다.
+ +마지막으로, 계산된 평균도 정수로 반올림된다. 절사평균이 16.7이었다면 최종 난이도는 17이 된다.
+ +사용자들이 어떤 문제에 제출한 난이도 의견 목록이 주어질 때, solved.ac가 결정한 문제의 난이도를 계산하는 프로그램을 작성하시오.
+첫 번째 줄에 난이도 의견의 개수 n이 주어진다. (0 ≤ n ≤ 3 × 105)
+ +이후 두 번째 줄부터 1 + n번째 줄까지 사용자들이 제출한 난이도 의견 n개가 한 줄에 하나씩 주어진다. 모든 난이도 의견은 1 이상 30 이하이다.
+solved.ac가 계산한 문제의 난이도를 출력한다.
+5 +1 +5 +5 +7 +8 ++
10 +1 +13 +12 +15 +3 +16 +13 +12 +14 +15 ++
6 ++
13 ++
N(3≤N≤999, N은 홀수)명의 학생들이 원 모양으로 둘러앉아 있다. 각 학생들은 모두 몇 개의 사탕(≤100,000)을 가지고 있는데 그 개수는 사람마다 다를 수 있고, 사탕을 아예 가지고 있지 않을 수도 있다. 물론 사탕의 개수는 음이 아닌 정수이다.
+ +편의상 학생들에게 번호를 매기는데, 반시계 방향으로 1번 학생, 2번 학생, …, N번 학생으로 번호를 매겼다. 1번 학생 오른쪽엔 2번 학생, 2번 학생 오른쪽엔 3번 학생이 앉아 있는 것이고, 마지막 N번 학생 오른쪽엔 1번 학생이 앉아 있게 된다.
+ +우리는 인접한 두 학생이 가지고 있는 사탕의 수의 합을 안다. 즉 1번 학생과 2번 학생이 가지고 있는 사탕의 수의 합, 2번 학생과 3번 학생이 가지고 있는 사탕의 수의 합, …, N-1번 학생과 N번 학생이 가지고 있는 사탕의 수의 합, 마지막으로 N번 학생과 1번 학생의 가지고 있는 사탕의 수의 합을 안다. 이때, 각 학생이 가지고 있는 사탕의 수를 구하는 프로그램을 작성하시오.
+첫째 줄에 N(3 ≤ N ≤ 999, N은 홀수)이 주어진다. 둘째 줄부터 N개의 줄에 걸쳐 1번 학생과 2번 학생이 가지고 있는 사탕의 수의 합, 2번 학생과 3번 학생이 가지고 있는 사탕의 수의 합, …, N-1번 학생과 N번 학생이 가지고 있는 사탕의 수의 합, 마지막으로 N번 학생과 1번 학생의 가지고 있는 사탕의 수의 합이 순서대로 주어진다.
+첫째 줄부터 N개의 줄에 걸쳐 1번 학생이 가지고 있는 사탕의 수, 2번 학생이 가지고 있는 사탕의 수, …, N번 학생이 가지고 있는 사탕의 수를 순서대로 출력한다. 출력하는 수는 음이 아닌 정수들이어야 하며, 항상 답이 존재하는 경우만이 입력으로 주어진다고 가정해도 좋다.
+3 +5 +7 +6 ++
2 +3 +4 ++
1 × N 크기의 긴 밭에 벼가 심어져 있다. 준희는 이 벼를 수확 하려고 한다. 그런데 가운데 있는 벼를 수확을 하려면 끝에서 가운데까지 헤집고 들어가야 하므로 양 끝에 있는 벼만 수확을 할 수 있다. 처음에는 첫 번째와 N번째 벼를 수확을 할 수 있을 것이며 만약에 첫 번째 벼를 수확을 하였다면 두 번째 벼와 N번째 벼를 수확을 할 수 있다.
+ +수확을 하였을 때 얻을 수 있는 이익은 다음과 같다. 만약에 그 벼의 가치가 v(i)라고 하고 그 벼를 k번째로 수확을 한다고 하면 v(i) × k 만큼의 이익을 얻게 된다.
+ +만약에 벼의 가치가 차례로 1 3 1 5 2 라고 하고 첫 번째, 다섯 번째, 두 번째, 세 번째, 네 번째의 순서대로 수확을 한다고 하면 1×1 + 2×2 + 3×3 + 4×1 + 5×5 = 43 이 되어 43 만큼의 이익을 얻게 된다. 그리고 이 값이 저 벼로 얻을 수 있는 최대 이익이 된다.
+ +우리가 구해야 할 값은 다음과 같다. 벼의 개수 N과 벼의 가치가 주어져 있을 때, 얻을 수 있는 최대 이익을 구하는 프로그램을 작성하시오.
+첫째 줄에 벼의 개수 N(1 ≤ N ≤ 2,000)이 주어지고 두 번째 줄부터 N+1번쨰 줄까지 벼의 가치 v(i) (1 ≤ v(i) ≤ 1,000) 가 주어진다.
+첫째 줄에 얻을 수 있는 최대 이익을 출력한다.
+5 +1 +3 +1 +5 +2 ++
43 ++
45656이란 수를 보자.
+ +이 수는 인접한 모든 자릿수의 차이가 1이 난다. 이런 수를 계단 수라고 한다.
+ +재현이는 계단 수에 조건을 하나 추가하여 변형 계단 수라고 부르려고 한다. 조건은 이러하다.
+ +예를 들어, 45656이란 수는 변형 계단 수이지만 45676은 4567에서 인접한 자릿수가 연속으로 3번 증가하였으므로 변형 계단 수가 아니다.
+ +그럼, 오늘도 역시 세준이는 수의 길이가 N인 변형 계단 수가 몇 개 있는지 궁금해졌다.
+ +N이 주어질 때, 길이가 N인 변형 계단 수가 총 몇 개 있는지 구하는 프로그램을 작성하시오. (변형 계단 수는 0으로 시작할 수 있다.)
+첫째 줄에 N이 주어진다. N은 1보다 크거나 같고, 100보다 작거나 같은 자연수이다.
+첫째 줄에 정답을 1,000,000,007으로 나눈 나머지를 출력한다.
+4 ++
50 ++
정수를 저장하는 큐를 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.
+ +명령은 총 여섯 가지이다.
+ +첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 2,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 않은 명령이 주어지는 경우는 없다.
+출력해야하는 명령이 주어질 때마다, 한 줄에 하나씩 출력한다.
+15 +push 1 +push 2 +front +back +size +empty +pop +pop +pop +size +empty +pop +push 3 +empty +front ++
1 +2 +2 +0 +1 +2 +-1 +0 +1 +-1 +0 +3 ++
JOI 君は情報の試験を 3 回受けた.試験の点数はすべて 0 以上 100 以下の整数である.
+ +JOI 君の成績は 3 回の試験の点数のうち高い方から 2 つを足し合わせた合計によって決まる.
+ +3 回の試験の点数 A, B, C が与えられたとき,3 回の試験の点数のうち高い方から 2 つを足し合わせた合計を出力するプログラムを作成せよ.
+入力は以下の形式で標準入力から与えられる.
+ ++A B C+
3 回の試験の点数のうち高い方から 2 つを足し合わせた合計を 1 行で出力せよ.
+70 80 90 ++
70 100 70 ++
70 70 70 ++
170 ++
170 ++
140 ++
때는 2020년, 백준이는 월드나라의 한 국민이다. 월드나라에는 N개의 지점이 있고 N개의 지점 사이에는 M개의 도로와 W개의 웜홀이 있다. (단 도로는 방향이 없으며 웜홀은 방향이 있다.) 웜홀은 시작 위치에서 도착 위치로 가는 하나의 경로인데, 특이하게도 도착을 하게 되면 시작을 하였을 때보다 시간이 뒤로 가게 된다. 웜홀 내에서는 시계가 거꾸로 간다고 생각하여도 좋다.
+ +시간 여행을 매우 좋아하는 백준이는 한 가지 궁금증에 빠졌다. 한 지점에서 출발을 하여서 시간여행을 하기 시작하여 다시 출발을 하였던 위치로 돌아왔을 때, 출발을 하였을 때보다 시간이 되돌아가 있는 경우가 있는지 없는지 궁금해졌다. 여러분은 백준이를 도와 이런 일이 가능한지 불가능한지 구하는 프로그램을 작성하여라.
+첫 번째 줄에는 테스트케이스의 개수 TC(1 ≤ TC ≤ 5)가 주어진다. 그리고 두 번째 줄부터 TC개의 테스트케이스가 차례로 주어지는데 각 테스트케이스의 첫 번째 줄에는 지점의 수 N(1 ≤ N ≤ 500), 도로의 개수 M(1 ≤ M ≤ 2500), 웜홀의 개수 W(1 ≤ W ≤ 200)이 주어진다. 그리고 두 번째 줄부터 M+1번째 줄에 도로의 정보가 주어지는데 각 도로의 정보는 S, E, T 세 정수로 주어진다. S와 E는 연결된 지점의 번호, T는 이 도로를 통해 이동하는데 걸리는 시간을 의미한다. 그리고 M+2번째 줄부터 M+W+1번째 줄까지 웜홀의 정보가 S, E, T 세 정수로 주어지는데 S는 시작 지점, E는 도착 지점, T는 줄어드는 시간을 의미한다. T는 10,000보다 작거나 같은 자연수 또는 0이다.
+ +두 지점을 연결하는 도로가 한 개보다 많을 수도 있다. 지점의 번호는 1부터 N까지 자연수로 중복 없이 매겨져 있다.
+TC개의 줄에 걸쳐서 만약에 시간이 줄어들면서 출발 위치로 돌아오는 것이 가능하면 YES, 불가능하면 NO를 출력한다.
+2 +3 3 1 +1 2 2 +1 3 4 +2 3 1 +3 1 3 +3 2 1 +1 2 3 +2 3 4 +3 1 8 ++
NO +YES ++
스택 (stack)은 기본적인 자료구조 중 하나로, 컴퓨터 프로그램을 작성할 때 자주 이용되는 개념이다. 스택은 자료를 넣는 (push) 입구와 자료를 뽑는 (pop) 입구가 같아 제일 나중에 들어간 자료가 제일 먼저 나오는 (LIFO, Last in First out) 특성을 가지고 있다.
+ +1부터 n까지의 수를 스택에 넣었다가 뽑아 늘어놓음으로써, 하나의 수열을 만들 수 있다. 이때, 스택에 push하는 순서는 반드시 오름차순을 지키도록 한다고 하자. 임의의 수열이 주어졌을 때 스택을 이용해 그 수열을 만들 수 있는지 없는지, 있다면 어떤 순서로 push와 pop 연산을 수행해야 하는지를 알아낼 수 있다. 이를 계산하는 프로그램을 작성하라.
+첫 줄에 n (1 ≤ n ≤ 100,000)이 주어진다. 둘째 줄부터 n개의 줄에는 수열을 이루는 1이상 n이하의 정수가 하나씩 순서대로 주어진다. 물론 같은 정수가 두 번 나오는 일은 없다.
+입력된 수열을 만들기 위해 필요한 연산을 한 줄에 한 개씩 출력한다. push연산은 +로, pop 연산은 -로 표현하도록 한다. 불가능한 경우 NO를 출력한다.
+1부터 n까지에 수에 대해 차례로 [push, push, push, push, pop, pop, push, push, pop, push, push, pop, pop, pop, pop, pop] 연산을 수행하면 수열 [4, 3, 6, 8, 7, 5, 2, 1]을 얻을 수 있다.
+8 +4 +3 +6 +8 +7 +5 +2 +1 ++
5 +1 +2 +5 +3 +4 ++
+ ++ ++ ++ +- +- ++ ++ +- ++ ++ +- +- +- +- +- ++
NO ++
수직선 위에 N개의 좌표 X1, X2, ..., XN이 있다. 이 좌표에 좌표 압축을 적용하려고 한다.
+ +Xi를 좌표 압축한 결과 X'i의 값은 Xi > Xj를 만족하는 서로 다른 좌표 Xj의 개수와 같아야 한다.
+ +X1, X2, ..., XN에 좌표 압축을 적용한 결과 X'1, X'2, ..., X'N를 출력해보자.
+첫째 줄에 N이 주어진다.
+ +둘째 줄에는 공백 한 칸으로 구분된 X1, X2, ..., XN이 주어진다.
+첫째 줄에 X'1, X'2, ..., X'N을 공백 한 칸으로 구분해서 출력한다.
+5 +2 4 -10 4 -9 ++
6 +1000 999 1000 999 1000 999 ++
2 3 0 3 1 ++
1 0 1 0 1 0 ++
흰 왕(Whiteking)과 검은 왕(Blackking)이 외나무다리 돌게임을 하려고 한다.
+ +이 게임에서는 N개의 외나무다리를 사용한다. i번째 외나무다리는 일렬로 나열된 Ai개의 칸으로 이루어져 있다. 모든 외나무다리의 첫 번째 칸에는 흰 돌을 올려놓고, 마지막 칸에는 검은 돌을 올려놓고 게임을 시작한다.
+ +각 턴에 왕은 자신의 색깔의 돌 중 하나를 이동시켜야만 한다. 이동시킬 때는 같은 다리의 다른 칸으로 돌을 움직여야 하며, 상대방의 돌을 뛰어넘거나, 같은 칸으로 이동할 수 없다. 이 조건을 어기지 않는 한, 자신의 돌을 두 돌이 멀어지는 방향으로 움직여도 된다. 번갈아 가면서 턴을 진행하며, 자신의 차례에 아무 돌도 움직일 수 없는 왕이 패배한다. 둘 다 최적의 방법으로 게임을 할 때, 누가 이길지 예측해보자!
+첫째 줄에는 외나무다리의 개수 N이 주어진다.
+ +둘째 줄에는 각 외나무다리의 칸 수 A1, A2, A3, ..., AN이 주어진다.
+ +셋째 줄에는 먼저 시작하는 왕의 이름이 주어진다.
+첫째 줄에 이길 왕의 이름을 출력한다. 이름은 항상 첫글자가 대문자임에 유의하여라.
+길이 6짜리의 외나무다리에 흰 돌이 3번 칸에 있고, 검은 돌이 5번 칸에 있으면, 흰 돌은 1, 2, 4번 칸 중 하나로 이동할 수 있으며, 검은 돌은 4, 6번 칸 중 하나로 이동할 수 있다. 돌을 상대 돌로부터 멀어지는 방향으로 이동할 수 있음에 유의해라.
+2 +3 3 +Whiteking ++
2 +3 5 +Whiteking ++
Blackking ++
Whiteking ++
지원이에게 2진 수열을 가르쳐 주기 위해, 지원이 아버지는 그에게 타일들을 선물해주셨다. 그리고 이 각각의 타일들은 0 또는 1이 쓰여 있는 낱장의 타일들이다.
+ +어느 날 짓궂은 동주가 지원이의 공부를 방해하기 위해 0이 쓰여진 낱장의 타일들을 붙여서 한 쌍으로 이루어진 00 타일들을 만들었다. 결국 현재 1 하나만으로 이루어진 타일 또는 0타일을 두 개 붙인 한 쌍의 00타일들만이 남게 되었다.
+ +그러므로 지원이는 타일로 더 이상 크기가 N인 모든 2진 수열을 만들 수 없게 되었다. 예를 들어, N=1일 때 1만 만들 수 있고, N=2일 때는 00, 11을 만들 수 있다. (01, 10은 만들 수 없게 되었다.) 또한 N=4일 때는 0011, 0000, 1001, 1100, 1111 등 총 5개의 2진 수열을 만들 수 있다.
+ +우리의 목표는 N이 주어졌을 때 지원이가 만들 수 있는 모든 가짓수를 세는 것이다. 단 타일들은 무한히 많은 것으로 가정하자.
+첫 번째 줄에 자연수 N이 주어진다. (1 ≤ N ≤ 1,000,000)
+첫 번째 줄에 지원이가 만들 수 있는 길이가 N인 모든 2진 수열의 개수를 15746으로 나눈 나머지를 출력한다.
+4 ++
5 ++
n개의 정수로 이루어진 임의의 수열이 주어진다. 우리는 이 중 연속된 몇 개의 수를 선택해서 구할 수 있는 합 중 가장 큰 합을 구하려고 한다. 단, 수는 한 개 이상 선택해야 한다.
+ +예를 들어서 10, -4, 3, 1, 5, 6, -35, 12, 21, -1 이라는 수열이 주어졌다고 하자. 여기서 정답은 12+21인 33이 정답이 된다.
+첫째 줄에 정수 n(1 ≤ n ≤ 100,000)이 주어지고 둘째 줄에는 n개의 정수로 이루어진 수열이 주어진다. 수는 -1,000보다 크거나 같고, 1,000보다 작거나 같은 정수이다.
+첫째 줄에 답을 출력한다.
+10 +10 -4 3 1 5 6 -35 12 21 -1 ++
10 +2 1 -4 3 4 -4 6 5 -5 1 ++
5 +-1 -2 -3 -4 -5 ++
33 ++
14 ++
-1 ++
수식은 일반적으로 3가지 표기법으로 표현할 수 있다. 연산자가 피연산자 가운데 위치하는 중위 표기법(일반적으로 우리가 쓰는 방법이다), 연산자가 피연산자 앞에 위치하는 전위 표기법(prefix notation), 연산자가 피연산자 뒤에 위치하는 후위 표기법(postfix notation)이 그것이다. 예를 들어 중위 표기법으로 표현된 a+b는 전위 표기법으로는 +ab이고, 후위 표기법으로는 ab+가 된다.
이 문제에서 우리가 다룰 표기법은 후위 표기법이다. 후위 표기법은 위에서 말한 법과 같이 연산자가 피연산자 뒤에 위치하는 방법이다. 이 방법의 장점은 다음과 같다. 우리가 흔히 쓰는 중위 표기식 같은 경우에는 덧셈과 곱셈의 우선순위에 차이가 있어 왼쪽부터 차례로 계산할 수 없지만 후위 표기식을 사용하면 순서를 적절히 조절하여 순서를 정해줄 수 있다. 또한 같은 방법으로 괄호 등도 필요 없게 된다. 예를 들어 a+b*c를 후위 표기식으로 바꾸면 abc*+가 된다.
중위 표기식을 후위 표기식으로 바꾸는 방법을 간단히 설명하면 이렇다. 우선 주어진 중위 표기식을 연산자의 우선순위에 따라 괄호로 묶어준다. 그런 다음에 괄호 안의 연산자를 괄호의 오른쪽으로 옮겨주면 된다.
+ +예를 들어 a+b*c는 (a+(b*c))의 식과 같게 된다. 그 다음에 안에 있는 괄호의 연산자 *를 괄호 밖으로 꺼내게 되면 (a+bc*)가 된다. 마지막으로 또 +를 괄호의 오른쪽으로 고치면 abc*+가 되게 된다.
다른 예를 들어 그림으로 표현하면 A+B*C-D/E를 완전하게 괄호로 묶고 연산자를 이동시킬 장소를 표시하면 다음과 같이 된다.
결과: ABC*+DE/-
이러한 사실을 알고 중위 표기식이 주어졌을 때 후위 표기식으로 고치는 프로그램을 작성하시오
+첫째 줄에 중위 표기식이 주어진다. 단 이 수식의 피연산자는 알파벳 대문자로 이루어지며 수식에서 한 번씩만 등장한다. 그리고 -A+B와 같이 -가 가장 앞에 오거나 AB와 같이 *가 생략되는 등의 수식은 주어지지 않는다. 표기식은 알파벳 대문자와 +, -, *, /, (, )로만 이루어져 있으며, 길이는 100을 넘지 않는다.
첫째 줄에 후위 표기식으로 바뀐 식을 출력하시오
+A*(B+C) ++
A+B ++
A+B*C ++
A+B*C-D/E ++
ABC+* ++
AB+ ++
ABC*+ ++
ABC*+DE/- ++
N개의 정수 A[1], A[2], …, A[N]이 주어져 있을 때, 이 안에 X라는 정수가 존재하는지 알아내는 프로그램을 작성하시오.
+첫째 줄에 자연수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 N개의 정수 A[1], A[2], …, A[N]이 주어진다. 다음 줄에는 M(1 ≤ M ≤ 100,000)이 주어진다. 다음 줄에는 M개의 수들이 주어지는데, 이 수들이 A안에 존재하는지 알아내면 된다. 모든 정수의 범위는 -231 보다 크거나 같고 231보다 작다.
+M개의 줄에 답을 출력한다. 존재하면 1을, 존재하지 않으면 0을 출력한다.
+5 +4 1 5 2 3 +5 +1 3 7 9 5 ++
1 +1 +0 +0 +1 ++
널리 잘 알려진 자료구조 중 최소 힙이 있다. 최소 힙을 이용하여 다음과 같은 연산을 지원하는 프로그램을 작성하시오.
+ +프로그램은 처음에 비어있는 배열에서 시작하게 된다.
+첫째 줄에 연산의 개수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 자연수라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0이라면 배열에서 가장 작은 값을 출력하고 그 값을 배열에서 제거하는 경우이다. x는 231보다 작은 자연수 또는 0이고, 음의 정수는 입력으로 주어지지 않는다.
+입력에서 0이 주어진 횟수만큼 답을 출력한다. 만약 배열이 비어 있는 경우인데 가장 작은 값을 출력하라고 한 경우에는 0을 출력하면 된다.
+9 +0 +12345678 +1 +2 +0 +0 +0 +0 +32 ++
0 +1 +2 +12345678 +0 ++
M이상 N이하의 소수를 모두 출력하는 프로그램을 작성하시오.
+첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1 ≤ M ≤ N ≤ 1,000,000) M이상 N이하의 소수가 하나 이상 있는 입력만 주어진다.
+한 줄에 하나씩, 증가하는 순서대로 소수를 출력한다.
+3 16 ++
3 +5 +7 +11 +13 ++
Once upon a time, you had a nice positive integer .
+ +Since you like division, you quickly found all its positive integer divisors.
+ +Not being a mean guy, you calculated --- the arithmetic mean of divisors of . Surprisingly, this number turned out to be an integer.
+ +Some time passed, and you calculated --- the harmonic mean of divisors of . Even more surprisingly, this number turned out to be an integer, too!
+ +Unfortunately, your memory let you down, and now you remember and but don't remember . However, you remember that didn't exceed .
+ +Your muse suggested to bring good old times back and restore any value of matching your records.
+The first line of the input contains a single positive integer .
+ +The second line of the input contains a single positive integer .
+ +It's guaranteed that there exists a positive integer such that the arithmetic mean of divisors of is equal to , which the harmonic mean of divisors of is equal to .
+Output any positive integer not exceeding which doesn't contradict the given information.
+The arithmetic mean is the sum of a collection of numbers divided by the number of numbers in the collection. For example, the arithmetic mean of 1, 2, 3 and 6 is equal to .
+ +The harmonic mean is the reciprocal of the arithmetic mean of the reciprocals of numbers in the collection. For example, the harmonic mean of 1, 2, 3 and 6 is equal to .
+ +Thus, in the first example test case, satisfies the requirements since its divisors are 1, 2, 3 and 6.
+3 +2 ++
6 ++
한 개의 회의실이 있는데 이를 사용하고자 하는 N개의 회의에 대하여 회의실 사용표를 만들려고 한다. 각 회의 I에 대해 시작시간과 끝나는 시간이 주어져 있고, 각 회의가 겹치지 않게 하면서 회의실을 사용할 수 있는 회의의 최대 개수를 찾아보자. 단, 회의는 한번 시작하면 중간에 중단될 수 없으며 한 회의가 끝나는 것과 동시에 다음 회의가 시작될 수 있다. 회의의 시작시간과 끝나는 시간이 같을 수도 있다. 이 경우에는 시작하자마자 끝나는 것으로 생각하면 된다.
+첫째 줄에 회의의 수 N(1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N+1 줄까지 각 회의의 정보가 주어지는데 이것은 공백을 사이에 두고 회의의 시작시간과 끝나는 시간이 주어진다. 시작 시간과 끝나는 시간은 231-1보다 작거나 같은 자연수 또는 0이다.
+첫째 줄에 최대 사용할 수 있는 회의의 최대 개수를 출력한다.
+(1,4), (5,7), (8,11), (12,14) 를 이용할 수 있다.
+11 +1 4 +3 5 +0 6 +5 7 +3 8 +5 9 +6 10 +8 11 +8 12 +2 13 +12 14 ++
4 ++
+ 7 + 3 8 + 8 1 0 + 2 7 4 4 +4 5 2 6 5+ +
위 그림은 크기가 5인 정수 삼각형의 한 모습이다.
+ +맨 위층 7부터 시작해서 아래에 있는 수 중 하나를 선택하여 아래층으로 내려올 때, 이제까지 선택된 수의 합이 최대가 되는 경로를 구하는 프로그램을 작성하라. 아래층에 있는 수는 현재 층에서 선택된 수의 대각선 왼쪽 또는 대각선 오른쪽에 있는 것 중에서만 선택할 수 있다.
+ +삼각형의 크기는 1 이상 500 이하이다. 삼각형을 이루고 있는 각 수는 모두 정수이며, 범위는 0 이상 9999 이하이다.
+첫째 줄에 삼각형의 크기 n(1 ≤ n ≤ 500)이 주어지고, 둘째 줄부터 n+1번째 줄까지 정수 삼각형이 주어진다.
+첫째 줄에 합이 최대가 되는 경로에 있는 수의 합을 출력한다.
+5 +7 +3 8 +8 1 0 +2 7 4 4 +4 5 2 6 5 ++
30 ++
2차원 평면상에 N개의 직사각형이 있다. 직사각형의 각 변은 각 좌표축과 평행하다. 이들 직사각형은 다른 직사각형와 겹쳐지거나 일치할 수 있으며, 다른 것의 내부에 그려질 수도 있다. 직사각형의 각 꼭짓점은 자연수 좌표를 가진다.
+ +위의 그림의 경우는 8개의 직사각형이 그려진 경우이다. 이제 이 2차원 평면에 원점 (0,0)을 지나는 직선을 하나 그릴 수 있다. 이 직선은 직사각형들과 교차할 수 있는데, 위의 그림의 경우 2, 5, 6, 7, 8번 직사각형들과 교차하게 된다. (단지 직사각형의 꼭짓점만을 스쳐 지나가더라도 교차하는 것으로 간주한다.)
+ +가장 많은 직사각형과 교차하도록 원점을 지나는 직선을 그린다고 할 때, 최대 몇 개의 직사각형과 교차할 수 있는지를 구하는 프로그램을 작성하시오. 위의 그림의 경우 직선을 어떻게 그린다고 해도 6개 이상의 직사각형과는 교차하지 않으므로, 5개가 최대가 된다.
+첫째 줄에 직사각형의 개수 N(1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 직사각형의 왼쪽 아래 꼭짓점의 좌표 xbl, ybl과 오른쪽 위 꼭짓점의 좌표 xtr, ytr이 순서대로 빈칸 하나를 사이에 두고 주어진다. 입력되는 좌표는 1,000,000,000 이하의 자연수이고, xbl < xtr, ybl < ytr 을 만족한다.
+첫째 줄에 최대로 교차할 수 있는 직사각형의 개수를 출력한다.
+8 +1 8 7 11 +18 10 20 12 +17 1 19 7 +12 2 16 3 +16 7 19 9 +8 4 12 11 +7 4 9 6 +10 5 11 6 ++
5 ++
++ +모든 길은 로마로 통한다.
+
++ +천 리 길도 한 걸음부터
+
월드 나라는 정말 특이하게도 각 도시를 연결하는 모든 도로가 일방통행이며, 그 어떤 도시에서 출발해도 도로를 따라 출발한 도시로 돌아올 방법이 없다. 월드 나라의 가장 유명한 두 도시는 한걸음과 로마다. 한걸음에서 출발하면 그 어떤 도시에도 갈 수 있고, 그 어떤 도시에서 출발해도 로마에 도착할 수 있기 때문이다.
+ +한걸음으로 들어오는 도로가 하나도 없고 로마에서 나갈 수 있는 도로 또한 하나도 없기 때문에 당장 도로를 더 만들어야 할 것 같지만, 어떤 이유인지 월드 나라의 국왕 최백준은 도로를 짓는 대신 월드 나라의 지도를 만들 것을 명하였다. 이에 한걸음에서 출발해 로마에 도착하는 모든 경로를 전부 탐색하기 위해 선택받은 사람들이 한걸음에 모두 모였다.
+ +어떻게 왔는지는 잘 모르겠지만, 아무튼 한걸음에 모인 사람들은 각자 로마에 이르는 서로 다른 경로를 하나씩 배정 받았다. 모인 사람은 충분히 많아서 로마에 이르는 그 어떤 경로를 고르더라도 이를 배정 받은 사람이 있다. 이들은 모두 동시에 한걸음에서 출발해서 쉬지 않고 로마까지 달린다.
+ +이들이 모두 로마에 도착하는 데에 얼마의 시간이 걸리는가?
+ +완성된 지도에 감격한 국왕 최백준은 이들의 업적을 치하하여 가장 오래 달린 사람들이 달린 도로에 전부 황금을 칠할 것을 명하였다. 황금을 칠해야 할 도로의 수는 몇 개인가?
+첫째 줄에 월드 나라의 도시의 개수 ()이 주어지고 둘째 줄에는 월드 나라의 도로의 개수 ()이 주어진다. 그리고 셋째 줄부터 번째 줄까지 도로의 정보를 나타내는 세 정수 가 공백으로 구분되어 주어진다. 이는 도시 에서 도시 로 향하는 일방통행 도로를 지나는데 의 시간이 걸림을 의미한다. 모든 도로는 , , 을 만족한다. 번째 줄에는 한걸음과 로마의 도시 번호가 공백으로 구분되어 주어지며 두 도시 번호는 모두 이상 이하의 정수이다.
+첫째 줄에는 선택받은 사람들이 모두 로마에 도착하는 데 걸리는 시간을, 둘째 줄에는 황금을 칠해야 할 도로의 수를 출력한다.
+7 +9 +1 2 4 +1 3 2 +1 4 3 +2 6 3 +2 7 5 +3 5 1 +4 6 4 +5 6 2 +6 7 5 +1 7 ++
12 +5 ++
수현이는 4차 산업혁명 시대에 살고 있는 중학생이다. 코로나 19로 인해, 수현이는 버추얼 학교로 버추얼 출석해 버추얼 강의를 듣고 있다. 수현이의 버추얼 선생님은 문자가 2개인 연립방정식을 해결하는 방법에 대해 강의하고, 다음과 같은 문제를 숙제로 냈다.
+ +정수 , , , , , 가 공백으로 구분되어 차례대로 주어진다. ()
+ +문제에서 언급한 방정식을 만족하는 가 유일하게 존재하고, 이 때 와 가 각각 이상 이하의 정수인 경우만 입력으로 주어짐이 보장된다.
+문제의 답인 와 를 공백으로 구분해 출력한다.
+1 3 -1 4 1 7 ++
2 5 8 3 -4 -11 ++
2 -1 ++
-1 2 ++
당신을 포함한 N명의 참가자가 각자 자신의 장난감 자동차를 이용해 경주를 하는데, 트랙의 길이는 X 미터이다.
+ +참가자는 1번부터 N번까지 번호가 매겨져 있고, 당신의 참가 번호는 N번이다.
+ +i번 참가자의 자동차의 일반적인 속도는 V[i] meters per sec (m/s) 이며, 당신을 제외한 모든 참가자의 자동차는 출발점 부터 도착점까지 항상 일정한 속도로 움직인다.
+ +단, 당신의 장난감 자동차는 특수 부스터가 있기 때문에, 처음 1초간 Z m/s 로 움직이도록 설정할 수 있다 (이 때 트랙의 나머지 거리는 V[N] m/s 로 일정한 속도로 움직인다).
+ +경주 시작 전 정수 Z값을 고를 수 있으며, 이 값은 반드시 부스터 속도 한계치인 Y m/s 이하이어야 한다 (Z ≤ Y).
+ +당신은 꼭 이 경주에서 단독 1등을 하고 싶은데, 부스터를 지나치게 사용하면 의심 받을 수 있으니 단독 우승이 가능토록 하는 최소의 Z값을 구하고 싶다.
+ +예를 들어 N = 3, X = 12, Y = 11 이라하고, V = [3, 2, 1] 이라 하자.
+ +위의 예제의 경우 단독 우승을 하기 위해 최소 10미터를 부스터를 사용하여 이동하여야 하므로, 원하는 답이 10이다.
+ +입력으로 N, X, Y, 그리고 각 장난감 자동차의 속도 V가 주어졌을 때 단독 우승을 하기 위해 부스터를 사용해서 이동해야하는 최소한의 거리를 구하는 프로그램을 작성하시오.
+첫 줄에 테스트 케이스의 수 T가 주어진다.
+ +각 테스트 케이스의 첫 줄에 N, X, Y가 공백으로 구분되어 주어진다.
+ +둘째 줄에 N개의 정수가 공백으로 구분되어 주어지는데 이는 각 장난감 자동차의 속도 V[i]를 나타낸다.
+각 테스트 케이스에 대해 단독 우승을 위해 부스터를 사용해서 이동해야하는 최소한의 거리를 출력한다.
+ +만약 부스터를 쓰지 않고도 단독 우승이 가능하다면 0을 출력한다.
+ +부스터를 최대치로 사용하고도 단독 우승이 불가능하다면 -1을 출력한다.
+5 +3 12 11 +3 2 1 +3 12 9 +3 2 1 +3 12 10 +3 4 5 +3 80 80 +80 60 70 +3 80 80 +70 50 60 ++
10 +-1 +0 +-1 +72 ++
게임 개발자인 밀리는 전투력 시스템을 만들어, 캐릭터가 가진 전투력을 기준으로 칭호를 붙여주려고 한다.
+ +예를 들어, 전투력 10,000 이하의 캐릭터는 WEAK, 10,000 초과 그리고 100,000 이하의 캐릭터는 NORMAL, 100,000 초과 그리고 1,000,000 이하의 캐릭터는 STRONG 칭호를 붙여준다고 하자. 이를 IF문으로 작성한다면 아래와 같이 구현할 수 있다.
+ +
+if power <= 10000
+ print WEAK
+else if power <= 100000
+ print NORMAL
+else if power <= 1000000
+ print STRONG
+
+혼자서 게임을 개발하느라 매우 바쁜 밀리를 대신해서, 캐릭터의 전투력에 맞는 칭호를 출력하는 프로그램을 작성하자.
+첫 번째 줄에는 칭호의 개수 N (1 ≤ N ≤ 105)과 칭호를 출력해야 하는 캐릭터들의 개수 M (1 ≤ M ≤ 105)이 빈칸을 사이에 두고 주어진다. (1 ≤ N, M ≤ 105)
+ +두 번째 줄부터 N개의 줄에 각 칭호의 이름을 나타내는 길이 1 이상, 11 이하의 영어 대문자로만 구성된 문자열과 해당 칭호의 전투력 상한값을 나타내는 109 이하의 음이 아닌 정수가 주어진다. 칭호는 전투력 상한값의 비내림차순으로 주어진다.
+ +N + 2번째 줄부터 M개의 각 줄에는 캐릭터의 전투력을 나타내는 음이 아닌 정수가 주어진다. 해당하는 칭호가 없는 전투력은 입력으로 주어지지 않는다.
+M개의 줄에 걸쳐 캐릭터의 전투력에 맞는 칭호를 입력 순서대로 출력한다. 어떤 캐릭터의 전투력으로 출력할 수 있는 칭호가 여러 개인 경우 가장 먼저 입력된 칭호 하나만 출력한다.
+3 8 +WEAK 10000 +NORMAL 100000 +STRONG 1000000 +0 +9999 +10000 +10001 +50000 +100000 +500000 +1000000 ++
3 5 +B 100 +A 100 +C 1000 +99 +100 +101 +500 +1000 ++
WEAK +WEAK +WEAK +NORMAL +NORMAL +NORMAL +STRONG +STRONG ++
B +B +C +C +C ++
여러분도 알다시피 여러분의 프린터 기기는 여러분이 인쇄하고자 하는 문서를 인쇄 명령을 받은 ‘순서대로’, 즉 먼저 요청된 것을 먼저 인쇄한다. 여러 개의 문서가 쌓인다면 Queue 자료구조에 쌓여서 FIFO - First In First Out - 에 따라 인쇄가 되게 된다. 하지만 상근이는 새로운 프린터기 내부 소프트웨어를 개발하였는데, 이 프린터기는 다음과 같은 조건에 따라 인쇄를 하게 된다.
+ +예를 들어 Queue에 4개의 문서(A B C D)가 있고, 중요도가 2 1 4 3 라면 C를 인쇄하고, 다음으로 D를 인쇄하고 A, B를 인쇄하게 된다.
+ +여러분이 할 일은, 현재 Queue에 있는 문서의 수와 중요도가 주어졌을 때, 어떤 한 문서가 몇 번째로 인쇄되는지 알아내는 것이다. 예를 들어 위의 예에서 C문서는 1번째로, A문서는 3번째로 인쇄되게 된다.
+첫 줄에 테스트케이스의 수가 주어진다. 각 테스트케이스는 두 줄로 이루어져 있다.
+ +테스트케이스의 첫 번째 줄에는 문서의 개수 N(1 ≤ N ≤ 100)과, 몇 번째로 인쇄되었는지 궁금한 문서가 현재 Queue에서 몇 번째에 놓여 있는지를 나타내는 정수 M(0 ≤ M < N)이 주어진다. 이때 맨 왼쪽은 0번째라고 하자. 두 번째 줄에는 N개 문서의 중요도가 차례대로 주어진다. 중요도는 1 이상 9 이하의 정수이고, 중요도가 같은 문서가 여러 개 있을 수도 있다.
+각 테스트 케이스에 대해 문서가 몇 번째로 인쇄되는지 출력한다.
+3 +1 0 +5 +4 2 +1 2 3 4 +6 0 +1 1 9 1 1 1 ++
1 +2 +5 ++
트리(tree)는 사이클이 없는 무방향 그래프이다. 트리에서는 어떤 두 노드를 선택해도 둘 사이에 경로가 항상 하나만 존재하게 된다. 트리에서 어떤 두 노드를 선택해서 양쪽으로 쫙 당길 때, 가장 길게 늘어나는 경우가 있을 것이다. 이럴 때 트리의 모든 노드들은 이 두 노드를 지름의 끝 점으로 하는 원 안에 들어가게 된다.
+ +이런 두 노드 사이의 경로의 길이를 트리의 지름이라고 한다. 정확히 정의하자면 트리에 존재하는 모든 경로들 중에서 가장 긴 것의 길이를 말한다.
+ +입력으로 루트가 있는 트리를 가중치가 있는 간선들로 줄 때, 트리의 지름을 구해서 출력하는 프로그램을 작성하시오. 아래와 같은 트리가 주어진다면 트리의 지름은 45가 된다.
+ +트리의 노드는 1부터 n까지 번호가 매겨져 있다.
+파일의 첫 번째 줄은 노드의 개수 n(1 ≤ n ≤ 10,000)이다. 둘째 줄부터 n-1개의 줄에 각 간선에 대한 정보가 들어온다. 간선에 대한 정보는 세 개의 정수로 이루어져 있다. 첫 번째 정수는 간선이 연결하는 두 노드 중 부모 노드의 번호를 나타내고, 두 번째 정수는 자식 노드를, 세 번째 정수는 간선의 가중치를 나타낸다. 간선에 대한 정보는 부모 노드의 번호가 작은 것이 먼저 입력되고, 부모 노드의 번호가 같으면 자식 노드의 번호가 작은 것이 먼저 입력된다. 루트 노드의 번호는 항상 1이라고 가정하며, 간선의 가중치는 100보다 크지 않은 양의 정수이다.
+첫째 줄에 트리의 지름을 출력한다.
+12 +1 2 3 +1 3 2 +2 4 5 +3 5 11 +3 6 9 +4 7 1 +4 8 7 +5 9 15 +5 10 4 +6 11 6 +6 12 10 ++
45 ++
흑백 영상을 압축하여 표현하는 데이터 구조로 쿼드 트리(Quad Tree)라는 방법이 있다. 흰 점을 나타내는 0과 검은 점을 나타내는 1로만 이루어진 영상(2차원 배열)에서 같은 숫자의 점들이 한 곳에 많이 몰려있으면, 쿼드 트리에서는 이를 압축하여 간단히 표현할 수 있다.
+ +주어진 영상이 모두 0으로만 되어 있으면 압축 결과는 "0"이 되고, 모두 1로만 되어 있으면 압축 결과는 "1"이 된다. 만약 0과 1이 섞여 있으면 전체를 한 번에 나타내지를 못하고, 왼쪽 위, 오른쪽 위, 왼쪽 아래, 오른쪽 아래, 이렇게 4개의 영상으로 나누어 압축하게 되며, 이 4개의 영역을 압축한 결과를 차례대로 괄호 안에 묶어서 표현한다
+ +위 그림에서 왼쪽의 영상은 오른쪽의 배열과 같이 숫자로 주어지며, 이 영상을 쿼드 트리 구조를 이용하여 압축하면 "(0(0011)(0(0111)01)1)"로 표현된다. N ×N 크기의 영상이 주어질 때, 이 영상을 압축한 결과를 출력하는 프로그램을 작성하시오.
첫째 줄에는 영상의 크기를 나타내는 숫자 N 이 주어진다. N 은 언제나 2의 제곱수로 주어지며, 1 ≤ N ≤ 64의 범위를 가진다. 두 번째 줄부터는 길이 N의 문자열이 N개 들어온다. 각 문자열은 0 또는 1의 숫자로 이루어져 있으며, 영상의 각 점들을 나타낸다.
+영상을 압축한 결과를 출력한다.
+8 +11110000 +11110000 +00011100 +00011100 +11110000 +11110000 +11110011 +11110011 ++
((110(0101))(0010)1(0001)) ++
개의 팀이 박 터트리기 게임을 한다. 각 팀은 하나의 바구니를 가지고 있고, 바구니에 들어있는 공을 던져서 자기 팀의 박을 터트려야 한다.
+ +우리는 게임을 준비하기 위해서, 개의 공을 개의 바구니에 나눠 담아야 한다. 이때, 게임의 재미를 위해서 바구니에 담기는 공의 개수를 모두 다르게 하고 싶다. 즉, 개의 공을 개의 바구니에 빠짐없이 나누어 담는데, 각 바구니에는 1개 이상의 공이 있어야 하고, 바구니에 담긴 공의 개수가 모두 달라야 한다.
+ +게임의 불공정함을 줄이기 위해서, 가장 많이 담긴 바구니와 가장 적게 담긴 바구니의 공의 개수 차이가 최소가 되도록 담을 것이다.
+ +공을 바구니에 나눠 담기 위한 규칙을 정리하면 다음과 같다.
+ +위의 규칙을 모두 만족하며 개의 공을 개의 바구니에 나눠 담을 때, 나눠 담을 수 있는지 여부를 결정하고, 담을 수 있는 경우에는 가장 많이 담긴 바구니와 가장 적게 담긴 바구니의 공의 개수 차이를 계산해서 출력하는 프로그램을 작성하시오.
+첫 번째 줄에 공의 개수를 나타내는 과 팀의 수를 나타내는 정수 가 주어진다.
+개의 공을 개의 바구니에 문제의 규칙을 만족하면서 나눠 담을 수 있다면, 가장 많이 담긴 바구니와 가장 적게 담긴 바구니의 공의 개수 차이를 출력한다. 나눠 담을 수 없는 경우에는 -1을 출력한다.
+5 3 ++
6 3 ++
-1 ++
2 ++
피자를 굽는 전자식 오븐이 있다. 이 오븐에 재료는 넣고 정확히 분 동안 동작을 시키고자 한다. 그런데 이 오븐에 준비된 버튼은 아래와 같은 동작을 하는 5가지이다. 즉, 각각의 버튼은 동작 시간을 추가시키거나 감소시킨다. 처음에 피자 오븐의 첫 시간은 0분으로 정해져 있다. 시간을 감소시키는 버튼을 눌러서 시간이 0분보다 작아지는 경우에는 0분으로 설정된다. 가 현재 오븐에 세팅된 시간, 은 버튼을 누른 뒤의 시간을 의미할 때, 각 버튼은 다음과 같은 기능을 가지고 있다.
+ +ADDH: ADDT: MINT: ADDO: MINO: 예를 들어, 58분을 설정하고 싶으면, ADDO (+1분) 버튼을 58번 눌러도 된다. 하지만, ADDH (+60분) 버튼을 한 번 누른 뒤에 MINO (-1분) 버튼을 2번 누르면 3번의 작업으로 58분을 만들 수 있다. 42분을 설정하고 싶은 경우에는 버튼을 ADDH, MINT, MINT, ADDO, ADDO 순서로 5번 눌러서 만들 수 있다. ADDT, ADDT, ADDT, ADDT, ADDO, ADDO 순서로 6번 눌러서 만들 수 있지만, 버튼은 최소 횟수로 누르려고 한다.
설정해야 할 시간이 주어졌을 때, 그 시간을 만들기 위해 눌러야 하는 버튼의 최소 횟수와 그 방법을 구하는 프로그램을 작성하시오.
+입력을 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있고, 설정해야 하는 시간 이 분 단위의 정수로 주어진다.
+각각의 테스트 케이스마다 5개의 정수를 한 줄에 공백으로 구분해서 출력한다. 이 정수는 입력으로 주어진 시간을 만들기 위해서 ADDH, ADDT, MINT, ADDO, MINO 버튼을 누르는 횟수를 출력한 것이다. 최소 횟수로 누르는 방법이 여러가지인 경우에는 사전 순으로 가장 앞서는 방법을 출력한다.
작업 횟수가 동일한 방법이 여러가지가 있을 때, ADDH를 누르는 횟수가 적은것이 사전 순으로 앞서는 것이고, ADDH를 누르는 횟수가 동일하면, ADDT를 누르는 횟수가 적은것이 먼저이다. ADDT를 누르는 횟수가 동일하면 MINT를 누르는 횟수가 적은것이, MINT를 누르는 횟수가 동일하면 ADDO를 누르는 횟수가 적은것이, ADDO를 누르는 횟수가 동일하면 MINO를 누르는 횟수가 적은것이 사전 순으로 앞서는 것이다.
3 +5 +12 +27 ++
0 0 0 5 0 +0 1 0 2 0 +0 3 0 0 3 ++
다들 windows에서 지원하는 지뢰 찾기 게임을 한번쯤은 해 보았을 것이다. 특히 동호는 지뢰찾기의 매니아로 알려져 있다. 지뢰 찾기 map은 N*N의 정사각형 모양으로 각 칸에는 숫자가 들어가 있거나 지뢰가 들어가 있다. 빈 칸에는 숫자 0이 들어있다고 생각하자.
+ +map의 어떤 칸에 적혀 있는 숫자는, 그 칸과 인접해 있는 여덟 개의 칸 중에서 지뢰가 들어 있는 칸이 몇 개인지를 나타내 준다. 물론 인접한 칸이 map 내부에 있는 경우에 대해서만 생각하면 된다. 예제를 보면 더 잘 이해할 수 있을 것이다.
+ +이번 문제는 조금 업그레이드 된 지뢰 찾기로, 한 칸에 한 개의 지뢰가 있는 것이 아니고, 한 칸에 여러 개(1 이상 9 이하)의 지뢰가 묻혀 있는 게임이다. 따라서 map의 어떤 칸에 적혀 있는 숫자는, 그 칸과 인접해 있는 여덟 개의 칸들에 들어 있는 지뢰의 총 개수가 된다.
+ +이미 windows 지뢰찾기 같은 것을 마스터한 영식이는, map에서 지뢰에 대한 정보만이 주어졌을 때, 영식이는 map을 완성하고 싶다고 한다. N과 지뢰의 위치가 주어졌을 때, 영식이를 도와서 지뢰 찾기 map을 완성하는 프로그램을 작성하시오.
+첫째 줄에 N(1 ≤ N ≤ 1,000)이 주어진다. 다음 N개의 줄에는 지뢰 찾기 map에 대한 정보가 주어지는데 '.' 또는 숫자로 이루어진 문자열이 들어온다. '.'는 지뢰가 없는 것이고 숫자는 지뢰가 있는 경우로 그 칸의 지뢰의 개수이다. 한 줄은 N개의 문자로 이루어져 있다.
+N개의 줄에 걸쳐서 완성된 지뢰 찾기 map을 출력한다. 지뢰는 '*'로 출력하며. 10 이상인 경우는 'M'(Many)으로 출력하면 된다. map은 숫자 또는 'M' 또는 '*'로만 이루어져 있어야 한다.
+5 +1.... +..3.. +..... +.4... +...9. ++
*4330 +14*30 +47730 +4*M99 +44M*9 ++
베스킨라빈스 게임은 1부터 31까지의 수를 순차적으로 한번에 1개 이상, 3개 이하 연달아 부를 수 있으며, 마지막 31을 부른 사람이 지는 게임이다. 시온이와 민우는 베스킨라빈스 게임을 하기로 했지만 이 게임이 너무 유명한 나머지 시온이와 민우 모두 필승 방법을 알고 있었다. 평소에 항상 운이 없던 시온이는 가위바위보를 져 민우에게 선공을 빼았기게 되었고 이대로 게임을 한다면 질 수밖에 없는 상황이다. 그래서 시온이는 1개 이상, N개 이하의 수를 부를 수 있는 규칙의 게임으로 변형하자고 말하였고 민우도 수락했다.
+ +이 경우 시온이가 게임을 이길 수 있는 모든 n(1 ≤ n ≤ A)을 출력하시오.
+첫 번째 줄에 A이 주어진다. (1 ≤ A ≤ 31)
+각 줄에 시온이가 게임을 이길 수 있는 n을 한 줄에 하나씩 오름차순으로 출력한다.
+1 ++
2 ++
1 ++
1 +2 ++
의 끝자리 의 개수를 출력하는 프로그램을 작성하시오.
+첫째 줄에 정수 , (, )이 들어온다.
+첫째 줄에 의 끝자리 의 개수를 출력한다.
+25 12 ++
2 ++
마법사 상어는 파이어볼과 토네이도를 조합해 파이어스톰을 시전할 수 있다. 오늘은 파이어스톰을 크기가 2N × 2N인 격자로 나누어진 얼음판에서 연습하려고 한다. 위치 (r, c)는 격자의 r행 c열을 의미하고, A[r][c]는 (r, c)에 있는 얼음의 양을 의미한다. A[r][c]가 0인 경우 얼음이 없는 것이다.
+ +파이어스톰을 시전하려면 시전할 때마다 단계 L을 결정해야 한다. 파이어스톰은 먼저 격자를 2L × 2L 크기의 부분 격자로 나눈다. 그 후, 모든 부분 격자를 시계 방향으로 90도 회전시킨다. 이후 얼음이 있는 칸 3개 또는 그 이상과 인접해있지 않은 칸은 얼음의 양이 1 줄어든다. (r, c)와 인접한 칸은 (r-1, c), (r+1, c), (r, c-1), (r, c+1)이다. 아래 그림의 칸에 적힌 정수는 칸을 구분하기 위해 적은 정수이다.
+ +| 마법을 시전하기 전 | +L = 1 | +L = 2 | +
마법사 상어는 파이어스톰을 총 Q번 시전하려고 한다. 모든 파이어스톰을 시전한 후, 다음 2가지를 구해보자.
+ +얼음이 있는 칸이 얼음이 있는 칸과 인접해 있으면, 두 칸을 연결되어 있다고 한다. 덩어리는 연결된 칸의 집합이다.
+첫째 줄에 N과 Q가 주어진다. 둘째 줄부터 2N개의 줄에는 격자의 각 칸에 있는 얼음의 양이 주어진다. r번째 줄에서 c번째 주어지는 정수는 A[r][c] 이다.
+ +마지막 줄에는 마법사 상어가 시전한 단계 L1, L2, ..., LQ가 순서대로 주어진다.
+첫째 줄에 남아있는 얼음 A[r][c]의 합을 출력하고, 둘째 줄에 가장 큰 덩어리가 차지하는 칸의 개수를 출력한다. 단, 덩어리가 없으면 0을 출력한다.
+3 1 +1 2 3 4 5 6 7 8 +8 7 6 5 4 3 2 1 +1 2 3 4 5 6 7 8 +8 7 6 5 4 3 2 1 +1 2 3 4 5 6 7 8 +8 7 6 5 4 3 2 1 +1 2 3 4 5 6 7 8 +8 7 6 5 4 3 2 1 +1 ++
3 2 +1 2 3 4 5 6 7 8 +8 7 6 5 4 3 2 1 +1 2 3 4 5 6 7 8 +8 7 6 5 4 3 2 1 +1 2 3 4 5 6 7 8 +8 7 6 5 4 3 2 1 +1 2 3 4 5 6 7 8 +8 7 6 5 4 3 2 1 +1 2 ++
3 5 +1 2 3 4 5 6 7 8 +8 7 6 5 4 3 2 1 +1 2 3 4 5 6 7 8 +8 7 6 5 4 3 2 1 +1 2 3 4 5 6 7 8 +8 7 6 5 4 3 2 1 +1 2 3 4 5 6 7 8 +8 7 6 5 4 3 2 1 +1 2 0 3 2 ++
3 10 +1 2 3 4 5 6 7 8 +8 7 6 5 4 3 2 1 +1 2 3 4 5 6 7 8 +8 7 6 5 4 3 2 1 +1 2 3 4 5 6 7 8 +8 7 6 5 4 3 2 1 +1 2 3 4 5 6 7 8 +8 7 6 5 4 3 2 1 +1 2 0 3 2 1 2 3 2 3 ++
3 10 +1 2 3 4 5 6 7 8 +8 7 6 5 4 3 2 1 +1 2 3 4 5 6 7 8 +8 7 6 5 4 3 2 1 +1 2 3 4 5 6 7 8 +8 7 6 5 4 3 2 1 +1 2 3 4 5 6 7 8 +8 7 6 5 4 3 2 1 +1 2 3 1 2 3 1 2 3 1 ++
3 10 +1 0 3 4 5 6 7 0 +8 0 6 5 4 3 2 1 +1 2 0 4 5 6 7 0 +8 7 6 5 4 3 2 1 +1 2 3 4 0 6 7 0 +8 7 0 5 4 3 2 1 +1 2 3 4 5 6 7 0 +0 7 0 5 4 3 2 1 +1 2 3 1 2 3 1 2 3 1 ++
284 +64 ++
280 +64 ++
268 +64 ++
248 +62 ++
246 +60 ++
37 +9 ++
Chemistry is all about reactions—you throw a bunch of stuff into a test-tube, heat it up, hoping that it will neither explode or poison you, then cool it down and try to work out whether what you have is what you expected. That’s the easy (and fun) bit—much harder is recording it all. As is usual with skills of this type, chemistry instructors the world over rely on drill—a seemingly endless set of reactions that the students have to complete. The trick is that everything that appears on the left side (the reagents, or ‘input’) must appear on the right side (the products, or ‘output’). This ought to be simple, but generations of chemistry students have demonstrated otherwise.
+ +Professor Plumbius is getting tired of writing the same comments on his student’s worksheets over and over and he wants to automate the process. He wants to be able to enter the equations as written by the students and have the computer produce the comments automatically, thus giving him more time to dream up more equations to give his students to practise on. This is where you come in.
+ +Write a program that will read in a chemistry equation and determine whether it is balanced. If it isn’t, your program must tell the student what elements are out of balance and by how much.
+ +Normally a chemistry equation is written like this:
+ +2H2O + SO2 ←→ H2 + H2SO4
+ +but due to the limitations of computer input we will present it like this:
+ +2H2O + SO2 = H2 + H2SO4
+ +This example shows the essentials of an equation: each side consists of one or more molecules, separated by ‘+’ signs (the spaces are optional). Each molecule may have a multiplier before it which specifies how many instances of that molecule take part in the reaction. A molecule consists of one or more elements. Each element has a symbol, which is either an uppercase letter, e.g., ‘H’, or an uppercase letter followed by a lowercase letter, e.g., ‘Br’. A symbol may be followed by a multiplier specifying how many atoms of that element are present in that part of the molecule. Thus the first term says that there are two instances of a molecule consisting of two atoms of H and one atom of O. (This happens to be water, but you do not need to know that.)
+ +Given that these are exercises handed out to the students, the left hand sides are, by definition, correct. Thus your job is to determine whether all the atoms that appear on the left also appear on the right. If they do, then the equation is balanced. If not, you must report which elements have been created or lost and how much of each.
+Input will consist of a number of equations, each on a line by itself. Each line will contain no more than 250 characters. Each equation represents a set of reagents and a set of products, separated by an ‘=’ sign. Each set will consist of one or more molecules, possibly with multipliers, separated by ‘+’ signs. There may be zero or more spaces on either side of the ‘+’ and ‘=’ signs.
+ +The last line of input will be a ‘#’ on a line by itself. This line should not be processed.
+There will be at least one line of output for each equation in the input. If the equation is balanced this line will say ‘Equation n is balanced.’, where n is the equation number (starting from 1). If the equation does not balance, then the output line will say ‘Equation n is unbalanced.’ and will be followed by a series of lines of the form
+ +You have <created or destroyed> m <atom or atoms> of element.
where element is the symbol of the element concerned, m is the number of extra or missing atoms of that element, and ‘atom(s)’ is singular or plural as appropriate. For each unbalanced equation, these lines should be ordered alphabetically by element symbol and terminated by a blank line. (Note that this means that the final line of your output may be a blank line.)
+2HBr + H2O+SO2=H2+H2SO3+He +2H2O + SO2 = H2 + H2SO4 +2H2O+SO2=H2+H2SO4 +# ++
Equation 1 is unbalanced. +You have destroyed 2 atoms of Br. +You have created 1 atom of He. + +Equation 2 is balanced. +Equation 3 is balanced. ++
영웅이는 2의 거듭제곱을 좋아해서 A를 최대한 많은 항의 2의 거듭제곱의 합으로 표현한다. 표현된 2의 거듭제곱은 지수가 0 이상의 서로 다른 정수이다.
+ +예를 들어 31은 5개의 항으로 표현된다. 우리는 이것을 영웅이의 표현법이라고 부를 것이다.
+ +N개의 자연수 A1, A2, ..., AN이 주어진다. 이 중 최대 한 개의 자연수를 제거하고, 나머지를 영웅이의 표현법으로 나타내자.
+ +그 후 각 정수 x에 대해 2x가 홀수 개 존재하면 2x를 더하고, 짝수 개 존재하면 더하지 않는다. 이렇게 했을 때 얻을 수 있는 최대 합을 2번 출력하라.
+첫째 줄에 자연수 N (1 ≤ N ≤ 2,222,222)이 주어지고, 둘째 줄에는 N개의 자연수 A (1 ≤ A ≤ 2,222,222)가 주어진다.
+최댓값을 2번 연속해서 출력한다.
+3 +5 7 11 ++
3 +1 2 4 ++
1414 ++
77 ++
수현이는 일년의 날짜가 1일부터 365일로 표시되어있는 달력을 가지고있다. 수현이는 너무나도 계획적인 사람이라 올 해 일정을 모두 계획해서 달력에 표시해놨다.
+ +여름이 거의 끝나가자 장마가 시작되었고, 습기로 인해 달력에 표시한 일정이 지워지려고 한다. 지워지는 것을 막고자 수현이는 일정이 있는 곳에만 코팅지를 달력에 붙이려고 한다. 하지만 너무 귀찮았던 나머지, 다음과 같은 규칙을 따르기로 한다.
+ +달력은 다음과 같은 규칙을 따른다.
+ +위의 그림에서와 같이 일정이 주어졌다고 하자. 여기서 코팅지의 면적은 아래의 파란색 영역과 같다.
+ +이때 코팅지의 크기의 합은 3 x 8 + 2 x 2 = 28이다.
+ +일정의 개수와 각 일정의 시작날짜, 종료날짜가 주어질 때 수현이가 자르는 코팅지의 면적을 구해보자.
+첫째 줄에 일정의 개수 N이 주어진다. (1 ≤ N ≤ 1000)
+ +둘째 줄부터 일정의 개수만큼 시작 날짜 S와 종료 날짜 E가 주어진다. (1 ≤ S ≤ E ≤ 365)
+코팅지의 면적을 출력한다.
+7 +2 4 +4 5 +5 6 +5 7 +7 9 +11 12 +12 12 ++
5 +1 9 +8 9 +4 6 +3 4 +2 5 ++
28 ++
36 ++
입력 제한 외 난이도에 따른 문제의 차이는 없다.
+ +APC는 매년 교내 참가자들에게 추첨상을 지급하고 있다. 올해 추첨상은 공정한 추첨을 위해 준표가 직접 작성한 난수생성기를 통해 추첨을 하고자 한다. 난수생성기란, 이론적으로 예측을 더 할 수 없도록 일련의 숫자나 심볼을 생성하는 장치이다.
+ +++ +주헌 : 형이 짠 난수생성기가 공정하다는 걸 어떻게 알아 ?
+ +준표 : 걱정 마! c언어에서 ANSI 표준으로 사용하는 '선형합동법(Linear Congruential)' 을 구현할 거니까 ~
+ +주헌 : 선형합동법이 뭔데 ?
+ +준표 : 그게 뭐냐면 ..
+
준표의 설명을 간단히 정리해보면,
+ +X1 = (a × Seed + c) % m
+ +X2 = (a × X1 + c) % m
+ +...
+ +Xn + 1 = (a × Xn + c) % m
+ +이런 식으로 준표가 몰래 정하는 a, c, m 와 참가자들이 정하는 Seed 값을 바탕으로 위 공식에 따라 난수를 생성한다는 것이었다.
+ +++ +주헌 : 음... a, c, m을 아무렇게나 잡으면 안 되지 않을까 ?
+ +준표 : 응. Hull-Dobell 정리에 따르면 그게 맞아. 그런데 귀찮아서 그냥 m을 대충 내가 좋아하는 소수로 하려구.
+ +주헌 : (형이 좋아하는 소수..? 씨익..)
+
사실 주헌이는 올해에는 추첨상을 반드시 받아내겠다는 야망이 있었다! 위 대화는 그를 위한 초석이었던 것이다! 주헌이는 준표를 너무 잘 알기 때문에 준표가 좋아하는 소수를 이미 알고 있었고, 준표가 자신이 직접 작성한 난수생성기에 문제가 없음을 참가자들에게 알려주기 위해 실제 추첨 전 난수생성기가 잘 작동한다는 것을 모두의 앞에서 시연하기로 되어있었다.
+ +주헌이는 계략을 짰다. 주헌이는 시연 중 참가자들이 정한 Seed와 이를 이용해 만들어진 X1, X2 를 이용해 준표가 몰래 정한 a, c를 찾아낼 것이다. 만약 주헌이가 추첨상을 받지 못한다면, 찾아낸 a, c를 폭로해 모든 것이 조작되었다고 주장하며 추첨 자체를 무효로 만들 계략이다! 주헌이는 a, c를 자동으로 찾아주는 프로그램을 만들고자 한다.
+한 줄에 걸쳐 준표가 좋아하는 소수 m, 참가자들이 정한 Seed, 시연으로 공개된 X1, X2 이 주어진다. 항상 가능한 상황만 입력으로 주어진다.
+준표가 비밀리에 선정한 정수 a, c를 출력한다. 가능한 답이 여러 개라면, 그중 아무거나 출력한다.
+m ≤ 100,000 (m은 소수)
+ +0 < Seed, X1, X2 < m
+ +0 ≤ a, c < m
+c언어에서의 rand() 함수는 위와 비슷하지만 Xn 의 상위 16개 비트를 반환하도록 구현되어있다.
+13 5 2 9 ++
13 6 5 3 ++
11 9 9 9 ++
2 5 ++
2 6 ++
2 2 ++
어떤 N개의 수가 주어져 있다. 그런데 중간에 수의 변경이 빈번히 일어나고 그 중간에 어떤 부분의 합을 구하려 한다. 만약에 1,2,3,4,5 라는 수가 있고, 3번째 수를 6으로 바꾸고 2번째부터 5번째까지 합을 구하라고 한다면 17을 출력하면 되는 것이다. 그리고 그 상태에서 다섯 번째 수를 2로 바꾸고 3번째부터 5번째까지 합을 구하라고 한다면 12가 될 것이다.
+첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)과 M(1 ≤ M ≤ 10,000), K(1 ≤ K ≤ 10,000) 가 주어진다. M은 수의 변경이 일어나는 횟수이고, K는 구간의 합을 구하는 횟수이다. 그리고 둘째 줄부터 N+1번째 줄까지 N개의 수가 주어진다. 그리고 N+2번째 줄부터 N+M+K+1번째 줄까지 세 개의 정수 a, b, c가 주어지는데, a가 1인 경우 b(1 ≤ b ≤ N)번째 수를 c로 바꾸고 a가 2인 경우에는 b(1 ≤ b ≤ N)번째 수부터 c(b ≤ c ≤ N)번째 수까지의 합을 구하여 출력하면 된다.
+ +입력으로 주어지는 모든 수는 -263보다 크거나 같고, 263-1보다 작거나 같은 정수이다.
+첫째 줄부터 K줄에 걸쳐 구한 구간의 합을 출력한다. 단, 정답은 -263보다 크거나 같고, 263-1보다 작거나 같은 정수이다.
+5 2 2 +1 +2 +3 +4 +5 +1 3 6 +2 2 5 +1 5 2 +2 3 5 ++
17 +12 ++
매일 다이어리에 세워 둔 계획을 지키며 바른 생활을 실천하는 바름이가 내일의 일정을 계획하고 있다.
+ +바름이는 스터디, 실시간 강의, 동아리 등 할 일이 많아서, 일부 시간은 이미 해당 일들을 하는 데 고정적으로 쓰인다.
+ +그런데 바름이에게는 위의 일 말고도 과제, 연애 등 해야 할 일이 많다! 우리가 해야 할 일은 바름이가 세운 계획이 실현 가능한지 알려주는 것이다.
+ +바름이는 강단 있고 추진력이 뛰어나서,
+ +첫째 줄에는 이미 고정된 일정의 개수 N(1 ≤ N ≤ 11), 바름이가 내일 추가적으로 해야 할 일의 개수 K(1 ≤ K ≤ 12)가 주어진다.
+ +둘째 줄부터 N개의 줄에는 각 줄마다 고정된 일정의 시작 시각 s(0 ≤ s < 1440)와 종료 시각 e(s < e ≤ 1440)가 주어진다.
+ +하루의 시작 시각은 0, 종료 시각은 1440이며, 각 일정은 겹치지 않고 시간 순으로 주어진다.
+ +마지막 줄에는 바름이가 계획한 일 K개를 하는 데 걸리는 시간 T1, T2, ..., TK가 공백을 사이에 두고 주어진다.
+ +각 일을 하는 데 걸리는 시간 Ti는 1 이상 1440 이하의 정수이며, T1, T2, ..., TK의 합은 1440을 넘지 않는다.
+바름이가 계획한 일을 모두 수행하는 것이 가능하면 GOOD, 그렇지 않으면 BAD를 출력한다.
4 3 +0 660 +750 780 +960 1020 +1260 1440 +120 120 120 ++
4 3 +0 660 +750 780 +960 1021 +1260 1440 +120 120 120 ++
GOOD ++
BAD ++
민규와 명진이는 타자연습 대결을 하고 있다. 타자연습은 개의 단어들로 이루어져 있으며, 각 단어는 알파벳 대문자 A부터 D까지로만 이루어져 있다. 단어의 첫 글자부터 시작해 현재 위치의 글자에 해당하는 정확한 글자를 입력하면 다음 글자로 넘어가며, 모든 글자를 입력했다면 엔터 키를 눌러 다음 단어로 넘어가는 방식이다. 이 프로그램은 오타에 관대하기 때문에, 잘못된 글자를 입력하면 패널티 없이 무시되기만 한다. 즉, 단어들을 수열로 보았을 때 타자연습에 주어진 단어가 입력한 글자들을 모은 단어의 부분 수열인 경우 단어를 입력하는 데에 성공하는 것이다.
민규는 실력이 부족해 명진이를 이길 수 없자, 꼼수를 쓰기로 했다. 프로그램이 허술해 붙여넣기가 가능한 것을 발견한 민규는 하나의 단어만을 만들어, 계속 붙여넣는 것으로 모든 단어들을 순식간에 통과하려고 한다. 즉, 민규의 단어는 단어들을 수열로 보았을 때 개의 단어들을 모두 부분 수열로 가져야 한다. 이 때, 민규는 타자 속도가 느리므로 그 단어의 길이를 최소로 하고 싶다. 민규를 위해 사용할 단어를 구하는 프로그램을 작성하여라.
+첫 번째 줄에 단어의 수 이 주어진다.
+ +이후 개의 줄에 걸쳐 타자연습 단어를 나타내는 문자열 가 주어진다. 는 대문자 A, B, C, D로만 이루어져 있으며 길이는 이하이다.
첫 번째 줄에 사용할 문자열을 출력한다. 단, 가능한 문자열이 여럿 있을 경우 사전순으로 최소인 것을 출력해야 한다.
+5 +AACABBA +BACBA +DDDBBACB +CCCCBABD +DDDDDDD ++
6 +AAAAAAAAA +BBBBBBBBB +CCCCCCCCC +DDDDDDDDD +ABABABABA +CDCDCDCDC ++
6 +AAAAAAAAA +BBBBBBBBB +CCCCCCCCC +DDDDDDDDD +ACDBABBAC +CBDDDBBAA ++
AABCACCCDDDBBACBDDDD ++
AAAAABABABABABBBBBCCCCCDCDCDCDCDDDDD ++
AAAAAAABBBBCBCCCCCCCDDDBBABBACDDDDDD ++
수행해야 할 작업 N개 (3 ≤ N ≤ 10000)가 있다. 각각의 작업마다 걸리는 시간(1 ≤ 시간 ≤ 100)이 정수로 주어진다.
+ +몇몇 작업들 사이에는 선행 관계라는 게 있어서, 어떤 작업을 수행하기 위해 반드시 먼저 완료되어야 할 작업들이 있다. 이 작업들은 번호가 아주 예쁘게 매겨져 있어서, K번 작업에 대해 선행 관계에 있는(즉, K번 작업을 시작하기 전에 반드시 먼저 완료되어야 하는) 작업들의 번호는 모두 1 이상 (K-1) 이하이다. 작업들 중에는, 그것에 대해 선행 관계에 있는 작업이 하나도 없는 작업이 반드시 하나 이상 존재한다. (1번 작업이 항상 그러하다)
+ +모든 작업을 완료하기 위해 필요한 최소 시간을 구하여라. 물론, 서로 선행 관계가 없는 작업들은 동시에 수행 가능하다.
+첫째 줄에 N이 주어진다.
+ +두 번째 줄부터 N+1번째 줄까지 N개의 줄이 주어진다. 2번째 줄은 1번 작업, 3번째 줄은 2번 작업, ..., N+1번째 줄은 N번 작업을 각각 나타낸다. 각 줄의 처음에는, 해당 작업에 걸리는 시간이 먼저 주어지고, 그 다음에 그 작업에 대해 선행 관계에 있는 작업들의 개수(0 ≤ 개수 ≤ 100)가 주어진다. 그리고 선행 관계에 있는 작업들의 번호가 주어진다.
+첫째 줄에 모든 작업을 완료하기 위한 최소 시간을 출력한다.
+7 +5 0 +1 1 1 +3 1 2 +6 1 1 +1 2 2 4 +8 2 2 4 +4 3 3 5 6 ++
23 ++
올 골드 럭비 클럽의 회원들은 성인부 또는 청소년부로 분류된다.
+ +나이가 17세보다 많거나, 몸무게가 80kg 이상이면 성인부이다. 그 밖에는 모두 청소년부이다. 클럽 회원들을 올바르게 분류하라.
+각 줄은 이름과 두 자연수로 이루어진다. 두 자연수는 순서대로 나이와 몸무게를 나타낸다. 입력의 마지막 줄은 # 0 0 이다. 이 입력은 처리하지 않는다.
+ +이름은 알파벳 대/소문자로만 이루어져 있고, 길이는 10을 넘지 않는다.
+입력 받은 각 회원에 대해 이름과 분류를 출력한다. 성인부 회원이면 'Senior', 청소년부 회원이면 'Junior'를 출력한다.
+Joe 16 34 +Bill 18 65 +Billy 17 65 +Sam 17 85 +# 0 0 ++
Joe Junior +Bill Senior +Billy Junior +Sam Senior ++
우리는 보통 10진법을 사용하지만 컴퓨터에서는 2, 8, 16진법이 사용된다. 그 외에도 여러 가지 진법을 생각해 볼 수 있다. 16진법의 경우에는 두 자리 수들을 알파벳 문자들로 나타내지만, 이 문제에서는 수 형태로 생각하기로 한다. 각각의 수들은 공백으로 구분하고, 전체를 괄호로 둘러 싼 다음에 그 뒤에는 진법을 적는다. 예를 들어 16진법으로 1A8D는 (1 10 8 13)16이 된다.
+ +공백이나 괄호를 생략하면 전체가 숫자로 구성된 문자열이 된다. 위의 예는 11081316이 된다. 만약 수가 이와 같은 형태로 주어진다면, 여기에 공백과 괄호를 적절히 추가하면 여러 가지 방법으로 수를 표현할 수 있다. 예를 들어 1234는 네 가지로 표현할 수 있는데, 각각 (1 2 3)4, (12)34, (1 2)34, (1)234가 된다.
+ +숫자로 된 문자열이 주어졌을 때, 가능한 표현 방법을 모두 구해내는 방법을 구하시오. 만약 실제 값이 같더라도 다른 형태로 표현된다면 여러 번 세도록 한다.
+ +단, 표현 방법들 중 불필요한 0이 사용되는 경우는 세지 않는다. 예를 들어 (0 3 6)8, (1 02 3)6, (3 2 1)07은 세지 않는다.
+첫째 줄에 숫자로 구성된 문자열이 주어진다. 그 길이는 35자를 넘지 않는다.
+첫째 줄에 답을 출력한다.
+1234 ++
201 ++
4 ++
0 ++
이 문제는 인터랙티브 문제다.
+ +국렬이는 이상 이하의 개의 자연수로 이루어진 두 배열 , 를 가지고 있다. 당신은 , 를 합쳤을 때 중간값을 구해야 한다. 중간값은 개 수들을 오름차순으로 정렬했을 때 번째 수를 중간값이라고 한다.
+ +국렬이는 인성이 나빠서 배열 , 를 당신에게 제공하지 않을 것이다. 그래도 약간의 자비가 있기에 특정 배열의 번째 수가 무엇인지 물어볼 기회를 줬다. 다만 40번까지 질문이 가능하며, 그 이상으로 질문할 경우 국렬이는 틀렸습니다로 당신을 때릴 것이다. 답을 출력하는 것은 질문 횟수에 포함되지 않는다.
+ +40번 이하로 질문해서 중간값을 구해보자.
+입력의 첫 줄에 배열의 길이 이 주어진다. 은 으로 표현할 수 있는 양의 정수만 주어진다. ()
+다음 중 하나를 표준 출력 스트림(stdout)으로 한 줄에 출력하여, 배열의 원소를 질문 할 수 있다.
+ +? A x : 배열 의 번째 수 ()? B x : 배열 의 번째 수 ()어떤 배열에서 번째 수는, 그 배열을 오름차순으로 정렬했을 때 번째인 수를 의미한다
+ +각 질문을 출력한 후에는 반드시 표준 출력 버퍼를 flush해 주어야 하고, 표준 입력 스트림(stdin)을 통해 질문에 대한 답을 입력받아야 한다. 질문에 대한 답을 입력받지 않으면 런타임에러를 받게 된다. 최대 질문 횟수는 40번으로, 그 이상으로 질문을 요청한 경우 틀렸습니다!를 받는다.
+ +만약 중간값을 알아낸 경우, 표준 출력 스트림으로 다음을 한 줄에 출력한다.
+ +! x : 배열 A, B를 합쳤을 때의 중앙값은 이다.그 후 반드시 표준 출력 버퍼를 flush해야 하고, 프로그램을 종료한다. 이것은 질문 횟수에 포함되지 않는다.
+ +언어별로 표준 출력 버퍼를 flush하는 방법은 다음과 같다.
+ +fflush(stdout)std::cout << std::flushSystem.out.flush()sys.stdout.flush()2 + +1 + +2 + +2 + +3 + ++
+ +? A 1 + +? A 2 + +? B 1 + +? B 2 + +! 2 ++
극악무도한 테러리스트 주현이가 도시를 습격했다. 습격받은 도시는 세로 칸, 가로 칸으로 이뤄진 격자 모양이며, 각 칸은 빈칸이거나 건물이 존재한다. 주현이는 자신이 만든 수제 폭탄을 건물이 없는 곳에 설치한다. 폭탄은 터질 때 상하좌우 각 방향에 대해 충격파가 퍼져나가는데, 충격파가 닿은 건물은 파괴되어 건물 잔해가 된다. 충격파는 건물 또는 건물 잔해에 닿고 난 뒤 소멸한다.
+ +이번 테러 사건 수사를 맡은 향빈이는 현장을 재구성하는 중이다. 건물 잔해의 위치를 통해 어떤 위치에서 폭탄이 터졌는지 알아내고자 한다. 아무리 생각해도 폭탄의 위치를 알아낼 수 없는 향빈이는 문제 해결의 대가인 당신을 찾아왔다. 습격받은 도시의 정보가 주어졌을 때, 주현이가 설치한 폭탄의 위치를 구해주자.
+다음과 같이 입력이 주어진다.
+ ++ +
+ +
개의 줄에 도시의 정보를 출력한다. 각 줄은 개의 문자를 포함하며 번째 줄 번째 문자는 도시의 세로 번째 가로 번째 칸에 대한 정보이다. 빈칸일 경우 ., 건물일 경우 O, 건물 잔해일 경우 X, 폭탄이 설치된 칸인 경우 B이다. 답이 여러 가지인 경우, 아무거나 출력한다.
. 또는 O 또는 X
+ . 면, 도시의 세로 번째 가로 번째 칸은 빈칸이다.O 면, 도시의 세로 번째 가로 번째 칸은 건물이다.X 면, 도시의 세로 번째 가로 번째 칸은 건물 잔해이다.5 +...XO +..XOO +...XO +O.... +OXX.. ++
.B.XO +..XOO +..BXO +O.... +OXX.. ++
민서는 강원대학교 컴퓨터공학과의 신임 교수이다. 그녀가 저술한 효율적인 택배 배달을 위한 최적 경로 설계에 관한 연구 논문은 아직도 널리 인용되고 있다. 오늘도 열심히 강의를 하던 민서는 놀라 자빠질 수밖에 없었다. 한 학생이 꾸벅꾸벅 졸다가 책상에 머리를 아주 세게 박았기 때문이다. 한시라도 수술이 시급한 상황, 민서는 의사가 되어 수술을 집도하기로 결심하였다.
+ +사람의 뇌는 수백억 개의 뉴런으로 구성되며, 각 뉴런은 시냅스를 통하여 연결된다. 민서의 진찰 결과, 학생은 뇌 속의 일부 뉴런의 연결이 끊어져 잠이 든 것으로 확인되었다. 끊어진 시냅스만 복구된다면 학생은 잠에서 깨어나겠지만, 알다시피 민서는 컴퓨터공학과 교수이다.
+ +민서는 끊어진 시냅스를 복구하는 대신 뇌 속의 모든 뉴런을 하나의 트리 형태로 연결해보고자 한다. 여기서 트리란 사이클이 존재하지 않는 연결 그래프를 의미한다.
+ +민서는 손기술이 뛰어나기 때문에 다음과 같은 연산을 무한히 수행할 수 있다. 연결되지 않은 두 뉴런을 연결하거나 이미 연결된 두 뉴런의 연결을 끊는다.
+ +뉴런의 연결 정보가 주어졌을 때, 모든 뉴런을 하나의 트리 형태로 연결하기 위하여 필요한 최소 연산 횟수를 구하는 프로그램을 작성하시오.
+첫 번째 줄에 뉴런의 개수 N과 시냅스의 개수 M이 주어진다.
+ +이후 M개의 줄에 걸쳐 시냅스로 연결된 두 뉴런의 번호 u, v가 주어진다.
+ +모든 입력은 공백으로 구분되어 주어진다.
+첫 번째 줄에 모든 뉴런을 트리 형태로 연결하기 위하여 필요한 최소 연산 횟수를 출력한다.
+입력의 양이 방대하므로 빠른 입력을 사용할 것을 권장한다.
+4 2 +1 2 +3 4 ++
1 ++
당신은 N개의 조약돌을 가지고 있다. 이 조약돌을 좌표평면의 격자점 위에 아무렇게나 떨어뜨렸다. 격자점이란, x좌표와 y좌표 모두가 정수인 지점을 말한다. 이를테면 (1, 1)이나 (0, -9)는 격자점이며, (-2, 3.5)이나 (π, 7.14)는 격자점이 아니다.
+ +모든 조약돌을 포함하는 가장 작은 직사각형을 생각할 수 있다. 예를 들어 세 개의 조약돌을 (2,4), (4, 8), (5,5)에 떨어뜨렸다면, 이 세 조약돌을 모두 포함하는 가장 작은 직사각형은 가로 3, 세로 4인 직사각형이다. 이 경우 직사각형의 둘레는 14가 된다. 직사각형의 가로와 세로 길이는 반드시 1 이상이어야 한다.
+ +조약돌의 개수 N이 주어졌을 때, 조약돌을 좌표평면의 격자점에 적절히 떨어뜨려서 모든 조약돌을 포함하는 직사각형의 둘레를 최소로 하는 프로그램을 작성하시오.
+첫째 줄에 조약돌의 개수 N(1 ≤ n ≤ 500,000,000)이 주어진다.
+첫째 줄에 최소 둘레를 출력한다.
+5 ++
14 ++
6 ++
12 ++
외판원 순회 문제는 영어로 Traveling Salesman problem (TSP) 라고 불리는 문제로 computer science 분야에서 가장 중요하게 취급되는 문제 중 하나이다. 여러 가지 변종 문제가 있으나, 여기서는 가장 일반적인 형태의 문제를 살펴보자.
+ +1번부터 N번까지 번호가 매겨져 있는 도시들이 있고, 도시들 사이에는 길이 있다. (길이 없을 수도 있다) 이제 한 외판원이 어느 한 도시에서 출발해 N개의 도시를 모두 거쳐 다시 원래의 도시로 돌아오는 순회 여행 경로를 계획하려고 한다. 단, 한 번 갔던 도시로는 다시 갈 수 없다. (맨 마지막에 여행을 출발했던 도시로 돌아오는 것은 예외) 이런 여행 경로는 여러 가지가 있을 수 있는데, 가장 적은 비용을 들이는 여행 계획을 세우고자 한다.
+ +각 도시간에 이동하는데 드는 비용은 행렬 W[i][j]형태로 주어진다. W[i][j]는 도시 i에서 도시 j로 가기 위한 비용을 나타낸다. 비용은 대칭적이지 않다. 즉, W[i][j] 는 W[j][i]와 다를 수 있다. 모든 도시간의 비용은 양의 정수이다. W[i][i]는 항상 0이다. 경우에 따라서 도시 i에서 도시 j로 갈 수 없는 경우도 있으며 이럴 경우 W[i][j]=0이라고 하자.
+ +N과 비용 행렬이 주어졌을 때, 가장 적은 비용을 들이는 외판원의 순회 여행 경로를 구하는 프로그램을 작성하시오.
+첫째 줄에 도시의 수 N이 주어진다. (2 ≤ N ≤ 16) 다음 N개의 줄에는 비용 행렬이 주어진다. 각 행렬의 성분은 1,000,000 이하의 양의 정수이며, 갈 수 없는 경우는 0이 주어진다. W[i][j]는 도시 i에서 j로 가기 위한 비용을 나타낸다.
+ +항상 순회할 수 있는 경우만 입력으로 주어진다.
+첫째 줄에 외판원의 순회에 필요한 최소 비용을 출력한다.
+4 +0 10 15 20 +5 0 9 10 +6 13 0 12 +8 8 9 0 ++
35 ++
수를 처리하는 것은 통계학에서 상당히 중요한 일이다. 통계학에서 N개의 수를 대표하는 기본 통계값에는 다음과 같은 것들이 있다. 단, N은 홀수라고 가정하자.
+ +N개의 수가 주어졌을 때, 네 가지 기본 통계값을 구하는 프로그램을 작성하시오.
+첫째 줄에 수의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 단, N은 홀수이다. 그 다음 N개의 줄에는 정수들이 주어진다. 입력되는 정수의 절댓값은 4,000을 넘지 않는다.
+첫째 줄에는 산술평균을 출력한다. 소수점 이하 첫째 자리에서 반올림한 값을 출력한다.
+ +둘째 줄에는 중앙값을 출력한다.
+ +셋째 줄에는 최빈값을 출력한다. 여러 개 있을 때에는 최빈값 중 두 번째로 작은 값을 출력한다.
+ +넷째 줄에는 범위를 출력한다.
+5 +1 +3 +8 +-2 +2 ++
1 +4000 ++
5 +-1 +-2 +-3 +-1 +-2 ++
3 +0 +0 +-1 ++
2 +2 +1 +10 ++
4000 +4000 +4000 +0 ++
-2 +-2 +-1 +2 ++
0 +0 +0 +1 ++
Ben heard about studies by Emmons and McCullough that suggest that intentionally practicing gratitude has a lasting effect on people's happiness. Since he wants to be happy too, he decided that at the end of each day he will think back over the past day and write down three things he is thankful for, one thing per line. At the end of days in which he practiced this exercise, he was curious to know which things appear the most on his list. Help Ben get the things he was grateful for most frequently.
+The input begins with one line containing two space-separated integers, and , in that order. Then follow lines containing Ben's notes from days. You may assume that the three lines that correspond to the same day contain no repetitions. That is, if you partition the input into chunks of consecutive lines, no chunk contains two identical lines.
+The output should represent the list of things that Ben is grateful for, ordered by frequency of appearance in Ben's list (with the most frequent item first). In case of two items with equal frequency, the most recent item should appear first. That is, in case of a tie in the number of appearances, the item whose last appearance is later in the input should appear earlier in the output. Finally, if there are more than different items in Ben's list, your output should contain only the first items (according to the required order).
+2 2 +Supportive parents +Being able to solve a hard problem +Good food +Fun game with friends +Good food +Being healthy ++
2 6 +Supportive parents +Being able to solve a hard problem +Good food +Fun game with friends +Good food +Being healthy ++
Good food +Being healthy ++
Good food +Being healthy +Fun game with friends +Being able to solve a hard problem +Supportive parents ++
피아노를 사랑하는 시은이는 매일 아침 피아노 체조를 한다. 시은이는 N개의 악보를 가지고 있으며, 1번부터 N번까지의 번호로 부른다. 각 악보는 1 이상 109 이하의 정수로 표현되는 난이도를 가지고 있다. 난이도를 나타내는 수가 클수록 어려운 악보이다. 1 ≤ x ≤ y ≤ N 을 만족하는 두 정수 x, y를 골라 x번부터 y번까지의 악보를 번호 순서대로 연주하는 것이 피아노 체조이다.
+ +시은이는 피아노 체조를 할 때, 지금 연주하는 악보가 바로 다음에 연주할 악보보다 어렵다면 실수를 한다. 다시 말하자면, i(x ≤ i < y)번 악보의 난이도가 i + 1번 악보의 난이도보다 높다면 실수를 한다. 특히, 마지막으로 연주하는 y번 악보에선 절대 실수하지 않는다. 시은이는 오늘도 피아노 체조를 하기 위해 두 정수 x와 y를 골랐고, 문득 궁금한 것이 생겼다. 오늘 할 피아노 체조에서 실수하는 곡은 몇 개나 될까?
+첫 번째 줄에 악보의 개수 N(1 ≤ N ≤ 100,000)이 주어진다.
+ +두 번째 줄에 1번 악보부터 N번 악보까지의 난이도가 공백을 구분으로 주어진다.
+ +세 번째 줄에 질문의 개수 Q(1 ≤ Q ≤ 100,000)이 주어진다.
+ +다음 Q개의 줄에 각 줄마다 두 개의 정수 x, y(1 ≤ x ≤ y ≤ N)가 주어진다.
+x번부터 y번까지의 악보를 순서대로 연주할 때, 몇 개의 악보에서 실수하게 될지 0 이상의 정수 하나로 출력한다. 각 출력은 개행으로 구분한다.
+9 +1 2 3 3 4 1 10 8 1 +5 +1 3 +2 5 +4 7 +9 9 +5 9 ++
6 +573 33283 5572 346 906 567 +5 +5 6 +1 3 +2 2 +1 6 +3 6 ++
0 +0 +1 +0 +3 ++
1 +1 +0 +3 +2 ++
한 배열 A[1], A[2], …, A[n]에 대해서, 부 배열은 A[i], A[i+1], …, A[j-1], A[j] (단, 1 ≤ i ≤ j ≤ n)을 말한다. 이러한 부 배열의 합은 A[i]+…+A[j]를 의미한다. 각 원소가 정수인 두 배열 A[1], …, A[n]과 B[1], …, B[m]이 주어졌을 때, A의 부 배열의 합에 B의 부 배열의 합을 더해서 T가 되는 모든 부 배열 쌍의 개수를 구하는 프로그램을 작성하시오.
+ +예를 들어 A = {1, 3, 1, 2}, B = {1, 3, 2}, T=5인 경우, 부 배열 쌍의 개수는 다음의 7가지 경우가 있다.
+ ++T(=5) = A[1] + B[1] + B[2] + = A[1] + A[2] + B[1] + = A[2] + B[3] + = A[2] + A[3] + B[1] + = A[3] + B[1] + B[2] + = A[3] + A[4] + B[3] + = A[4] + B[2]+
첫째 줄에 T(-1,000,000,000 ≤ T ≤ 1,000,000,000)가 주어진다. 다음 줄에는 n(1 ≤ n ≤ 1,000)이 주어지고, 그 다음 줄에 n개의 정수로 A[1], …, A[n]이 주어진다. 다음 줄에는 m(1 ≤ m ≤ 1,000)이 주어지고, 그 다음 줄에 m개의 정수로 B[1], …, B[m]이 주어진다. 각각의 배열 원소는 절댓값이 1,000,000을 넘지 않는 정수이다.
+첫째 줄에 답을 출력한다. 가능한 경우가 한 가지도 없을 경우에는 0을 출력한다.
+5 +4 +1 3 1 2 +3 +1 3 2 ++
7 ++
В финал конкурса Киноакадемии вышли лучших кинофильмов 2014 года. В конкурсе награждаются фильмы в двух номинациях: лучшая режиссура и лучший сценарий. По правилам конкурса в каждой номинации должен быть награжден ровно один фильм, причём в разных номинациях --- разные фильмы.
+ +В ходе многочисленных опросов зрителей и кинокритиков удалось собрать данные, показывающие, какой уровень ликования вызовет победа каждого фильма в каждой из номинаций. Дотошные журналисты на этом не остановились и дополнительно выяснили, каким будет уровень ликования, если тот или иной фильм не выиграет ни в одной из номинаций.
+ +Требуется написать программу, которая по результатам опросов определяет наибольший суммарный уровень ликования, которого можно добиться выбором фильмов для награждения в указанных номинациях.
+В первой строке входного файла задано целое число --- количество кинофильмов, участвующих в финале конкурса Киноакадемии. В следующих строках содержатся по три целых числа , , --- уровень ликования, если -й фильм не выиграет ни в одной из номинаций, уровень ликования, если этот фильм выиграет в номинации на лучшую режиссуру, и уровень ликования, если этот фильм выиграет в номинации на лучший сценарий.
+Первая строка выходного файла должна содержать одно число --- наибольший возможный суммарный уровень ликования. Вторая строка должна содержать два целых числа --- номера фильмов-победителей в номинациях лучшая режиссура и лучший сценарий соответственно. Фильмы нумеруются натуральными числами от 1 до . Если оптимальных способов выбора награждаемых фильмов несколько, можно вывести любой из них.
+В приведенном примере наибольший суммарный уровень ликования равен .
+3 +3 6 9 +1 5 7 +1 3 9 ++
17 +2 3 ++
효주는 포도주 시식회에 갔다. 그 곳에 갔더니, 테이블 위에 다양한 포도주가 들어있는 포도주 잔이 일렬로 놓여 있었다. 효주는 포도주 시식을 하려고 하는데, 여기에는 다음과 같은 두 가지 규칙이 있다.
+ +효주는 될 수 있는 대로 많은 양의 포도주를 맛보기 위해서 어떤 포도주 잔을 선택해야 할지 고민하고 있다. 1부터 n까지의 번호가 붙어 있는 n개의 포도주 잔이 순서대로 테이블 위에 놓여 있고, 각 포도주 잔에 들어있는 포도주의 양이 주어졌을 때, 효주를 도와 가장 많은 양의 포도주를 마실 수 있도록 하는 프로그램을 작성하시오.
+ +예를 들어 6개의 포도주 잔이 있고, 각각의 잔에 순서대로 6, 10, 13, 9, 8, 1 만큼의 포도주가 들어 있을 때, 첫 번째, 두 번째, 네 번째, 다섯 번째 포도주 잔을 선택하면 총 포도주 양이 33으로 최대로 마실 수 있다.
+첫째 줄에 포도주 잔의 개수 n이 주어진다. (1 ≤ n ≤ 10,000) 둘째 줄부터 n+1번째 줄까지 포도주 잔에 들어있는 포도주의 양이 순서대로 주어진다. 포도주의 양은 1,000 이하의 음이 아닌 정수이다.
+첫째 줄에 최대로 마실 수 있는 포도주의 양을 출력한다.
+6 +6 +10 +13 +9 +8 +1 ++
33+
N장의 카드가 있다. 각각의 카드는 차례로 1부터 N까지의 번호가 붙어 있으며, 1번 카드가 제일 위에, N번 카드가 제일 아래인 상태로 순서대로 카드가 놓여 있다.
+ +이제 다음과 같은 동작을 카드가 한 장 남을 때까지 반복하게 된다. 우선, 제일 위에 있는 카드를 바닥에 버린다. 그 다음, 제일 위에 있는 카드를 제일 아래에 있는 카드 밑으로 옮긴다.
+ +예를 들어 N=4인 경우를 생각해 보자. 카드는 제일 위에서부터 1234 의 순서로 놓여있다. 1을 버리면 234가 남는다. 여기서 2를 제일 아래로 옮기면 342가 된다. 3을 버리면 42가 되고, 4를 밑으로 옮기면 24가 된다. 마지막으로 2를 버리고 나면, 버린 카드들은 순서대로 1 3 2가 되고, 남는 카드는 4가 된다.
+ +N이 주어졌을 때, 버린 카드들을 순서대로 출력하고, 마지막에 남게 되는 카드를 출력하는 프로그램을 작성하시오.
+첫째 줄에 정수 N(1 ≤ N ≤ 1,000)이 주어진다.
+첫째 줄에 버리는 카드들을 순서대로 출력한다. 제일 마지막에는 남게 되는 카드의 번호를 출력한다.
+7 ++
1 3 5 7 4 2 6 ++
N개의 선분들이 2차원 평면상에 주어져 있다. 선분은 양 끝점의 x, y 좌표로 표현이 된다.
+ +두 선분이 서로 만나는 경우에, 두 선분은 같은 그룹에 속한다고 정의하며, 그룹의 크기는 그 그룹에 속한 선분의 개수로 정의한다. 두 선분이 만난다는 것은 선분의 끝점을 스치듯이 만나는 경우도 포함하는 것으로 한다.
+ +N개의 선분들이 주어졌을 때, 이 선분들은 총 몇 개의 그룹으로 되어 있을까? 또, 가장 크기가 큰 그룹에 속한 선분의 개수는 몇 개일까? 이 두 가지를 구하는 프로그램을 작성해 보자.
+첫째 줄에 N(1 ≤ N ≤ 3,000)이 주어진다. 둘째 줄부터 N+1번째 줄에는 양 끝점의 좌표가 x1, y1, x2, y2의 순서로 주어진다. 각 좌표의 절댓값은 5,000을 넘지 않으며, 입력되는 좌표 사이에는 빈칸이 하나 있다.
+첫째 줄에 그룹의 수를, 둘째 줄에 가장 크기가 큰 그룹에 속한 선분의 개수를 출력한다.
+3 +1 1 2 3 +2 1 0 0 +1 0 1 1 ++
3 +-1 -1 1 1 +-2 -2 2 2 +0 1 -1 0 ++
1 +3 ++
2 +2 ++
N장의 카드가 있다. 각각의 카드는 차례로 1부터 N까지의 번호가 붙어 있으며, 1번 카드가 제일 위에, N번 카드가 제일 아래인 상태로 순서대로 카드가 놓여 있다.
+ +이제 다음과 같은 동작을 카드가 한 장 남을 때까지 반복하게 된다. 우선, 제일 위에 있는 카드를 바닥에 버린다. 그 다음, 제일 위에 있는 카드를 제일 아래에 있는 카드 밑으로 옮긴다.
+ +예를 들어 N=4인 경우를 생각해 보자. 카드는 제일 위에서부터 1234 의 순서로 놓여있다. 1을 버리면 234가 남는다. 여기서 2를 제일 아래로 옮기면 342가 된다. 3을 버리면 42가 되고, 4를 밑으로 옮기면 24가 된다. 마지막으로 2를 버리고 나면, 남는 카드는 4가 된다.
+ +N이 주어졌을 때, 제일 마지막에 남게 되는 카드를 구하는 프로그램을 작성하시오.
+첫째 줄에 정수 N(1 ≤ N ≤ 500,000)이 주어진다.
+첫째 줄에 남게 되는 카드의 번호를 출력한다.
+6 ++
4 ++
2차원 평면상에 N(3 ≤ N ≤ 10,000)개의 점으로 이루어진 다각형이 있다. 이 다각형의 면적을 구하는 프로그램을 작성하시오.
+첫째 줄에 N이 주어진다. 다음 N개의 줄에는 다각형을 이루는 순서대로 N개의 점의 x, y좌표가 주어진다. 좌표값은 절댓값이 100,000을 넘지 않는 정수이다.
+첫째 줄에 면적을 출력한다. 면적을 출력할 때에는 소수점 아래 둘째 자리에서 반올림하여 첫째 자리까지 출력한다.
+4 +0 0 +0 10 +10 10 +10 0 ++
100.0 ++
드높은 남산 위에 우뚝 선
+ +송백은 흰 눈빛에 푸르고
+ +옛부터 흘러가는 한가람
+ +장 할 손 우리 학원 이룩한
+ +굳세고 다함 없는 거룩한 뜻이
+ +백이십년 빛난 역사 자랑이로세
+ +비바람 몰아쳐도 나가자
+ +공들여 쌓은 탑은 빛난다
+ +울려라 삼천리에 힘차게
+ +세워라 반석 위에
+ +선린의터를
+ +선린인터넷고등학교 학생들은 이미 잘 알고 있겠지만, 학교 교가를 부를 때는 마지막 5글자인 "선린의터를" 부분만 크고 우렁차게 불러야 한다.
+ +정휘는 여기에 영감을 받아, 문자열이 주어지면 마지막 5글자만 우렁차게 읽으려고 한다. 공백이 없는 문자열이 주어지면 마지막 5글자만 출력하는 프로그램을 작성해보자.
+첫 번째 줄에 문자열의 길이 이 주어진다.
+ +두 번째 줄에는 글자로 이루어진 문자열 가 주어진다.
+의 마지막 5글자를 출력한다.
++ +
문자열 는 알파벳 대문자, 알파벳 소문자, 쉼표(,), 마침표(.)로만 구성되어 있다. 쉼표와 마침표도 각각 한 글자로 센다.
+알파벳 대문자, 알파벳 소문자, 쉼표, 마침표의 아스키 코드는 각각 65-90, 97-122, 44, 46이다.
+12 +Sunrin,Hair. ++
Hair. ++
드높은 남산 위에 우뚝 선
+ +(중략)
+ +세워라 반석 위에
+ +선린의 터를
+ +1개 이상의 문장들이 주어진다. 아래 규칙에 따라 문장들의 중간 부분을 적당히 생략해 25글자 이내로 요약해서 출력하는 프로그램을 작성하자.
+ +단, 입출력의 편의를 위해 문장들을 공백 없이 모두 붙여 구성한 문자열 가 대신 주어진다. 문자열의 첫 글자부터 가장 먼저 만나는 '.'(마침표)까지, 그리고 각 '.'의 다음 글자부터 가장 먼저 만나는 '.'까지를 한 문장으로 생각하기로 하자. 예를 들어 주어진 문자열 가 'IamInevitable.IamIronMan.'이라면 'IamInevitable.'이 한 문장, 'IamIronMan.'이 한 문장이다.
+ +규칙은 다음과 같다.
+ +첫 번째 줄에 문자열의 길이 이 주어진다.
+ +두 번째 줄에는 글자로 이루어진 문자열 가 주어진다.
+문제에서 제시된 규칙에 따라 를 25글자 이내로 요약해서 출력한다.
++ +
문자열 는 알파벳 대문자, 알파벳 소문자, 쉼표(,), 마침표(.)로만 구성되어 있다.
+ +문자열 의 첫 글자는 마침표(.)가 아니다.
+ +문자열 의 마지막 글자는 마침표(.)이다.
+알파벳 대문자, 알파벳 소문자, 쉼표, 마침표의 아스키 코드는 각각 65-90, 97-122, 44, 46이다.
+11 +IamIronMan. ++
26 +And,IamIronMan.IamIronMan. ++
29 +IamInevitable.And,IamIronMan. ++
IamIronMan. ++
And,IamIron...IamIronMan. ++
IamInevit......amIronMan. ++
어떤 자연수 N이 있을 때, 그 자연수 N의 분해합은 N과 N을 이루는 각 자리수의 합을 의미한다. 어떤 자연수 M의 분해합이 N인 경우, M을 N의 생성자라 한다. 예를 들어, 245의 분해합은 256(=245+2+4+5)이 된다. 따라서 245는 256의 생성자가 된다. 물론, 어떤 자연수의 경우에는 생성자가 없을 수도 있다. 반대로, 생성자가 여러 개인 자연수도 있을 수 있다.
+ +자연수 N이 주어졌을 때, N의 가장 작은 생성자를 구해내는 프로그램을 작성하시오.
+첫째 줄에 자연수 N(1 ≤ N ≤ 1,000,000)이 주어진다.
+첫째 줄에 답을 출력한다. 생성자가 없는 경우에는 0을 출력한다.
+216 ++
198 ++
You are implementing an application for a mobile phone, which has a black-and-white screen. The x-coordinates of the screen start from the left and the y-coordinates from the top, as shown in the figures. For the application, you need various images, which are not all of the same size. Instead of storing the images, you want to create the images using the phone’s graphics library. You may assume that at the start of drawing an image, all pixels of the screen are white. The only graphics operation in the phone’s library is XOR(L,R,T,B), which will reverse the pixel values in the rectangle with top left coordinate (L,T) and bottom right coordinate (R,B), where L stands for the left, T for the top, R for the right and B for the bottom coordinate. Note that in some other graphics libraries the order of the arguments is different.
As an example, consider the image in Figure-3. Applying XOR(2,4,2,6) to an all white image gives the image in Figure-1. Applying XOR(3,6,4,7) to the image of Figure-1 gives the image in Figure-2, and applying XOR(1,3,3,5) to the image in Figure-2 finally gives the image in Figure-3
| Figure-1 | +Figure-2 | +Figure-3 | +
Given a set of black-and-white pictures, your task is to generate each picture from an initially white screen using as few XOR calls as you can. You are given the input files describing the images, and you are to submit files including the required XOR call parameters, not a program to create these files.
You are given 10 problem instances in the text files named xor1.in to xor10.in. Each input file is organized as follows. The first line of an input file contains one integer N, 5 ≤ N ≤ 2000, meaning that there are N rows and N columns in the image. The remaining lines represent the rows of the image from top to bottom. Each line contains N integers: the pixel values in the row from left to right. Each of these integers is either a 0 or a 1, where 0 represents a white pixel and 1 represents a black pixel.
+The first line contains an integer K: the number of XOR calls specified in the file. The following K lines represent these calls from the first call to the last call to be executed. Each of these K lines contains four integers: the XOR call parameters L, R, T, B in that order.
7 +0 0 0 0 0 0 0 +0 1 1 1 0 0 0 +1 0 0 1 0 0 0 +1 0 1 0 1 1 0 +1 0 1 0 1 1 0 +0 1 0 0 1 1 0 +0 0 1 1 1 1 0 ++
3 +2 4 2 6 +3 6 4 7 +1 3 3 5 ++
스도쿠는 매우 간단한 숫자 퍼즐이다. 9×9 크기의 보드가 있을 때, 각 행과 각 열, 그리고 9개의 3×3 크기의 보드에 1부터 9까지의 숫자가 중복 없이 나타나도록 보드를 채우면 된다. 예를 들어 다음을 보자.
+ +위 그림은 참 잘도 스도쿠 퍼즐을 푼 경우이다. 각 행에 1부터 9까지의 숫자가 중복 없이 나오고, 각 열에 1부터 9까지의 숫자가 중복 없이 나오고, 각 3×3짜리 사각형(9개이며, 위에서 색깔로 표시되었다)에 1부터 9까지의 숫자가 중복 없이 나오기 때문이다.
+ +하다 만 스도쿠 퍼즐이 주어졌을 때, 마저 끝내는 프로그램을 작성하시오.
+9개의 줄에 9개의 숫자로 보드가 입력된다. 아직 숫자가 채워지지 않은 칸에는 0이 주어진다.
+9개의 줄에 9개의 숫자로 답을 출력한다. 답이 여러 개 있다면 그 중 사전식으로 앞서는 것을 출력한다. 즉, 81자리의 수가 제일 작은 경우를 출력한다.
+103000509 +002109400 +000704000 +300502006 +060000050 +700803004 +000401000 +009205800 +804000107 ++
143628579 +572139468 +986754231 +391542786 +468917352 +725863914 +237481695 +619275843 +854396127 ++
N명의 학생들을 키 순서대로 줄을 세우려고 한다. 각 학생의 키를 직접 재서 정렬하면 간단하겠지만, 마땅한 방법이 없어서 두 학생의 키를 비교하는 방법을 사용하기로 하였다. 그나마도 모든 학생들을 다 비교해 본 것이 아니고, 일부 학생들의 키만을 비교해 보았다.
+ +일부 학생들의 키를 비교한 결과가 주어졌을 때, 줄을 세우는 프로그램을 작성하시오.
+첫째 줄에 N(1 ≤ N ≤ 32,000), M(1 ≤ M ≤ 100,000)이 주어진다. M은 키를 비교한 횟수이다. 다음 M개의 줄에는 키를 비교한 두 학생의 번호 A, B가 주어진다. 이는 학생 A가 학생 B의 앞에 서야 한다는 의미이다.
+ +학생들의 번호는 1번부터 N번이다.
+첫째 줄에 학생들을 앞에서부터 줄을 세운 결과를 출력한다. 답이 여러 가지인 경우에는 아무거나 출력한다.
+3 2 +1 3 +2 3 ++
4 2 +4 2 +3 1 ++
1 2 3 ++
4 2 3 1 ++
길이가 인 수열 가 있다. 수열 는 1 이상인 정수로 이루어져 있다.
+ +수열 에서 원하는 위치에 있는 수를 골라 최대 번 삭제를 할 수 있다.
+ +예를 들어, 수열 가 다음과 같이 구성되어 있다고 가정하자.
+ ++수열 S : 1 2 3 4 5 6 7 8+ +
수열 에서 4번째에 있는 4를 지운다고 하면 아래와 같다.
+ ++수열 S : 1 2 3 5 6 7 8+ +
수열 에서 최대 번 원소를 삭제한 수열에서 짝수로 이루어져 있는 연속한 부분 수열 중 가장 긴 길이를 구해보자.
+수열 의 길이 와 삭제할 수 있는 최대 횟수인 가 공백으로 구분되어 주어진다.
+ +두 번째 줄에는 수열 를 구성하고 있는 개의 수가 공백으로 구분되어 주어진다.
+수열 에서 최대 번 원소를 삭제한 수열에서 짝수로 이루어져 있는 연속한 부분 수열 중 가장 긴 길이를 출력한다.
+8 2 +1 2 3 4 5 6 7 8 ++
3 ++
개의 마을이 일렬로 1번부터 번까지 순서대로 산등성이를 따라 있다. 각 마을의 높이는 1 이상 이하의 자연수 중 하나이며 서로 다르다. 외침을 막기 위해 마을을 여러 구간으로 나누어, 각 구간의 가장 높은 마을에 봉화대를 설치하려 한다. 각 구간은 하나 이상의 연속된 마을을 포함해야 하고, 각 마을은 정확히 하나의 구간에 포함되어야 한다. 봉화대의 효율적인 상호 통신을 위해, 봉화대가 설치된 마을의 높이는 번호의 오름차순으로 봤을 때 증가해야 한다. 전략 도모를 위해 가능한 구간 배치의 개수를 파악해보고자 한다.
+ +| 그림 H.1: 조건을 만족한 봉화대 설치 예시 | +그림 H.2: 조건을 만족하지 않은 봉화대 설치 예시 | +
첫째 줄에는 마을의 개수를 의미하는 정수 이 주어진다. ()
+ +둘째 줄에는 각 마을의 높이를 의미하는 개의 정수 이 공백으로 구분되어 주어진다. ()
+ +는 번째 마을의 높이를 의미하며 서로 다르다.
+조건을 만족하며 개의 마을을 구간으로 나누는 방법의 가짓수를 로 나눈 나머지를 출력한다.
+첫 번째 예제의 가능한 모든 배치는 (1 / 4 / 2 5 3), (1 / 4 2 / 5 3), (1 / 4 2 5 3), (1 4 / 2 5 3), (1 4 2 / 5 3), (1 4 2 5 3) 이다. /는 구간의 경계이며, 봉화대는 밑줄로 강조된 높이의 마을에 설치된다.
+5 +1 4 2 5 3 ++
3 +3 2 1 ++
8 +6 3 1 7 2 5 4 8 ++
6 ++
1 ++
20 ++
위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌을 때, 벌집의 중앙 1에서 N번 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나가는지(시작과 끝을 포함하여)를 계산하는 프로그램을 작성하시오. 예를 들면, 13까지는 3개, 58까지는 5개를 지난다.
+첫째 줄에 N(1 ≤ N ≤ 1,000,000,000)이 주어진다.
+입력으로 주어진 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나는지 출력한다.
+13 ++
3 ++
n가지 종류의 동전이 있다. 이 동전들을 적당히 사용해서, 그 가치의 합이 k원이 되도록 하고 싶다. 그러면서 동전의 개수가 최소가 되도록 하려고 한다. 각각의 동전은 몇 개라도 사용할 수 있다.
+첫째 줄에 n, k가 주어진다. (1 ≤ n ≤ 100, 1 ≤ k ≤ 10,000) 다음 n개의 줄에는 각각의 동전의 가치가 주어진다. 동전의 가치는 100,000보다 작거나 같은 자연수이다. 가치가 같은 동전이 여러 번 주어질 수도 있다.
+첫째 줄에 사용한 동전의 최소 개수를 출력한다. 불가능한 경우에는 -1을 출력한다.
+3 15 +1 +5 +12 ++
3 ++
현욱은 형과 숨바꼭질을 하고 있다. 현욱은 현재 번 지점에 있고, 형은 ()번 지점에 있다.
+ +현욱은 점프를 좋아해서 항상 점프를 하면서 움직인다. 현욱의 맨 처음 점프는 만큼의 거리를 움직인다. 그리고 현욱은 점프를 하면 할 수록 신이 나서, 점프할 때마다 이전에 점프할 때 뛴 거리의 두 배만큼의 거리를 움직인다.
+ +현욱의 형이 있는 위치가 주어졌을 때, 현욱이 형을 찾기 위해 필요한 최소 점프 횟수를 구해보자.
+첫째 줄에 현욱의 형이 있는 위치 가 주어진다().
+첫째 줄에 현욱이 형이 있는 위치에 도달하기 위해 필요한 최소 점프 횟수를 출력한다. 만약 도달할 수 있는 방법이 없다면 을 출력한다.
+3 ++
-7 ++
2 ++
2 ++
3 ++
-1 ++
가톨릭대학교 축제에 N개의 시식코너가 열렸다.
+ +최대한 많은 양의 음식을 먹고 싶은 아리는 방문한 시식코너에 남아있는 가능한 모든 음식들을 먹으려 한다. 하지만 연속으로 3개의 시식코너를 방문하면 눈치가 보이기 때문에 이럴 경우 최소 1번은 시식을 하지 않고 시식코너를 지나가야 한다. 예를 들어 1번과 2번 시식코너에서 시식했으면 2번 연속으로 시식했기 때문에 3번 시식코너는 방문할 수 없다.
+ +아리는 식욕에 비해 장이 약해 잘 체하기 때문에 연속해서 시식할 경우 연속된 시식코너 중 2번째 시식코너에서는 그 시식코너에서 제공하는 총 음식 개수의 1/2개밖에 먹지 못한다. 단 음식의 개수가 홀수일 경우 음식의 개수를 2로 나누었을 때 몫만큼의 음식만 먹을 수 있다.
+ +올해 가톨릭대학교 축제에는 사람들이 많이 몰렸기 때문에 음식이 0개인 시식코너가 있을 수 있다. 축제에서 진행하는 총 시식코너의 개수와 각 시식코너에서 시식할 수 있는 음식의 개수가 주어졌을 때 아리가 먹을 수 있는 음식의 최대 개수를 구하여라.
+첫째 줄에 시식코너의 개수 N이 주어진다(1 ≤ N ≤ 100,000) 둘째 줄부터 N+1번째 줄까지 각 시식코너에서 제공하는 음식의 개수가 순서대로 주어진다. 음식의 개수는 1,000이하의 음이 아닌 정수이다.
+첫째 줄에 아리가 최대로 먹을 수 있는 음식의 개수를 출력한다.
+6 +1 +2 +4 +3 +2 +2 ++
8 +5 +6 +2 +1 +4 +5 +3 +2 ++
8 ++
16 ++
두 수 A, B를 입력받아, A+B, A-B, A×B를 구하는 프로그램을 작성하시오.
+첫째 줄에 A가, 둘째 줄에 B가 주어진다. 각각의 수는 10진수로 1,000자리를 넘지 않으며 양수와 음수가 모두 주어질 수 있다.
+첫째 줄에 A+B, 둘째 줄에 A-B, 셋째 줄에 A×B를 출력한다. 각각을 출력할 때, 답이 0인 경우를 제외하고는 0으로 시작하게 해서는 안 된다(1을 01로 출력하면 안 된다는 의미).
+1 +-1 ++
0 +2 +-1 ++
Bruno and his friends are playing with water guns. They are passionate gamers, which is why this is not a regular water gun game, but is in fact very similar to video-games. They even hired a moderator for the game.
+ +At the beginning of the game, the players are divided into two teams: pineapples and blueberries. During the game, the moderator keeps track of every time some player sprays some other player, writing down the time when it happened. Just like in video-games, the players acquire points. When a player from some team sprays someone from the opposing team, their team receives 100 points. However, if within 10 seconds the same player again sprays someone from the opposing team, this is counted as a double-spray and their team receives an additional 50 points. A player can achieve multiple double-sprays in a row, each worth an additional 50 points for their team.
+The first line contains the integer n (1 ≤ n ≤ 100), the number of sprays that happened during the game.
+ +Each of the following n lines contains three integers ti, ai, bi (0 ≤ ti ≤ 1000, 1 ≤ ai, bi ≤ 8) which denote that player ai sprayed player bi at time ti (in seconds).
+ +Labels of the players from team pineapple are positive integers from 1 to 4, while the labels of the players from team blueberry are the positive integers from 5 to 8. The players ai and bi are guranteed to be from different teams.
+ +The numbers ti are distinct and are ordered increasingly.
+The first and only line should contain two numbers: the total score of team pineapple and the total score of team blueberry.
+Clarification of the first example: At seconds 10 and 20, player 1 sprayed players 6 and 7 from the other team. For each spraying the pineapples received 100 points. As the sprays happened within 10 seconds, the team receieved an additional 50 poitns (250 = 2 · 100 + 50). Team blueberries sprayed only one player from the opposing team, which is why they received only 100 points.
+ +Clarification of the second example: Player 2 achieved two double-sprays in a row, which is why team pineapple got a total of 3·100+2·50 = 400 points.
+3 +10 1 6 +20 1 7 +21 8 1 ++
3 +10 2 5 +15 2 6 +25 2 5 ++
2 +10 5 2 +11 6 3 ++
250 100 ++
400 0 ++
0 200 ++
N(1 ≤ N ≤ 100,000)개의 정수들이 있을 때, a번째 정수부터 b번째 정수까지 중에서 제일 작은 정수, 또는 제일 큰 정수를 찾는 것은 어려운 일이 아니다. 하지만 이와 같은 a, b의 쌍이 M(1 ≤ M ≤ 100,000)개 주어졌을 때는 어려운 문제가 된다. 이 문제를 해결해 보자.
+ +여기서 a번째라는 것은 입력되는 순서로 a번째라는 이야기이다. 예를 들어 a=1, b=3이라면 입력된 순서대로 1번, 2번, 3번 정수 중에서 최소, 최댓값을 찾아야 한다. 각각의 정수들은 1이상 1,000,000,000이하의 값을 갖는다.
+첫째 줄에 N, M이 주어진다. 다음 N개의 줄에는 N개의 정수가 주어진다. 다음 M개의 줄에는 a, b의 쌍이 주어진다.
+M개의 줄에 입력받은 순서대로 각 a, b에 대한 답을 최솟값, 최댓값 순서로 출력한다.
+10 4 +75 +30 +100 +38 +50 +51 +52 +20 +81 +5 +1 10 +3 5 +6 9 +8 10 ++
5 100 +38 100 +20 81 +5 81 ++
하루 종일 숫자만 보다가 정신이 나가버린 사람이 무시무시한 일을 저질러 버렸다. 숫자가 보기 싫으면 없애면 된다고 생각하며 아래와 같은 무시무시한 문자열을 쓴 것이다.
+ +ONETWOTHREEFOUR+TWOTHREEFOURFIVE=
그렇다. 숫자만 안 보이면 된다. 그래서, 아래의 표를 보고 숫자를 모두 영단어로 바꾸었다.
+ +| 숫자 | +영단어 | +
0 |
+ ZERO |
+
1 |
+ ONE |
+
2 |
+ TWO |
+
3 |
+ THREE |
+
4 |
+ FOUR |
+
5 |
+ FIVE |
+
6 |
+ SIX |
+
7 |
+ SEVEN |
+
8 |
+ EIGHT |
+
9 |
+ NINE |
+
그런데 이런, 문자열을 보다가 그만 문자열을 적은 사람이 정신을 잃었다. 우리가 문자열을 보고 원래의 식을 계산해서 알려주자. 변환되기 전의 수식을 정확하게 판단하여 정답을 구할 수 있다면, 정답을 출력하자. 만약 변환되기 전의 수식으로 가능한 것이 없다면 "Madness!"를 출력하자.
변환되기 전의 수식은 양의 정수로 시작해서 양의 정수와 연산자가 번갈아서 등장하며, 마지막 연산자는 =이고, =은 수식의 마지막에만 등장한다. 등장하는 연산자는 +, -, x, /, =으로 총 5가지가 있다. 기존의 사칙연산 방식과는 다르게 앞에서부터 순서대로 계산이 이루어지며, / 연산의 결과로 정수가 아닌 수가 나오면 0에 가까운 방향으로 반올림된다. 예를 들어 1.8은 1로, -1.8은 -1로 반올림된다.
+영문 대문자 및 +,-,x,/,=로 이루어진 문자열이 주어진다. 문자열은 =로 끝나며, 연산자로 시작하지 않는다. =은 항상 문자열의 마지막에만 등장한다. 문자열의 시작 또는 연산자의 바로 다음에 "ZERO"가 등장하는 경우는 없다.
주어지는 문자열 의 길이는 이고, 문자열에 포함된 수는 이상 이하이다.
+변환되기 전의 수식으로 가능한 것이 없는 경우, Madness! 를 출력한다.
+ +가능한 수식이 있을 경우, 첫 번째 줄에는 그 수식을 출력하고, 두 번째 줄에는 식의 계산값을 모든 숫자를 다시 영단어로 변환하여 출력한다.
+정답 및 계산 과정 중에 나오는 수의 절댓값은 모두 보다 작다.
+ONETWOTHREEFOUR+FIVESIXSEVEN= ++
FIVEZEROxTWOTWO-ONEONEONEONE= ++
ONE-SIX/THREE= ++
ONE+-THREE= ++
ONETWOFIVENINEEIGHTSEVEN= ++
1234+567= +ONEEIGHTZEROONE ++
50x22-1111= +-ONEONE ++
1-6/3= +-ONE ++
Madness! ++
125987= +ONETWOFIVENINEEIGHTSEVEN ++
수직선에 n개의 점이 찍혀 있다. 각각의 점의 x좌표가 주어졌을 때, n2개의 모든 쌍에 대해서 거리를 더한 값을 구하는 프로그램을 작성하시오.
+ +즉, 모든 i, j에 대해서 |x[i] - x[j]|의 합을 구하는 것이다.
+첫째 줄에 n(1 ≤ n ≤ 10,000)이 주어진다. 다음 줄에는 x[1], x[2], x[3], …, x[n]이 주어진다. 각각은 0 이상 1,000,000,000 이하의 정수이다.
+첫째 줄에 답을 출력한다.
+5 +1 5 3 2 4 ++
40 ++
世の中には様々なプログラミングコンテストがある.例えば,情報オリンピック,ACM-ICPC,ICFP の 様に世界中の相手と競い合う物や, Supercomputing Contest,パソコン甲子園,EPOCH @まつやまの国内 大会などなど,枚挙にいとまがない.
+ +そのようなコンテストに参加していると自分でコンテストを開催したいと考える人もあらわれる.あな たの友人もそんな一人である.友人はコンテストの問題準備に忙しく,コンテストのログから参加者の得点 を計算するプログラムの作成をあなたに依頼してきた.是非とも友人のコンテストが成功するように,間 違いのない得点計算プログラムを作ってあげて欲しい.
+ +コンテストの参加者は N 人で,問題が M 問で,競技時間が T 秒である.参加者には 1 から N までの番 号が割り振られている.問題にも 1 から M までの番号が振られている.
+ +このコンテストでは,各参加者は問題毎に,問題文を閲覧し,問題を解き,解答のソースコードを提出 する.競技は時刻 0 からはじまり,時刻 T で終了する.参加者が問題を閲覧すると,時刻と参加者番号と 問題番号がログに 1 件の情報として記録される.参加者が解答ソースコードを提出すると,時刻と参加者 番号と問題番号と解答ソースコードの正誤がログに 1 件の情報として記録される.
+ +各参加者はコンテスト開始から 1 秒毎に「ある問題を閲覧する」か「ある問題のソースコードを提出す る」のいずれかを 1 回行うことが出来る.閲覧前にその問題のソースコードを提出する事や,正解後に再 度ソースコードを提出する事は出来ない.
+ +参加者 j が問題 i を,時刻 Sij に閲覧し,wij 回の不正解のソースコードを提出後,時刻 Eij に正解のソー スコードを提出したときの得点は,
+ +(pi − (Eij − Sij) − 120wij) と X のうち大きい方
+ +である.ただし,pi は問題 i の配点,X は問題番号に依存しない正解した時の最低得点である.
+ +競技終了までに,正解しなかった問題の得点は 0 点である.
+ +各参加者の得点は,その参加者の問題毎の得点の合計である.
+ +N, M, T, X, ログに含まれる情報の件数,各問題の配点,および,ログの内容が与えられたときに各参加 者の得点を計算するプログラムを作成せよ.
+標準入力から以下の入力を読み込め.
+ +標準出力に以下のデータを出力せよ.
+ +1 3 1200 30 8 +50 +1000 +800 +0 1 1 open +100 1 2 open +400 1 1 correct +500 1 2 incorrect +600 1 2 correct +700 1 3 open +800 1 3 incorrect +900 1 3 incorrect ++
3 2 1000 10 10 +878 +712 +0 2 1 open +0 1 1 open +0 3 1 open +100 3 1 correct +100 2 1 correct +100 1 2 open +200 2 2 open +200 1 2 incorrect +300 1 2 correct +300 2 2 correct ++
410 ++
392 +1390 +778 ++
사파리월드는 인터넷으로만 존재하는 미스테리한 나라이다. 사파리월드에는 2개의 서브도메인이 seunghwan.royal.gov.sw와 kyuhyun.royal.gov.sw 이 있는데, 이것이 couple.royal.gov.sw으로 합쳐질 것이다. 그러나 도메인 관리 센터 SWNIC(센터장: 김동규)에는 엄격한 룰이 있다. 두 서브도메인을 합칠 때, 유명도의 차이가 너무 차이나지 않을 경우에만 두 서브도메인을 결혼시키는 것이다. 서브도메인의 유명도는 정수이다. 두 서브도메인의 유명도가 주어졌을 때, 그 차이를 구하는 프로그램을 작성하시오.
+첫째 줄에 두 도메인의 유명도 N과 M이 주어진다. (-2,000,000,000 ≤ N, M ≤ 2,000,000,000)
+첫째 줄에 두 유명도의 차이 (|N-M|)을 출력한다.
+-2 5 ++
7 ++
오늘도 서준이는 알고리즘의 수행시간 수업 조교를 하고 있다. 아빠가 수업한 내용을 학생들이 잘 이해했는지 문제를 통해서 확인해보자.
+ +입력의 크기 n이 주어지면 MenOfPassion 알고리즘 수행 시간을 예제 출력과 같은 방식으로 출력해보자.
+ +MenOfPassion 알고리즘은 다음과 같다.
+ +
+MenOfPassion(A[], n) {
+ i = ⌊n / 2⌋;
+ return A[i]; # 코드1
+}
+첫째 줄에 입력의 크기 n(1 ≤ n ≤ 500,000)이 주어진다.
+첫째 줄에 코드1 의 수행 횟수를 출력한다.
+ +둘째 줄에 코드1의 수행 횟수를 다항식으로 나타내었을 때, 최고차항의 차수를 출력한다. 단, 다항식으로 나타낼 수 없거나 최고차항의 차수가 3보다 크면 4를 출력한다.
+1 ++
1 +0 ++
오늘도 서준이는 알고리즘의 수행시간 수업 조교를 하고 있다. 아빠가 수업한 내용을 학생들이 잘 이해했는지 문제를 통해서 확인해보자.
+ +입력의 크기 n이 주어지면 MenOfPassion 알고리즘 수행 시간을 예제 출력과 같은 방식으로 출력해보자.
+ +MenOfPassion 알고리즘은 다음과 같다.
+ +
+MenOfPassion(A[], n) {
+ sum <- 0;
+ for i <- 1 to n
+ sum <- sum + A[i]; # 코드1
+ return sum;
+}
+첫째 줄에 입력의 크기 n(1 ≤ n ≤ 500,000)이 주어진다.
+첫째 줄에 코드1 의 수행 횟수를 출력한다.
+ +둘째 줄에 코드1의 수행 횟수를 다항식으로 나타내었을 때, 최고차항의 차수를 출력한다. 단, 다항식으로 나타낼 수 없거나 최고차항의 차수가 3보다 크면 4를 출력한다.
+7 ++
7 +1 ++
오늘도 서준이는 알고리즘의 수행시간 수업 조교를 하고 있다. 아빠가 수업한 내용을 학생들이 잘 이해했는지 문제를 통해서 확인해보자.
+ +입력의 크기 n이 주어지면 MenOfPassion 알고리즘 수행 시간을 예제 출력과 같은 방식으로 출력해보자.
+ +MenOfPassion 알고리즘은 다음과 같다.
+ +
+MenOfPassion(A[], n) {
+ sum <- 0;
+ for i <- 1 to n
+ for j <- 1 to n
+ sum <- sum + A[i] × A[j]; # 코드1
+ return sum;
+}
+첫째 줄에 입력의 크기 n(1 ≤ n ≤ 500,000)이 주어진다.
+첫째 줄에 코드1 의 수행 횟수를 출력한다.
+ +둘째 줄에 코드1의 수행 횟수를 다항식으로 나타내었을 때, 최고차항의 차수를 출력한다. 단, 다항식으로 나타낼 수 없거나 최고차항의 차수가 3보다 크면 4를 출력한다.
+7 ++
49 +2 ++
오늘도 서준이는 알고리즘의 수행시간 수업 조교를 하고 있다. 아빠가 수업한 내용을 학생들이 잘 이해했는지 문제를 통해서 확인해보자.
+ +입력의 크기 n이 주어지면 MenOfPassion 알고리즘 수행 시간을 예제 출력과 같은 방식으로 출력해보자.
+ +MenOfPassion 알고리즘은 다음과 같다.
+ +
+MenOfPassion(A[], n) {
+ sum <- 0;
+ for i <- 1 to n - 1
+ for j <- i + 1 to n
+ sum <- sum + A[i] × A[j]; # 코드1
+ return sum;
+}
+첫째 줄에 입력의 크기 n(1 ≤ n ≤ 500,000)이 주어진다.
+첫째 줄에 코드1 의 수행 횟수를 출력한다.
+ +둘째 줄에 코드1의 수행 횟수를 다항식으로 나타내었을 때, 최고차항의 차수를 출력한다. 단, 다항식으로 나타낼 수 없거나 최고차항의 차수가 3보다 크면 4를 출력한다.
+7 ++
21 +2 ++
오늘도 서준이는 알고리즘의 수행시간 수업 조교를 하고 있다. 아빠가 수업한 내용을 학생들이 잘 이해했는지 문제를 통해서 확인해보자.
+ +입력의 크기 n이 주어지면 MenOfPassion 알고리즘 수행 시간을 예제 출력과 같은 방식으로 출력해보자.
+ +MenOfPassion 알고리즘은 다음과 같다.
+ +
+MenOfPassion(A[], n) {
+ sum <- 0;
+ for i <- 1 to n
+ for j <- 1 to n
+ for k <- 1 to n
+ sum <- sum + A[i] × A[j] × A[k]; # 코드1
+ return sum;
+}
+첫째 줄에 입력의 크기 n(1 ≤ n ≤ 500,000)이 주어진다.
+첫째 줄에 코드1 의 수행 횟수를 출력한다.
+ +둘째 줄에 코드1의 수행 횟수를 다항식으로 나타내었을 때, 최고차항의 차수를 출력한다. 단, 다항식으로 나타낼 수 없거나 최고차항의 차수가 3보다 크면 4를 출력한다.
+7 ++
343 +3 ++
오늘도 서준이는 알고리즘의 수행시간 수업 조교를 하고 있다. 아빠가 수업한 내용을 학생들이 잘 이해했는지 문제를 통해서 확인해보자.
+ +입력의 크기 n이 주어지면 MenOfPassion 알고리즘 수행 시간을 예제 출력과 같은 방식으로 출력해보자.
+ +MenOfPassion 알고리즘은 다음과 같다.
+ +
+MenOfPassion(A[], n) {
+ sum <- 0;
+ for i <- 1 to n - 2
+ for j <- i + 1 to n - 1
+ for k <- j + 1 to n
+ sum <- sum + A[i] × A[j] × A[k]; # 코드1
+ return sum;
+}
+첫째 줄에 입력의 크기 n(1 ≤ n ≤ 500,000)이 주어진다.
+첫째 줄에 코드1 의 수행 횟수를 출력한다.
+ +둘째 줄에 코드1의 수행 횟수를 다항식으로 나타내었을 때, 최고차항의 차수를 출력한다. 단, 다항식으로 나타낼 수 없거나 최고차항의 차수가 3보다 크면 4를 출력한다.
+7 ++
35 +3 ++
Предприемачът Петко съхранява на компютъра си сведения за доходите на своята фирма за всеки ден от нейната работа от момента на основаването и. Тъй като в последно време нещата при него не вървят добре, за повдигане на настроението, Петко решил да направи следния отчет: за всеки ден намира най-близкия предшестващ ден, в който доходът е бил още по-малък, отколкото в сегашния ден.
+ +Напишете програма report, която ще помогне на Петко да сформира този доклад.
+На първия ред на стандартния вход е записано едно цяло число N – брой на дните.
+ +На следващия ред са записани N цели числа p1, p2, ..., pN – доход на фирмата в 1-я, 2-рия, ..., N-тия ден. Числата са разделени с по един интервал.
+На един ред на стандартния изход програмата трябва да изведе N цели числа, където i-тото число е най-големият номер на ден, по-малък от i, в който доходът е бил по-малък, отколкото в деня i. Числата са разделени с по един интервал. След последното изведено число също има интервал.
+ +Ако такъв ден не съществува, да се изведе 0.
+5 +2 5 3 4 5 ++
0 1 1 3 4 ++
오늘도 서준이는 점근적 표기 수업 조교를 하고 있다. 아빠가 수업한 내용을 학생들이 잘 이해했는지 문제를 통해서 확인해보자.
+ +알고리즘의 소요 시간을 나타내는 O-표기법(빅-오)을 다음과 같이 정의하자.
+ +O(g(n)) = {f(n) | 모든 n ≥ n0에 대하여 f(n) ≤ c × g(n)인 양의 상수 c와 n0가 존재한다}
+ +이 정의는 실제 O-표기법(https://en.wikipedia.org/wiki/Big_O_notation)과 다를 수 있다.
+ +함수 f(n) = a1n + a0, 양의 정수 c, n0가 주어질 경우 O(n) 정의를 만족하는지 알아보자.
+첫째 줄에 함수 f(n)을 나타내는 정수 a1, a0가 주어진다. (0 ≤ |ai| ≤ 100)
+ +다음 줄에 양의 정수 c가 주어진다. (1 ≤ c ≤ 100)
+ +다음 줄에 양의 정수 n0가 주어진다. (1 ≤ n0 ≤ 100)
+f(n), c, n0가 O(n) 정의를 만족하면 1, 아니면 0을 출력한다.
+7 7 +8 +1 ++
7 7 +8 +10 ++
0 ++
1 ++
오늘도 서준이는 점근적 표기 수업 조교를 하고 있다. 아빠가 수업한 내용을 학생들이 잘 이해했는지 문제를 통해서 확인해보자.
+ +알고리즘의 소요 시간을 나타내는 O-표기법(빅-오)은 다음과 같이 정의한다.
+ +O(g(n)) = {f(n) | 모든 n ≥ n0에 대하여 f(n) ≤ c × g(n)인 양의 상수 c와 n0가 존재한다}
+ +이 정의는 실제 O-표기법(https://en.wikipedia.org/wiki/Big_O_notation)과 다를 수 있다.
+ +함수 f(n) = a2n2 + a1n + a0, 양의 정수 c, n0가 주어질 경우 O(n2) 정의를 만족하는지 알아보자.
+첫째 줄에 함수 f(n)을 나타내는 정수 a2, a1, a0가 주어진다. (0 ≤ |ai| ≤ 100)
+ +다음 줄에 양의 정수 c가 주어진다. (1 ≤ c ≤ 100)
+ +다음 줄에 양의 정수 n0가 주어진다. (1 ≤ n0 ≤ 100)
+f(n), c, n0가 O(n2) 정의를 만족하면 1, 아니면 0을 출력한다.
+1 -2 7 +2 +1 ++
1 -2 7 +2 +3 ++
0 ++
1 ++
푸앙이 게임에 참가한 영재는 유리 징검다리 게임을 통과해야 한다.
+ +유리 징검다리 게임의 규칙은 간단하다. 총 N번의 걸음을 통해 건널 수 있고, 각 걸음마다 M개의 칸이 있다. 영재는 시작점(N - 1 번째 줄)의 한 칸에서 건너기 시작해 이후 앞의 인접한 최대 3개의 유리 중 하나를 선택해 건너갈 수 있다. 밟은 칸이 강화유리라면 안전하게 건널 수 있지만, 일반 유리는 밟을 수 없다.
+ +다음은 N = 3, M = 5인 어느 순간에 영재가 가능한 이동을 나타낸 그림이다.
+ +다리의 정보가 주어지면, 영재가 다리를 무사히 건널 수 있는 경우의 수를 알아내보자.
+첫 줄에 N과 M(1 ≤ N, M ≤ 1,000)이 공백으로 구분되어 주어지고, 그 뒤에는 N줄에 걸쳐 다리의 정보가 주어진다.
+ +강화유리의 경우 1, 일반 유리의 경우 0으로 주어진다.
영재가 무사히 다리를 건널 수 있는 경우의 수를 1,000,000,007로 나눈 나머지를 출력한다.
+3 2 +0 1 +1 0 +0 1 ++
5 5 +1 0 1 0 1 +0 0 1 1 1 +1 0 1 0 0 +0 1 1 0 1 +1 0 1 0 1 ++
4 4 +1 1 1 1 +1 0 0 1 +1 0 0 1 +1 1 1 1 ++
1 ++
9 ++
8 ++
오늘도 서준이는 동적 프로그래밍 수업 조교를 하고 있다. 아빠가 수업한 내용을 학생들이 잘 이해했는지 문제를 통해서 확인해보자.
+ +오늘은 n의 피보나치 수를 재귀호출과 동적 프로그래밍으로 구하는 알고리즘을 배웠다. 재귀호출에 비해 동적 프로그래밍이 얼마나 빠른지 확인해 보자. 아래 의사 코드를 이용하여 n의 피보나치 수를 구할 경우 코드1 코드2 실행 횟수를 출력하자.
+ +피보나치 수 재귀호출 의사 코드는 다음과 같다.
+ +
+fib(n) {
+ if (n = 1 or n = 2)
+ then return 1; # 코드1
+ else return (fib(n - 1) + fib(n - 2));
+}
+
+피보나치 수 동적 프로그래밍 의사 코드는 다음과 같다.
+ +
+fibonacci(n) {
+ f[1] <- f[2] <- 1;
+ for i <- 3 to n
+ f[i] <- f[i - 1] + f[i - 2]; # 코드2
+ return f[n];
+}
+첫째 줄에 n(5 ≤ n ≤ 40)이 주어진다.
+코드1 코드2 실행 횟수를 한 줄에 출력한다.
+5 ++
30 ++
5 3 ++
832040 28 ++
Alice와 Bob은 각자 n장의 카드를 갖고 있는데 각 카드에는 보다 크거나 같고, 보다 작거나 같은 숫자가 하나씩 적혀 있다. 두 사람은 각자 자신이 가진 카드를 이용해서 최대 자리의 수를 만들 수 있고, 더 큰 수를 만든 사람이 이긴다.
+ +Bob은 아직 어려서 어떻게 큰 수를 만드는지 잘 모른다. 대신, 자신이 가진 카드를 바닥에 좌우로 순서대로 나열한 뒤, 좌에서 우로 읽었을 때 만들어지는 수와 우에서 좌로 읽었을 때 만들어지는 수 중 아무 수나 고르는 전략을 택한다. 예를 들어, Bob이 바닥에 나열한 카드의 순서가 라면 Bob은 좌-우 순서대로 를 만들 수도 있고 혹은 우-좌 순서대로 를 만들 수도 있다.
+ +Alice는 동생인 Bob이 이기도록 해주고 싶어서 아래 규칙에 따라 플레이 하기로 했다:
+ +예를 들어 위의 예제의 경우 Bob은 순서로 카드를 바닥에 나열했고, Alice가 가진 카드는 이라 하자.
+ +다른 예로, Bob이 를 가지고 있고 Alice가 를 가지고 있다하자.
+ +입력으로 과 두 사람이 가진 카드에 적힌 값이 주어졌을 때, Alice가 만들 수 있는 가장 큰 수를 구해보자.
+첫 줄에 테스트 케이스의 수 가 주어진다. 각 테스트 케이스는 세 줄에 걸쳐 주어진다.
+ +첫째 줄에 이 주어진다.
+ +둘째 줄에 Bob이 가진 카드에 적힌 숫자가 공백없이 주어진다. Bob이 이 순서대로 바닥에 카드를 내려놓는다.
+ +셋째 줄에 Alice가 가진 카드에 적힌 숫자가 공백없이 주어진다.
+각 테스트 케이스의 정답을 각 줄에 출력한다.
+5 +2 +99 +99 +3 +212 +222 +3 +234 +123 +4 +4123 +2345 +8 +12345678 +99999999 ++
9 +22 +231 +2543 +9999999 ++
프로젝트 하느라 바쁜 득수는 밥 먹을 시간이 부족하다. 그래서 주로 찾는 식당 네 개 중 하나에서 하루에 한 번 밥을 먹는다. 귀찮으면 굶을 때도 있다.
+ +늘 새로운 느낌을 받고 싶었던 득수는 다음과 같은 규칙으로 다음날 갈 식당을 정한다.
+ +만약 2번 식당을 오늘 갔다면, 다음날 , , 번 식당은 가지 않는다. 따라서 새로운 느낌을 받으려면 번 식당을 가거나 굶어야 한다.
+ +득수가 일 치 식단표를 만들려고 한다. 위 규칙을 따라 식단표를 만들 때 가능한 경우의 수를 구하는 프로그램을 작성하시오.
+첫 번째 줄에는 득수가 만들어야 하는 점심 식단의 총 날짜 이 입력으로 들어온다.
+일 치 식단표를 만들 때 가능한 경우의 수를 로 나눈 나머지를 출력한다.
+1 ++
2 ++
5 ++
14 ++
+ Offline snapshot of BOJ 2447. + Source: https://www.acmicpc.net/problem/2447 +
+재귀적인 패턴으로 별을 찍어 보자. N이 3의 거듭제곱(3, 9, 27, ...)이라고 할 때, 크기 N의 패턴은 N×N 정사각형 모양이다.
+ +크기 3의 패턴은 가운데에 공백이 있고, 가운데를 제외한 모든 칸에 별이 하나씩 있는 패턴이다.
+ ++*** +* * +***+ +
N이 3보다 클 경우, 크기 N의 패턴은 공백으로 채워진 가운데의 (N/3)×(N/3) 정사각형을 크기 N/3의 패턴으로 둘러싼 형태이다. 예를 들어 크기 27의 패턴은 예제 출력 1과 같다.
+첫째 줄에 N이 주어진다. N은 3의 거듭제곱이다. 즉 어떤 정수 k에 대해 N=3k이며, 이때 1 ≤ k < 8이다.
+첫째 줄부터 N번째 줄까지 별을 출력한다.
+27 ++
*************************** +* ** ** ** ** ** ** ** ** * +*************************** +*** ****** ****** *** +* * * ** * * ** * * * +*** ****** ****** *** +*************************** +* ** ** ** ** ** ** ** ** * +*************************** +********* ********* +* ** ** * * ** ** * +********* ********* +*** *** *** *** +* * * * * * * * +*** *** *** *** +********* ********* +* ** ** * * ** ** * +********* ********* +*************************** +* ** ** ** ** ** ** ** ** * +*************************** +*** ****** ****** *** +* * * ** * * ** * * * +*** ****** ****** *** +*************************** +* ** ** ** ** ** ** ** ** * +*************************** ++
예제를 보고 규칙을 유추한 뒤에 별을 찍어 보세요.
+첫째 줄에 N이 주어진다. N은 항상 3×2k 수이다. (3, 6, 12, 24, 48, ...) (0 ≤ k ≤ 10, k는 정수)
+첫째 줄부터 N번째 줄까지 별을 출력한다.
+24 ++
* + * * + ***** + * * + * * * * + ***** ***** + * * + * * * * + ***** ***** + * * * * + * * * * * * * * + ***** ***** ***** ***** + * * + * * * * + ***** ***** + * * * * + * * * * * * * * + ***** ***** ***** ***** + * * * * + * * * * * * * * + ***** ***** ***** ***** + * * * * * * * * + * * * * * * * * * * * * * * * * +***** ***** ***** ***** ***** ***** ***** ***** ++
함수 를 을 로 나눴을 때의 몫으로, 를 를 으로 나눴을 때의 나머지로 정의하자.
+ +다음 값을 로 나눈 나머지를 구하라.
+ + +첫째 줄에 정수 과 이 공백을 사이에 두고 주어진다. ()
+주어진 수식의 값을 로 나눈 나머지를 출력한다.
+4 3 ++
9 ++
KOI 부설 과학연구소에서는 많은 종류의 산성 용액과 알칼리성 용액을 보유하고 있다. 각 용액에는 그 용액의 특성을 나타내는 하나의 정수가 주어져있다. 산성 용액의 특성값은 1부터 1,000,000,000까지의 양의 정수로 나타내고, 알칼리성 용액의 특성값은 -1부터 -1,000,000,000까지의 음의 정수로 나타낸다.
+ +같은 양의 두 용액을 혼합한 용액의 특성값은 혼합에 사용된 각 용액의 특성값의 합으로 정의한다. 이 연구소에서는 같은 양의 두 용액을 혼합하여 특성값이 0에 가장 가까운 용액을 만들려고 한다.
+ +예를 들어, 주어진 용액들의 특성값이 [-99, -2, -1, 4, 98]인 경우에는 특성값이 -99인 용액과 특성값이 98인 용액을 혼합하면 특성값이 -1인 용액을 만들 수 있고, 이 용액의 특성값이 0에 가장 가까운 용액이다. 참고로, 두 종류의 알칼리성 용액만으로나 혹은 두 종류의 산성 용액만으로 특성값이 0에 가장 가까운 혼합 용액을 만드는 경우도 존재할 수 있다.
+ +산성 용액과 알칼리성 용액의 특성값이 정렬된 순서로 주어졌을 때, 이 중 두 개의 서로 다른 용액을 혼합하여 특성값이 0에 가장 가까운 용액을 만들어내는 두 용액을 찾는 프로그램을 작성하시오.
+첫째 줄에는 전체 용액의 수 N이 입력된다. N은 2 이상 100,000 이하의 정수이다. 둘째 줄에는 용액의 특성값을 나타내는 N개의 정수가 빈칸을 사이에 두고 오름차순으로 입력되며, 이 수들은 모두 -1,000,000,000 이상 1,000,000,000 이하이다. N개의 용액들의 특성값은 모두 서로 다르고, 산성 용액만으로나 알칼리성 용액만으로 입력이 주어지는 경우도 있을 수 있다.
+첫째 줄에 특성값이 0에 가장 가까운 용액을 만들어내는 두 용액의 특성값을 출력한다. 출력해야 하는 두 용액은 특성값의 오름차순으로 출력한다. 특성값이 0에 가장 가까운 용액을 만들어내는 경우가 두 개 이상일 경우에는 그 중 아무것이나 하나를 출력한다.
+5 +-99 -2 -1 4 98 ++
4 +-100 -2 -1 103 ++
-99 98 ++
-2 -1 ++
KOI 부설 과학연구소에서는 많은 종류의 산성 용액과 알칼리성 용액을 보유하고 있다. 각 용액에는 그 용액의 특성을 나타내는 하나의 정수가 주어져있다. 산성 용액의 특성값은 1부터 1,000,000,000까지의 양의 정수로 나타내고, 알칼리성 용액의 특성값은 -1부터 -1,000,000,000까지의 음의 정수로 나타낸다.
+ +같은 양의 두 용액을 혼합한 용액의 특성값은 혼합에 사용된 각 용액의 특성값의 합으로 정의한다. 이 연구소에서는 같은 양의 두 용액을 혼합하여 특성값이 0에 가장 가까운 용액을 만들려고 한다.
+ +예를 들어, 주어진 용액들의 특성값이 [-2, 4, -99, -1, 98]인 경우에는 특성값이 -99인 용액과 특성값이 98인 용액을 혼합하면 특성값이 -1인 용액을 만들 수 있고, 이 용액이 특성값이 0에 가장 가까운 용액이다. 참고로, 두 종류의 알칼리성 용액만으로나 혹은 두 종류의 산성 용액만으로 특성값이 0에 가장 가까운 혼합 용액을 만드는 경우도 존재할 수 있다.
+ +산성 용액과 알칼리성 용액의 특성값이 주어졌을 때, 이 중 두 개의 서로 다른 용액을 혼합하여 특성값이 0에 가장 가까운 용액을 만들어내는 두 용액을 찾는 프로그램을 작성하시오.
+첫째 줄에는 전체 용액의 수 N이 입력된다. N은 2 이상 100,000 이하이다. 둘째 줄에는 용액의 특성값을 나타내는 N개의 정수가 빈칸을 사이에 두고 주어진다. 이 수들은 모두 -1,000,000,000 이상 1,000,000,000 이하이다. N개의 용액들의 특성값은 모두 다르고, 산성 용액만으로나 알칼리성 용액만으로 입력이 주어지는 경우도 있을 수 있다.
+첫째 줄에 특성값이 0에 가장 가까운 용액을 만들어내는 두 용액의 특성값을 출력한다. 출력해야 하는 두 용액은 특성값의 오름차순으로 출력한다. 특성값이 0에 가장 가까운 용액을 만들어내는 경우가 두 개 이상일 경우에는 그 중 아무것이나 하나를 출력한다.
+5 +-2 4 -99 -1 98 ++
-99 98 ++
KOI 부설 과학연구소에서는 많은 종류의 산성 용액과 알칼리성 용액을 보유하고 있다. 각 용액에는 그 용액의 특성을 나타내는 하나의 정수가 주어져있다. 산성 용액의 특성값은 1부터 1,000,000,000까지의 양의 정수로 나타내고, 알칼리성 용액의 특성값은 -1부터 -1,000,000,000까지의 음의 정수로 나타낸다.
+ +같은 양의 세 가지 용액을 혼합한 용액의 특성값은 혼합에 사용된 각 용액의 특성값의 합으로 정의한다. 이 연구소에서는 같은 양의 세 가지 용액을 혼합하여 특성값이 0에 가장 가까운 용액을 만들려고 한다.
+ +예를 들어, 주어진 용액들의 특성값이 [-2, 6, -97, -6, 98]인 경우에는 특성값이 -97와 -2인 용액과 특성값이 98인 용액을 혼합하면 특성값이 -1인 용액을 만들 수 있고, 이 용액이 특성값이 0에 가장 가까운 용액이다. 참고로, 세 종류의 알칼리성 용액만으로나 혹은 세 종류의 산성 용액만으로 특성값이 0에 가장 가까운 혼합 용액을 만드는 경우도 존재할 수 있다.
+ +산성 용액과 알칼리성 용액이 주어졌을 때, 이 중 같은 양의 세 개의 서로 다른 용액을 혼합하여 특성값이 0에 가장 가까운 용액을 만들어내는 세 용액을 찾는 프로그램을 작성하시오.
+첫째 줄에는 전체 용액의 수 N이 입력된다. N은 3 이상 5,000 이하의 정수이다. 둘째 줄에는 용액의 특성값을 나타내는 N개의 정수가 빈칸을 사이에 두고 주어진다. 이 수들은 모두 -1,000,000,000 이상 1,000,000,000 이하이다. N개의 용액들의 특성값은 모두 다르고, 산성 용액만으로나 알칼리성 용액만으로 입력이 주어지는 경우도 있을 수 있다.
+첫째 줄에 특성값이 0에 가장 가까운 용액을 만들어내는 세 용액의 특성값을 출력한다. 출력해야하는 세 용액은 특성값의 오름차순으로 출력한다. 특성값이 0에 가장 가까운 용액을 만들어내는 경우가 두 개 이상일 경우에는 그 중 아무것이나 하나를 출력한다.
+5 +-2 6 -97 -6 98 ++
7 +-2 -3 -24 -6 98 100 61 ++
-97 -2 98 ++
-6 -3 -2 ++
컴퓨터를 제조하는 회사인 KOI 전자에서는 제조하는 컴퓨터마다 6자리의 고유번호를 매긴다. 고유번호의 처음 5자리에는 00000부터 99999까지의 수 중 하나가 주어지며 6번째 자리에는 검증수가 들어간다. 검증수는 고유번호의 처음 5자리에 들어가는 5개의 숫자를 각각 제곱한 수의 합을 10으로 나눈 나머지이다.
+ +예를 들어 고유번호의 처음 5자리의 숫자들이 04256이면, 각 숫자를 제곱한 수들의 합 0+16+4+25+36 = 81 을 10으로 나눈 나머지인 1이 검증수이다.
+첫째 줄에 고유번호의 처음 5자리의 숫자들이 빈칸을 사이에 두고 하나씩 주어진다.
+첫째 줄에 검증수를 출력한다.
+0 4 2 5 6 ++
1 ++
It's time for a social distancing party! A group of friends are sitting around a circular table where some seats are filled and some seats are empty. In particular, to maintain social distancing protocols, no two people are sitting directly beside each other.
+ +They want to expand the party and include more friends, but no one is willing to move out of their current seat. Given the current table seating, determine the maximum number of additional people that can be seated such that there is still at least one empty seat between all pairs of people seated.
+The first line of input contains two integers (), which is the number of seats at the table, and (), which is the number of people that are already seated at the table.
+ +Note that the seats of the table are numbered in a circular fashion: for each , seats numbered and are directly beside each other. Seats and are also directly beside each other.
+ +The second line contains integers (), which indicates that seat number is currently occupied. No two occupied seats are directly beside each other.
+Display the maximum number of additional friends that can be seated at the table such that there is still at least one empty seat between all pairs of people seated.
+9 2 +2 6 ++
10 3 +1 4 7 ++
6 2 +2 5 ++
100 5 +7 14 47 78 99 ++
6 1 +3 ++
2 ++
1 ++
0 ++
43 ++
2 ++
Bill the beekeeper has a problem! His bees like to fight with each other instead of producing honey. If the bees fight each other, then the honey turns out sour. The only way to stop the bees from fighting and keep the honey sweet is to ensure that the hives are not too close together. Help Bill figure out how many of this season's hives will produce sour honey.
+ +Bill's hives all exist on a plane, and he knows some distance d such that two hives within d of each other will fight, and both will produce sour honey. If a hive does not fight with any other hives, it produces sweet honey. Given d and the positions of N beehives, output how many hives will produce sweet honey and how many hives will produce sour honey.
+Input will be provided on multiple lines. Each case will begin with a floating point number d (0 < d < 1000.0), the distance within which hives will fight. On the next line will be N (1 ≤ N ≤ 100), the number of hives in that case. The next N lines will contain two floating point numbers separated by a single space, x and y (-1000.0 ≤ x,y ≤ 1000.0), which give the position of each hive. No two hives will be at the exact same location. Input will be terminated by a line containing the string 0.0 0.
For each case output a line of the following form: a sour, b sweet where a and b are the number of hives producing sour and sweet honey, respectively.
10.0 3 +3.0 3.0 +3.5 4.5 +20.0 20.0 +5.0 4 +2.0 1.0 +2.0 4.0 +2.0 8.0 +2.0 12.0 +0.0 0 ++
2 sour, 1 sweet +4 sour, 0 sweet ++
Ms. Greene is trying to design a game for her third-grade class to practice their addition, subtraction, multiplication, and division. She would like for every student in her class to be able to "think mathematically" and determine if any two given numbers can be added, subtracted, multiplied, or divided in any way to produce a third given number. However, she would like to be able to check her students' work quickly without having to think about it herself.
+ +Help Ms. Greene by writing a program that inputs two given numbers and determines whether or not it is possible to add, subtract, multiply, or divide those two numbers in any order to produce the third number. Only one operation may be used to produce the third number.
+Each input file will start with a single integer () denoting the number of test cases. The following lines will contain sets of numbers ().
+For each test case, determine whether or not it is possible to produce the third number, , using the first two numbers, and , using addition, subtraction, multiplication, or division.
+6 +1 2 3 +2 24 12 +5 3 1 +9 16 7 +7 2 14 +12 4 2 ++
Possible +Possible +Impossible +Possible +Possible +Impossible ++
1에서부터 6까지의 눈을 가진 3개의 주사위를 던져서 다음과 같은 규칙에 따라 상금을 받는 게임이 있다.
+ +예를 들어, 3개의 눈 3, 3, 6이 주어지면 상금은 1,000+3×100으로 계산되어 1,300원을 받게 된다. 또 3개의 눈이 2, 2, 2로 주어지면 10,000+2×1,000 으로 계산되어 12,000원을 받게 된다. 3개의 눈이 6, 2, 5로 주어지면 그중 가장 큰 값이 6이므로 6×100으로 계산되어 600원을 상금으로 받게 된다.
+ +3개 주사위의 나온 눈이 주어질 때, 상금을 계산하는 프로그램을 작성 하시오.
+첫째 줄에 3개의 눈이 빈칸을 사이에 두고 각각 주어진다.
+첫째 줄에 게임의 상금을 출력 한다.
+3 3 6 ++
2 2 2 ++
6 2 5 ++
1300 ++
12000 ++
600 ++
Wall Maria has been broken! Eren must evacuate as soon as possible from his house. He must find the fastest route to escape within Wall Maria before the titans rush in. Wall Maria is represented as a grid in which Eren can move horizontally or vertically.
+ +There are burning houses and buildings which prevent Eren from passing through them. The burning houses and buildings are represented as '1'. Unburned or safe areas are represented as '0'. There are some areas which can be entered but only from a specific direction. These areas can be represented by either 'U', 'D', 'L', or 'R'. For example, if there is an 'R' that means that area can only be entered from the right neighboring tile within Wall Maria's grid. Similarly, 'U' tiles can only be entered from above, 'D' tiles can only be entered from below, and 'L' tiles can only be entered from the left.
Eren knows the time at which the titans will rush in. It takes unit of time to traverse zone (which corresponds to tile in the grid). Once he reaches any border of Wall Maria he is safe.
+ +Eren's starting position is represented by the letter 'S'. If Eren escapes at or before time , he is safe. Given his position within Wall Maria determine if it is possible to escape. If it is possible determine the number of zones that must be traversed to lead to the quickest escape.
The input consists of a single test case. The first line contains three integers () , () and (). The rest of N lines will be Wall Maria's grid containing characters '1', '0', 'S', 'U', 'D', 'L', or 'R'. There is exactly one 'S' in the input.
If it is possible to escape Wall Maria, output the minimum number of zones that must be traversed to escape. If it is not possible to escape, print "NOT POSSIBLE"!
2 4 4 +1111 +1S01 +1011 +0U11 ++
2 4 4 +1111 +1S01 +1011 +0L11 ++
1 4 4 +1S01 +1001 +1011 +0U11 ++
2 ++
NOT POSSIBLE ++
0 ++
어떤 자연수 p와 q가 있을 때, 만일 p를 q로 나누었을 때 나머지가 0이면 q는 p의 약수이다.
+ +6을 예로 들면
+ +그래서 6의 약수는 1, 2, 3, 6, 총 네 개이다.
+ +두 개의 자연수 N과 K가 주어졌을 때, N의 약수들 중 K번째로 작은 수를 출력하는 프로그램을 작성하시오.
+첫째 줄에 N과 K가 빈칸을 사이에 두고 주어진다. N은 1 이상 10,000 이하이다. K는 1 이상 N 이하이다.
+첫째 줄에 N의 약수들 중 K번째로 작은 수를 출력한다. 만일 N의 약수의 개수가 K개보다 적어서 K번째 약수가 존재하지 않을 경우에는 0을 출력하시오.
+6 3 ++
25 4 ++
2735 1 ++
3 ++
0 ++
1 ++
하루에 한 번 산을 넘어가는 떡 장사 할머니는 호랑이에게 떡을 주어야 산을 넘어갈 수 있는데, 욕심 많은 호랑이는 어제 받은 떡의 개수와 그저께 받은 떡의 개수를 더한 만큼의 떡을 받아야만 할머니를 무사히 보내 준다고 한다.
+ +예를 들어 첫째 날에 떡을 1개 주었고, 둘째 날에는 떡을 2개 주었다면 셋째 날에는 1+2=3개, 넷째 날에는 2+3=5개, 다섯째 날에는 3+5=8개, 여섯째 날에는 5+8=13개를 주어야만 무사히 산을 넘어갈 수 있다.
+ +우리는 산을 무사히 넘어온 할머니에게 오늘 호랑이에게 몇 개의 떡을 주었는지, 그리고 오늘이 호랑이를 만나 떡을 준지 며칠이 되었는지를 알아내었다. 할머니가 호랑이를 만나서 무사히 넘어온 D째 날에 준 떡의 개수가 K개임을 알 때, 여러분은 할머니가 호랑이를 처음 만난 날에 준 떡의 개수 A, 그리고 그 다음 날에 호랑이에게 준 떡의 개수 B를 계산하는 프로그램을 작성하시오. 이 문제에서는 항상 1 ≤ A ≤ B 이다.
+ +예를 들어 여섯 번째 날에 산을 무사히 넘어온 할머니가 호랑이에게 준 떡이 모두 41개라면, 호랑이를 만난 첫 날에 준 떡의 수는 2개, 둘째 날에 준 떡의 수는 7개이다. 즉 셋째 날에는 9개, 넷째 날에는 16개, 다섯째 날에는 25개, 여섯째 날에는 41개이다. 따라서 A=2, B=7 이 된다. 단 어떤 경우에는 답이 되는 A, B가 하나 이상일 때도 있는데 이 경우에는 그 중 하나만 구해서 출력하면 된다.
+첫째 줄에는 할머니가 넘어온 날 D (3 ≤ D ≤ 30)와 그 날 호랑이에게 준 떡의 개수 K (10 ≤ K ≤ 100,000)가 하나의 빈칸을 사이에 두고 주어진다.
+첫줄에 첫 날에 준 떡의 개수 A를 출력하고 그 다음 둘째 줄에는 둘째 날에 준 떡의 개수 B를 출력한다. 이 문제에서 주어진 D, K에 대해서는 항상 정수 A, B (1≤ A ≤ B)가 존재한다.
+6 41 ++
7 218 ++
2 +7 ++
10 +21 ++
4개의 기호 ‘(’, ‘)’, ‘[’, ‘]’를 이용해서 만들어지는 괄호열 중에서 올바른 괄호열이란 다음과 같이 정의된다.
()’와 ‘[]’는 올바른 괄호열이다. X가 올바른 괄호열이면 ‘(X)’이나 ‘[X]’도 모두 올바른 괄호열이 된다. X와 Y 모두 올바른 괄호열이라면 이들을 결합한 XY도 올바른 괄호열이 된다.예를 들어 ‘(()[[]])’나 ‘(())[][]’ 는 올바른 괄호열이지만 ‘([)]’ 나 ‘(()()[]’ 은 모두 올바른 괄호열이 아니다. 우리는 어떤 올바른 괄호열 X에 대하여 그 괄호열의 값(괄호값)을 아래와 같이 정의하고 값(X)로 표시한다.
()’ 인 괄호열의 값은 2이다.[]’ 인 괄호열의 값은 3이다.(X)’ 의 괄호값은 2×값(X) 으로 계산된다.[X]’ 의 괄호값은 3×값(X) 으로 계산된다.X와 Y가 결합된 XY의 괄호값은 값(XY)= 값(X)+값(Y) 로 계산된다.예를 들어 ‘(()[[]])([])’ 의 괄호값을 구해보자. ‘()[[]]’ 의 괄호값이 2 + 3×3=11 이므로 ‘(()[[]])’의 괄호값은 2×11=22 이다. 그리고 ‘([])’의 값은 2×3=6 이므로 전체 괄호열의 값은 22 + 6 = 28 이다.
여러분이 풀어야 할 문제는 주어진 괄호열을 읽고 그 괄호값을 앞에서 정의한대로 계산하여 출력하는 것이다.
+첫째 줄에 괄호열을 나타내는 문자열(스트링)이 주어진다. 단 그 길이는 1 이상, 30 이하이다.
+첫째 줄에 그 괄호열의 값을 나타내는 정수를 출력한다. 만일 입력이 올바르지 못한 괄호열이면 반드시 0을 출력해야 한다.
+(()[[]])([]) ++
[][]((]) ++
28 ++
0 ++
창영이가 드디어 취직을 했다!! 그가 30세까지 취직을 안하던 이유는 바로 마음에 다니는 직장을 찾지 못해서였다. 이번에 창영이가 취직한 곳은 사탕 공장이다. 사탕 공장에 다니면 사탕 처럼 달콤한 직장생활을 할 줄 알았지만, 8시간동안 사탕 품질을 검사해야 하는 작업은 너무나 지루했다.
+ +사탕의 품질은 다음과 같이 검사한다. 가장 먼저 사탕으로 가득 찬 박스를 연다. 그 다음 사탕의 개수와 사탕이 없는 곳의 개수를 센다.
+ +지루함을 견디지 못한 창영이는 결국 품질을 검사하는 프로그램을 작성하기로 했다.
+ +r행 c열 행렬이 주어진다. 이 행렬은 박스를 위에서 바라본 것이다. 행렬에는 다음과 같은 문자만 있다.
+ +.": 빈 곳o": 사탕의 먹을 수 있는 부분<>v^": 캔디 껍질사탕은 오직 2가지 모습만 있다.
+ ++>o< ++
+v +o +^+
위와 같은 연속된 3개의 문자만 사탕이다.
+ +사탕은 >o.와 같이 사탕의 일부만 존재할 수 있지만, 이 것은 사탕으로 세지 않는다.
r행 c열 행렬이 주어졌을 때, 사탕의 개수를 출력하는 프로그램을 작성하시오.
+첫째 줄에 테스트 케이스의 개수 t가 주어진다. 각 테스트 케이스는 빈 줄로 구분된다.
+ +각 테스트 케이스의 첫째 줄에는 r과 c 가 주어진다. (1 ≤ r,c ≤ 400) 그 다음 r개의 줄에는 행렬의 각 행이 순서대로 주어진다. 행렬의 각 행은 c개의 문자이며, ".o<>v^"만 포함하고 있다. (각각의 아스키 값은 46, 111, 60, 62, 118, 94이다)
각각의 테스트 케이스에 대해 한 줄에 하나의 정수만 출력한다. 이 값은 박스에 들어있는 사탕의 개수이다.
+아래와 같은 입력은 주어지지 않는다.
+ ++ v +>o< + ^+
1 + +5 4 +.>o< +v.^. +ooo. +^.^. +>o<<+
3+
아래 예제와 같이 새싹을 출력하시오.
+입력은 없다.
+새싹을 출력한다.
+++
,r'"7 +r`-_ ,' ,/ + \. ". L_r' + `~\/ + | + | ++
두람이의 MBTI는 INFP이다. 두람이는 친구들과 옷이 겹치는 것을 정말 싫어한다.
+ +어느 날 기분이 좋지 않은 두람이는 친구들과 우정 여행을 가기로 했다. 여행을 가서 두람이는 친구들과 종류의 옷을 각자 골라 입고 다 같이 원형으로 서서 사진을 찍기로 했다. 사진을 찍는 총인원수는 옷의 총개수와 같다. 오지랖이 넓은 두람이는 사진을 찍는 모두가 이웃한 두 사람과 옷이 겹치지 않으면 행복해지기로 했다.
+ +과연 두람이는 행복할 수 있을까?
+첫째 줄에 두람이와 친구들이 입고 있는 옷의 종류의 수 ()이 주어진다.
+ +둘째 줄에는 종류별 옷 개수 ()이 공백으로 구분되어 주어진다.
+두람이가 행복할 수 있으면 Happy를 출력하고, 행복할 수 없다면 Unhappy를 출력한다.
옷의 총개수는 C++의 32비트 int 자료형의 최댓값인 2,147,483,647을 초과할 수도 있다.
+5 +1 5 4 1 2 ++
5 +7 1 5 7 4 ++
7 +1 13 2 4 1 1 1 ++
Happy ++
Happy ++
Unhappy ++
인하대학교 컴퓨터공학과를 졸업하기 위해서는, 전공평점이 3.3 이상이거나 졸업고사를 통과해야 한다. 그런데 아뿔싸, 치훈이는 깜빡하고 졸업고사를 응시하지 않았다는 사실을 깨달았다!
+ +치훈이의 전공평점을 계산해주는 프로그램을 작성해보자.
+ +전공평점은 전공과목별 (학점 × 과목평점)의 합을 학점의 총합으로 나눈 값이다.
+ +인하대학교 컴퓨터공학과의 등급에 따른 과목평점은 다음 표와 같다.
+ +| A+ | +4.5 | +
| A0 | +4.0 | +
| B+ | +3.5 | +
| B0 | +3.0 | +
| C+ | +2.5 | +
| C0 | +2.0 | +
| D+ | +1.5 | +
| D0 | +1.0 | +
| F | +0.0 | +
P/F 과목의 경우 등급이 P또는 F로 표시되는데, 등급이 P인 과목은 계산에서 제외해야 한다.
과연 치훈이는 무사히 졸업할 수 있을까?
+20줄에 걸쳐 치훈이가 수강한 전공과목의 과목명, 학점, 등급이 공백으로 구분되어 주어진다.
+치훈이의 전공평점을 출력한다.
+ +정답과의 절대오차 또는 상대오차가 \(10^{-4}\) 이하이면 정답으로 인정한다.
+1.0,2.0,3.0,4.0중 하나이다.A+,A0,B+,B0,C+,C0,D+,D0,F,P중 하나이다.P가 아님이 보장된다.예제 1은 치훈이의 실제 전공과목 성적이다.
+ObjectOrientedProgramming1 3.0 A+ +IntroductiontoComputerEngineering 3.0 A+ +ObjectOrientedProgramming2 3.0 A0 +CreativeComputerEngineeringDesign 3.0 A+ +AssemblyLanguage 3.0 A+ +InternetProgramming 3.0 B0 +ApplicationProgramminginJava 3.0 A0 +SystemProgramming 3.0 B0 +OperatingSystem 3.0 B0 +WirelessCommunicationsandNetworking 3.0 C+ +LogicCircuits 3.0 B0 +DataStructure 4.0 A+ +MicroprocessorApplication 3.0 B+ +EmbeddedSoftware 3.0 C0 +ComputerSecurity 3.0 D+ +Database 3.0 C+ +Algorithm 3.0 B0 +CapstoneDesigninCSE 3.0 B+ +CompilerDesign 3.0 D0 +ProblemSolving 4.0 P ++
BruteForce 3.0 F +Greedy 1.0 F +DivideandConquer 2.0 F +DynamicProgramming 3.0 F +DepthFirstSearch 4.0 F +BreadthFirstSearch 3.0 F +ShortestPath 4.0 F +DisjointSet 2.0 F +MinimumSpanningTree 2.0 F +TopologicalSorting 1.0 F +LeastCommonAncestor 2.0 F +SegmentTree 4.0 F +EulerTourTechnique 3.0 F +StronglyConnectedComponent 2.0 F +BipartiteMatching 2.0 F +MaximumFlowProblem 3.0 F +SuffixArray 1.0 F +HeavyLightDecomposition 4.0 F +CentroidDecomposition 3.0 F +SplayTree 1.0 F ++
3.284483 ++
0.000000 ++
새벽의 탐정 게임은 재미있는 2인용 보드게임이다. 한 명은 탐정, 다른 한 명은 도둑 역할을 맡는다.
+ +게임은 행 열 격자 위에서 진행된다. 격자의 각 칸은 벽이 설치되어 있거나 비어있고, 역할에 관계없이 벽 위에 서거나 벽을 넘어갈 수 없다. 임의의 두 빈칸은 상하좌우로 인접한 빈칸들을 거쳐 이동할 수 있다. 다시 말해 어느 빈칸에서 출발해도 다른 모든 빈칸으로 이동할 수 있다.
+ +도둑은 밤 동안 은밀하게 어떤 칸으로 이동하고, 다시 밤이 찾아오기 전엔 그 칸에서 움직일 수 없다. 탐정은 새벽이 밝아오면 단서를 모아 도둑의 위치를 밝혀내고 감옥에 가두어야 한다.
+ +감옥은 위 전개도를 접은 모습이다. 다시 말해, 다섯 면이 막혀있고 나머지 한 면이 뚫려있는 정육면체이다.
+ +탐정은 자신이 있는 칸에 감옥의 뚫린 면이 바닥을 향하게 하여 놓는다. 감옥은 상하좌우 중 벽이 없는 한 방향으로 굴릴 수 있고, 그에 따라 바닥을 향하는 면이 바뀌게 된다. 즉, 이동하려는 칸의 바닥과 수직으로 접하고 있는 면이 이동 후 바닥을 향하게 된다.
+ +도둑을 감옥에 가두려면, 감옥의 뚫린 면이 바닥을 향할 때 도둑이 같은 칸에 있어야 한다. 만약 막힌 면이 바닥을 향할 때 도둑이 같은 칸에 있다면 도둑은 바로 승리를 선언하고 탐정은 패배하게 된다.
+ +당신은 탐정 역할이고, 도둑의 위치를 특정했다. 이제 도둑을 감옥으로 가두기만 하면 승리할 수 있다. 당신의 위치와 도둑의 위치가 주어질 때, 감옥을 최소 몇 번 굴려야 당신이 게임에서 승리할 수 있을지 알아보자.
+첫 번째 줄에 보드의 크기 , 이 주어진다.
+ +두 번째 줄부터 개의 줄에 각각 개의 문자로 보드의 상태가 주어진다. 벽이 있는 칸은 #, 빈칸은 ., 탐정의 위치는 D, 도둑의 위치는 R로 주어진다.
탐정이 승리할 수 있다면 도둑을 가두는데 필요한 최소 이동 횟수를 출력한다.
+ +그렇지 않다면 -1을 출력한다.
+D와 R은 한 개씩만 주어진다.5 5 +##### +#D..# +#.#.# +#..R# +##### ++
6 5 +##### +#..## +#..R# +##.## +##D## +##### ++
4 6 +###### +#R..D# +#.##.# +###### ++
4 ++
7 ++
-1 ++
예제를 보고 규칙을 유추한 뒤에 별을 찍어 보세요.
+첫째 줄에 N(1 ≤ N ≤ 100)이 주어진다.
+첫째 줄부터 2×N-1번째 줄까지 차례대로 별을 출력한다.
+3 ++
* +** +*** +** +* ++
KOI 전자에서는 건강에 좋고 맛있는 훈제오리구이 요리를 간편하게 만드는 인공지능 오븐을 개발하려고 한다. 인공지능 오븐을 사용하는 방법은 적당한 양의 오리 훈제 재료를 인공지능 오븐에 넣으면 된다. 그러면 인공지능 오븐은 오븐구이가 끝나는 시간을 분 단위로 자동적으로 계산한다.
+ +또한, KOI 전자의 인공지능 오븐 앞면에는 사용자에게 훈제오리구이 요리가 끝나는 시각을 알려 주는 디지털 시계가 있다.
+ +훈제오리구이를 시작하는 시각과 오븐구이를 하는 데 필요한 시간이 분단위로 주어졌을 때, 오븐구이가 끝나는 시각을 계산하는 프로그램을 작성하시오.
+첫째 줄에는 현재 시각이 나온다. 현재 시각은 시 A (0 ≤ A ≤ 23) 와 분 B (0 ≤ B ≤ 59)가 정수로 빈칸을 사이에 두고 순서대로 주어진다. 두 번째 줄에는 요리하는 데 필요한 시간 C (0 ≤ C ≤ 1,000)가 분 단위로 주어진다.
+첫째 줄에 종료되는 시각의 시와 분을 공백을 사이에 두고 출력한다. (단, 시는 0부터 23까지의 정수, 분은 0부터 59까지의 정수이다. 디지털 시계는 23시 59분에서 1분이 지나면 0시 0분이 된다.)
+14 30 +20 ++
17 40 +80 ++
23 48 +25 ++
14 50 ++
19 0 ++
0 13 ++
KOI 전자에서는 건강에 좋고 맛있는 훈제오리구이 요리를 간편하게 만드는 인공지능 오븐을 개발하려고 한다. 인공지능 오븐을 사용하는 방법은 적당한 양의 오리 훈제 재료를 인공지능 오븐에 넣으면 된다. 그러면 인공지능 오븐은 오븐구이가 끝나는 시간을 초 단위로 자동적으로 계산한다.
+ +또한, KOI 전자의 인공지능 오븐 앞면에는 사용자에게 훈제오리구이 요리가 끝나는 시각을 알려 주는 디지털 시계가 있다.
+ +훈제오리구이를 시작하는 시각과 오븐구이를 하는 데 필요한 시간이 초 단위로 주어졌을 때, 오븐구이가 끝나는 시각을 계산하는 프로그램을 작성하시오.
+첫째 줄에는 현재 시각이 나온다. 현재 시각은 시 A (0 ≤ A ≤ 23), 분 B (0 ≤ B ≤ 59)와 초 C (0 ≤ C ≤ 59)가 정수로 빈칸을 사이에 두고 순서대로 주어진다. 두 번째 줄에는 요리하는 데 필요한 시간 D (0 ≤ D ≤ 500,000)가 초 단위로 주어진다.
+첫째 줄에 종료되는 시각의 시, 분, 초을 공백을 사이에 두고 출력한다. (단, 시는 0부터 23까지의 정수이며, 분, 초는 0부터 59까지의 정수이다. 디지털 시계는 23시 59분 59초에서 1초가 지나면 0시 0분 0초가 된다.)
+14 30 0 +200 ++
17 40 45 +6015 ++
23 48 59 +2515 ++
14 33 20 ++
19 21 0 ++
0 30 54 ++
준원이는 저번 주에 살면서 처음으로 코스트코를 가 봤다. 정말 멋졌다. 그런데, 몇 개 담지도 않았는데 수상하게 높은 금액이 나오는 것이다! 준원이는 영수증을 보면서 정확하게 계산된 것이 맞는지 확인해보려 한다.
+ +영수증에 적힌,
+ +을 보고, 구매한 물건의 가격과 개수로 계산한 총 금액이 영수증에 적힌 총 금액과 일치하는지 검사해보자.
+첫째 줄에는 영수증에 적힌 총 금액 가 주어진다.
+ +둘째 줄에는 영수증에 적힌 구매한 물건의 종류의 수 이 주어진다.
+ +이후 개의 줄에는 각 물건의 가격 와 개수 가 공백을 사이에 두고 주어진다.
+구매한 물건의 가격과 개수로 계산한 총 금액이 영수증에 적힌 총 금액과 일치하면 Yes를 출력한다. 일치하지 않는다면 No를 출력한다.
260000 +4 +20000 5 +30000 2 +10000 6 +5000 8 ++
250000 +4 +20000 5 +30000 2 +10000 6 +5000 8 ++
Yes ++
No ++
2022 연세대학교 미래캠퍼스 슬기로운 코딩생활에 명의 학생들이 응시했다.
+ +이들 중 점수가 가장 높은 명은 상을 받을 것이다. 이 때, 상을 받는 커트라인이 몇 점인지 구하라.
+ +커트라인이란 상을 받는 사람들 중 점수가 가장 가장 낮은 사람의 점수를 말한다.
+첫째 줄에는 응시자의 수 과 상을 받는 사람의 수 가 공백을 사이에 두고 주어진다.
+ +둘째 줄에는 각 학생의 점수 가 공백을 사이에 두고 주어진다.
+상을 받는 커트라인을 출력하라.
+5 2 +100 76 85 93 98 ++
98 ++
오늘은 혜아의 면접 날이다. 면접 준비를 열심히 해서 앞선 질문들을 잘 대답한 혜아는 이제 마지막으로 칠판에 직접 코딩하는 문제를 받았다. 혜아가 받은 문제는 두 수를 더하는 문제였다. C++ 책을 열심히 읽었던 혜아는 간단히 두 수를 더하는 코드를 칠판에 적었다. 코드를 본 면접관은 다음 질문을 했다. “만약, 입출력이 바이트 크기의 정수라면 프로그램을 어떻게 구현해야 할까요?”
+ +혜아는 책에 있는 정수 자료형과 관련된 내용을 기억해 냈다. 책에는 long int는 바이트 정수까지 저장할 수 있는 정수 자료형이고 long long int는 바이트 정수까지 저장할 수 있는 정수 자료형이라고 적혀 있었다. 혜아는 이런 생각이 들었다. “int 앞에 long을 하나씩 더 붙일 때마다 바이트씩 저장할 수 있는 공간이 늘어나는 걸까? 분명 long long long int는 바이트, long long long long int는 바이트까지 저장할 수 있는 정수 자료형일 거야!” 그렇게 혜아는 당황하는 면접관의 얼굴을 뒤로한 채 칠판에 정수 자료형을 써 내려가기 시작했다.
혜아가 바이트 정수까지 저장할 수 있다고 생각해서 칠판에 쓴 정수 자료형의 이름은 무엇일까?
+첫 번째 줄에는 문제의 정수 이 주어진다. ; 은 의 배수
+혜아가 바이트 정수까지 저장할 수 있다고 생각하는 정수 자료형의 이름을 출력하여라.
+출력에서 long과 long, long과 int 사이에는 공백이 하나씩 들어간다.
실제로 C++에서 각 정수 자료형이 저장할 수 있는 수의 크기는 환경에 따라 달라질 수 있다. 덧붙여, 실제로 문제 내용과 같이 long long long int와 같은 자료형을 사용한 코드를 GCC의 C++ 컴파일러를 사용해 컴파일하려고 할 경우 'long long long' is too long for GCC라는 에러 메시지와 함께 컴파일되지 않는다.
4 ++
20 ++
long int ++
long long long long long int ++
학생들이 한 달간 통화한 n개의 통화 기록 A가 주어진다. 한 개의 통화 기록은 통화 시간과 학생 이름이 공백으로 구분되어 주어진다. 한 학생의 통화 기록이 여러 번 주어질 수 있다. 통화 시간은 시:분 형태로 주어지고 시와 분은 길이가 2인 문자열이다. 학생 이름은 알파벳 소문자로 이루어져 있다. 통화 요금표는 다음과 같다.
+ +통화 요금은 학생별로 한 달간 통화한 누적 통화 시간에 대하여 청구된다. 누적 통화 시간이 기본 시간 이하라면 기본 요금이 청구된다. 누적 통화 시간이 기본 시간을 초과하면, 기본 요금에 더해서 초과한 시간에 대해서 단위 시간마다 단위 요금이 청구된다. 초과한 시간이 단위 시간으로 나누어떨어지지 않으면 올림 한다.
+ +통화 요금이 많은 학생부터 이름과 통화 요금을 출력하자. 통화 요금이 같은 학생은 학생 이름 기준으로 오름차순으로 출력하자.
+첫 번째 줄에 통화 기록의 개수 n이 주어진다.
+ +다음 줄부터 n개의 줄에 통화 기록이 순서대로 주어진다. 한 줄에 하나의 통화 기록이 주어진다. 한 개의 통화 기록은 통화 시간과 학생 이름이 공백으로 구분되어 순서대로 주어진다.
+첫 번째 줄부터 통화 요금이 많은 학생부터 학생 이름과 통화 요금을 공백을 사이에 두고 순서대로 출력한다. 통화 요금이 같은 학생은 학생 이름 기준으로 오름차순으로 출력한다. 한 줄에 한 학생의 정보를 출력한다.
+7 +00:10 aaa +00:30 aaa +01:15 bbb +01:00 ccc +01:00 bbb +02:10 aaa +03:10 ccc ++
3 +00:10 ccc +00:10 aaa +00:10 bbb ++
ccc 19 +aaa 16 +bbb 13 ++
aaa 10 +bbb 10 +ccc 10 ++
페이스북, 트위터, 카카오톡과 같은 사회망 서비스(SNS)가 널리 사용됨에 따라, 사회망을 통하여 사람들이 어떻게 새로운 아이디어를 받아들이게 되는가를 이해하는 문제가 중요해졌다. 사회망에서 사람들의 친구 관계는 그래프로 표현할 수 있는데, 이 그래프에서 사람은 정점으로 표현되고, 두 정점을 잇는 에지는 두 정점으로 표현되는 두 사람이 서로 친구 관계임을 표현한다.
+ +예를 들어, 철수와 영희, 철수와 만수, 영희와 순희가 서로 친구 관계라면 이를 표현하는 친구 관계 그래프는 다음과 같다.
+ +친구 관계 그래프를 이용하면 사회망 서비스에서 어떤 새로운 아이디어가 전파되는 과정을 이해하는데 도움을 줄 수 있다. 어떤 새로운 아이디어를 먼저 받아들인 사람을 얼리 아답터(early adaptor)라고 하는데, 사회망 서비스에 속한 사람들은 얼리 아답터이거나 얼리 아답터가 아니다. 얼리 아답터가 아닌 사람들은 자신의 모든 친구들이 얼리 아답터일 때만 이 아이디어를 받아들인다.
+ +어떤 아이디어를 사회망 서비스에서 퍼뜨리고자 할 때, 가능한 한 최소의 수의 얼리 아답터를 확보하여 모든 사람이 이 아이디어를 받아들이게 하는 문제는 매우 중요하다.
+ +일반적인 그래프에서 이 문제를 푸는 것이 매우 어렵다는 것이 알려져 있기 때문에, 친구 관계 그래프가 트리인 경우, 즉 모든 두 정점 사이에 이들을 잇는 경로가 존재하면서 사이클이 존재하지 않는 경우만 고려한다.
+ +예를 들어, 8명의 사람으로 이루어진 다음 친구 관계 트리를 생각해보자. 2, 3, 4번 노드가 표현하는 사람들이 얼리 아답터라면, 얼리 아답터가 아닌 사람들은 자신의 모든 친구가 얼리 아답터이기 때문에 새로운 아이디어를 받아들인다.
+ +친구 관계 트리가 주어졌을 때, 모든 개인이 새로운 아이디어를 수용하기 위하여 필요한 최소 얼리 어답터의 수를 구하는 프로그램을 작성하시오.
+첫 번째 줄에는 친구 관계 트리의 정점 개수 N이 주어진다. 단, 2 ≤ N ≤ 1,000,000이며, 각 정점은 1부터 N까지 일련번호로 표현된다. 두 번째 줄부터 N-1개의 줄에는 각 줄마다 친구 관계 트리의 에지 (u, v)를 나타내는 두 정수 u와 v가 하나의 빈칸을 사이에 두고 주어진다.
+주어진 친구 관계 그래프에서 아이디어를 전파하는데 필요한 얼리 아답터의 최소 수를 하나의 정수로 출력한다.
+8 +1 2 +1 3 +1 4 +2 5 +2 6 +4 7 +4 8 ++
9 +1 2 +1 3 +2 4 +3 5 +3 6 +4 7 +4 8 +4 9 ++
3 ++
3 ++
Drop7은 7×7 크기의 격자에서 진행하는 싱글 플레이어 게임이다. 처음에는 격자가 비어있고, 플레이어는 매 턴마다 1 이상 7 이하의 정수 하나가 적힌 공을 받아 7개의 열 중 한 곳에 떨어뜨려야 한다. 떨어뜨린 공은 이미 배치되어 있는 공 바로 위에 도달하거나 바닥 바로 위에 도달할 때까지 아래로 이동한다.
+ +가로 방향으로 연속해서 놓여있는 공들을 "가로 방향 그룹", 세로 방향으로 연속해서 놓여있는 공들을 "세로 방향 그룹"이라고 하자. 공을 떨어뜨릴 때마다 공들의 그룹이 바뀔 수 있는데, 만약 크기가 인 그룹에 가 적힌 공이 있다면 그 공은 없어진다. 조건을 만족하는 공은 모두 동시에 없어진다. 공이 없어지면 위에 있던 공들이 아래로 내려가며, 공이 없어지는 이벤트는 연쇄적으로 발생한다. 단, 크기가 n인 그룹은 크기가 n-1인 그룹을 포함하지 않는다. 즉 그룹의 가장 끝에 위치한 공은 격자의 테두리 또는 빈 공간과 인접한다.
+ +현재 격자의 상태와 이번에 떨어뜨려야 하는 공의 번호가 주어졌을 때, 공을 한 번 떨어뜨려서 최대한 많이 공을 없애보자.
+첫째 줄부터 7개의 줄에 현재 격자의 상태가 주어진다. 공이 있는 칸은 공의 번호가 1부터 7까지의 숫자로 주어지며, 공이 없는 칸은 0으로 주어진다.
+ +다음 줄에 떨어뜨릴 공의 번호가 주어진다.
+ +게임 도중에 나타날 수 있는 상태만 입력으로 주어진다. 즉 격자의 첫 번째 줄은 모두 0이고, 공을 떨어뜨리기 전에 공이 없어지는 이벤트가 발생하지 않는 입력만 주어진다.
+공을 떨어뜨렸을 때 격자에 남아있을 수 있는 공의 개수의 최솟값을 출력한다.
+0 0 0 0 0 0 0 +0 0 0 0 0 0 0 +0 0 0 0 0 0 0 +0 0 0 0 0 0 0 +0 0 0 4 0 2 0 +0 0 0 5 0 6 0 +3 3 0 7 5 6 7 +3 ++
0 ++
루나와 리나는 타워 건설 게임을 하려고 한다. 타워 건설 게임은 개의 타워를 사용하는 게임이고 루나는 이 게임을 세팅하려고 한다.
+ +게임 세팅은 서로 다른 높이의 개의 타워 중 개를 선택해 원하는 순서로 일렬로 배치하는 것이다. 이때 앞과 뒤에서 바라볼 때 모든 타워가 최소 한 번은 보여야 한다. 즉, 어떤 타워에 대해서 그보다 높은 타워가 그 타워의 앞쪽과 뒤쪽에 모두 존재하면 안된다는 것이다.
+ +게임 세팅을 하던 루나는 문득 게임을 세팅하는 방법이 얼마나 많을 지가 궁금해졌다. 루나를 도와서 게임 세팅을 하는 경우의 수를 구해보자.
+첫째 줄에는 두 양의 정수 과 가 주어진다.
+ +둘째 줄에는 각각의 타워의 높이 이 공백으로 구분되어 주어진다.
+ +모든 입력은 정수이다.
+게임 세팅을 할 수 있는 경우의 수를 로 나눈 나머지를 출력한다.
+5 3 +1 6 7 9 11 ++
40 ++
단대소고(단국대학교부속소프트웨어고등학교)에서 운동회를 하고 있다. 운동회는 팀 대항 대회로 진행된다. 운동회에는 총 팀이 참여하였으며, 각 팀은 명의 인원으로 구성되어 있다. 운동회는 한 라운드가 끝날 때마다 남은 모든 인원 중 한 명이 임의로 탈락된다. 팀의 모든 인원이 탈락한다면 그 팀은 탈락하게 된다. 각 팀의 최종 등수는 팀이 탈락된 순서의 역순으로 정한다. 가장 늦게 탈락한 팀이 운동회의 최종 1등이 된다. 이렇게 운동회가 진행되어 남은 사람이 총 명, 준혁이의 팀에서 남은 인원은 명이 되었다. 이때, 준혁이는 자신의 팀이 지금 가질 수 있는 등수의 범위가 궁금해졌다.
+ +준혁이의 팀이 지금 가질 수 있는 등수는 (준혁의 팀을 제외한 남아있는 팀의 수 + 1)과 같다.
+ +, , , 가 주어질 때 준혁이의 팀이 지금 가질 수 있는 등수의 최댓값과 최솟값을 구해보자.
+첫째 줄에 가 공백으로 구분되어 입력된다.
+첫째 줄에 준혁이의 팀이 가질 수 있는 등수 중 가장 숫자가 큰 값과 가장 작은 값을 공백으로 구분하여 출력한다.
+30 5 51 3 ++
30 11 ++
5 x 5 크기의 보드가 주어진다. 보드는 1 x 1 크기의 정사각형 격자로 이루어져 있다. 보드의 격자에는 -1, 0, 1, 2, 3, 4, 5, 6중 하나의 수가 적혀 있다. 격자의 위치는 (r, c)로 표시한다. r은 행 번호, c는 열 번호를 나타낸다. 행 번호는 맨 위 위치가 0이고 아래 방향으로 1씩 증가한다. 열 번호는 맨 왼쪽 위치가 0이고 오른쪽으로 1씩 증가한다. 즉, 맨 왼쪽 위 위치가 (0, 0), 맨 아래 오른쪽 위치가 (4, 4)이다. -1이 적혀 있는 칸으로는 이동할 수 없고 0, 1, 2, 3, 4, 5, 6이 적혀 있는 칸으로는 이동할 수 있다.
+ +현재 한 명의 학생이 (r, c) 위치에 있고 한 번의 이동으로 상, 하, 좌, 우 방향 중에서 한가지 방향으로 한 칸 이동할 수 있다. 학생이 현재 위치 (r, c)에서 시작하여 1, 2, 3, 4, 5, 6이 적혀 있는 칸을 순서대로 방문하려고 한다. 보드에는 1, 2, 3, 4, 5, 6이 적혀 있는 칸이 1개씩 존재하고 1, 2, 3, 4, 5, 6이 적혀 있는 칸을 여러 번 방문할 수 있다. 즉, 1이 적혀 있는 칸에서 2가 적혀 있는 칸으로 이동하고, 2가 적혀 있는 칸에서 3이 적혀 있는 칸으로 이동하고, ... , 5가 적혀 있는 칸에서 6이 적혀 있는 칸으로 이동한다. i가 적혀 있는 칸에서 i + 1이 적혀 있는 칸으로 이동할 때 다른 번호가 적힌 칸을 방문해도 된다.(1 ≤ i ≤ 5) 마찬가지로, 현재 위치 (r, c)에서 1이 적혀 있는 칸으로 이동할 때 다른 번호가 적힌 칸을 방문해도 된다. 학생이 현재 위치 (r, c)에서 시작하여 1, 2, 3, 4, 5, 6이 적혀 있는 칸을 순서대로 방문하는 최소 이동 횟수를 출력하자. 학생이 현재 위치 (r, c)에서 시작하여 1, 2, 3, 4, 5, 6이 적혀 있는 칸을 순서대로 방문할 수 없는 경우 -1을 출력한다.
+첫 번째 줄부터 다섯 개의 줄에 걸쳐 보드의 각 칸에 적혀있는 수가 순서대로 주어진다. i번째 줄의 j번째 수는 보드의 (i - 1)번째 행, (j - 1)번째 열에 적혀있는 수를 나타낸다. 보드의 각 칸에 적혀 있는 수는 -1, 0, 1, 2, 3, 4, 5, 6중 하나이다.
+ +다음 줄에 학생의 현재 위치 r, c가 빈칸을 사이에 두고 순서대로 주어진다.
+학생이 현재 위치 (r, c)에서 시작하여 1, 2, 3, 4, 5, 6이 적혀 있는 칸을 순서대로 방문하는 최소 이동 횟수를 출력한다. 학생이 현재 위치 (r, c)에서 시작하여 1, 2, 3, 4, 5, 6이 적혀 있는 칸을 순서대로 방문할 수 없는 경우 -1을 출력한다.
+0 0 1 0 0 +0 0 2 0 0 +0 0 3 0 0 +0 0 4 0 0 +0 0 5 6 -1 +0 1 ++
0 0 1 0 0 +0 0 2 0 0 +0 0 3 0 0 +0 0 4 6 0 +0 0 5 -1 0 +0 1 ++
0 0 -1 1 0 +0 0 -1 2 0 +0 0 -1 3 0 +0 0 -1 4 0 +0 0 -1 5 6 +0 1 ++
6 ++
7 ++
-1 ++
모두가 알다시피, 포닉스는 포스텍의 대표적인 멋쟁이이다! 포닉스는 멋쟁이답게 흰색 또는 검은색의 마스크, 티셔츠, 바지만을 입는다. 포닉스는 매일 다음과 같은 규칙으로 착장을 고른다.
+ +포닉스는 옷을 열심히 모으느라 새로운 옷을 살 돈이 없다. 포닉스가 가진 각 색의 마스크, 티셔츠, 바지의 개수가 주어질 때, 포닉스를 위해 새로운 옷을 사지 않고 연속해서 옷을 고를 수 있는 가장 긴 일수를 구해 보자.
+첫째 줄에 포닉스가 가진 흰색 마스크와 검은색 마스크의 개수 가 공백으로 구분되어 주어진다.
+ +둘째 줄에 포닉스가 가진 흰색 티셔츠와 검은색 티셔츠의 개수 가 공백으로 구분되어 주어진다.
+ +셋째 줄에 포닉스가 가진 흰색 바지와 검은색 바지의 개수 가 공백으로 구분되어 주어진다.
+포닉스가 연속해서 옷을 고를 수 있는 가장 긴 일수를 출력한다.
+2 3 +4 3 +5 2 ++
4 ++
+ Hello World!를 출력하시오.
++ 없음
++ Hello World!를 출력하시오.
+Hello World!+
길이 n인 정수 배열 A가 있고 i번째 원소는 A[i]라 하자 (i = 1, 2, ..., n). 1 ≤ i ≤ j ≤ n 인 인덱스 i, j에 대해, A[i, j]는 i번째 원소부터 j번째 원소까지 총 (j-i+1)개의 원소로 구성된 A의 부분 배열이다 - 이 부분 배열의 길이는 (j-i+1)이다. 예를 들어 A = [2, 2, 1, 3, 2] 이라면 A[2, 3] = [2, 1]이고 A[3, 5] = [1, 3, 2]가 된다.
+ +길이가 2 이상인 (즉, i < j) 어떤 부분배열 A[i, j]의 원소들이 증가/감소를 번갈아 반복하면 지그재그 부분배열이라 부르는데, 구체적으로 아래 조건 중 하나를 만족해야한다:
+ +예를 들어 A = [2, 2, 1, 3, 2] 이라면 A[2, 3]과 A[3, 5]는 지그재그 부분배열이며, A[1, 2]나 A[1, 3]은 지그재그 부분배열이 아니다.
+ +Alice는 A의 부분배열 중 지그재그 부분배열의 개수가 몇 개인지 알고 싶어한다. Alice를 도와주자.
+입력 첫 줄에 테스트 케이스의 수 T가 주어진다.
+ +각 테스트 케이스는 두 줄에 나누어 주어진다. 첫 줄에 n이 주어지고 둘째 줄에 n개의 정수가 공백으로 구분되어 주어진다.
+각 테스트 케이스의 정답인 지그재그 부분배열의 개수를 각 줄에 출력한다.
+4 +5 +2 2 1 3 2 +4 +2 0 2 2 +5 +1 2 3 2 1 +7 +1 2 1 2 1 2 1 ++
6 +3 +5 +21 ++
9개의 서로 다른 자연수가 주어질 때, 이들 중 최댓값을 찾고 그 최댓값이 몇 번째 수인지를 구하는 프로그램을 작성하시오.
+ +예를 들어, 서로 다른 9개의 자연수
+ +3, 29, 38, 12, 57, 74, 40, 85, 61
+ +이 주어지면, 이들 중 최댓값은 85이고, 이 값은 8번째 수이다.
+첫째 줄부터 아홉 번째 줄까지 한 줄에 하나의 자연수가 주어진다. 주어지는 자연수는 100 보다 작다.
+첫째 줄에 최댓값을 출력하고, 둘째 줄에 최댓값이 몇 번째 수인지를 출력한다.
+3 +29 +38 +12 +57 +74 +40 +85 +61 ++
85 +8 ++
가로, 세로의 크기가 각각 100인 정사각형 모양의 흰색 도화지가 있다. 이 도화지 위에 가로, 세로의 크기가 각각 10인 정사각형 모양의 검은색 색종이를 색종이의 변과 도화지의 변이 평행하도록 붙인다. 이러한 방식으로 색종이를 한 장 또는 여러 장 붙인 후 색종이가 붙은 검은 영역의 넓이를 구하는 프로그램을 작성하시오.
+ +예를 들어 흰색 도화지 위에 세 장의 검은색 색종이를 그림과 같은 모양으로 붙였다면 검은색 영역의 넓이는 260이 된다.
+첫째 줄에 색종이의 수가 주어진다. 이어 둘째 줄부터 한 줄에 하나씩 색종이를 붙인 위치가 주어진다. 색종이를 붙인 위치는 두 개의 자연수로 주어지는데 첫 번째 자연수는 색종이의 왼쪽 변과 도화지의 왼쪽 변 사이의 거리이고, 두 번째 자연수는 색종이의 아래쪽 변과 도화지의 아래쪽 변 사이의 거리이다. 색종이의 수는 100 이하이며, 색종이가 도화지 밖으로 나가는 경우는 없다
+첫째 줄에 색종이가 붙은 검은 영역의 넓이를 출력한다.
+3 +3 7 +15 7 +5 2 ++
260 ++
두 전봇대 A와 B 사이에 하나 둘씩 전깃줄을 추가하다 보니 전깃줄이 서로 교차하는 경우가 발생하였다. 합선의 위험이 있어 이들 중 몇 개의 전깃줄을 없애 전깃줄이 교차하지 않도록 만들려고 한다.
+ +예를 들어, < 그림 1 >과 같이 전깃줄이 연결되어 있는 경우 A의 1번 위치와 B의 8번 위치를 잇는 전깃줄, A의 3번 위치와 B의 9번 위치를 잇는 전깃줄, A의 4번 위치와 B의 1번 위치를 잇는 전깃줄을 없애면 남아있는 모든 전깃줄이 서로 교차하지 않게 된다.
+ +< 그림 1 >
+ +전깃줄이 전봇대에 연결되는 위치는 전봇대 위에서부터 차례대로 번호가 매겨진다. 전깃줄의 개수와 전깃줄들이 두 전봇대에 연결되는 위치의 번호가 주어질 때, 남아있는 모든 전깃줄이 서로 교차하지 않게 하기 위해 없애야 하는 전깃줄의 최소 개수를 구하는 프로그램을 작성하시오.
+첫째 줄에는 두 전봇대 사이의 전깃줄의 개수가 주어진다. 전깃줄의 개수는 100 이하의 자연수이다. 둘째 줄부터 한 줄에 하나씩 전깃줄이 A전봇대와 연결되는 위치의 번호와 B전봇대와 연결되는 위치의 번호가 차례로 주어진다. 위치의 번호는 500 이하의 자연수이고, 같은 위치에 두 개 이상의 전깃줄이 연결될 수 없다.
+첫째 줄에 남아있는 모든 전깃줄이 서로 교차하지 않게 하기 위해 없애야 하는 전깃줄의 최소 개수를 출력한다.
+8 +1 8 +3 9 +2 2 +4 1 +6 4 +10 10 +9 7 +7 6 ++
3 ++
<그림 1>과 같이 9×9 격자판에 쓰여진 81개의 자연수 또는 0이 주어질 때, 이들 중 최댓값을 찾고 그 최댓값이 몇 행 몇 열에 위치한 수인지 구하는 프로그램을 작성하시오.
+ +예를 들어, 다음과 같이 81개의 수가 주어지면
+ +| + | 1열 | +2열 | +3열 | +4열 | +5열 | +6열 | +7열 | +8열 | +9열 | +
|---|---|---|---|---|---|---|---|---|---|
| 1행 | +3 | +23 | +85 | +34 | +17 | +74 | +25 | +52 | +65 | +
| 2행 | +10 | +7 | +39 | +42 | +88 | +52 | +14 | +72 | +63 | +
| 3행 | +87 | +42 | +18 | +78 | +53 | +45 | +18 | +84 | +53 | +
| 4행 | +34 | +28 | +64 | +85 | +12 | +16 | +75 | +36 | +55 | +
| 5행 | +21 | +77 | +45 | +35 | +28 | +75 | +90 | +76 | +1 | +
| 6행 | +25 | +87 | +65 | +15 | +28 | +11 | +37 | +28 | +74 | +
| 7행 | +65 | +27 | +75 | +41 | +7 | +89 | +78 | +64 | +39 | +
| 8행 | +47 | +47 | +70 | +45 | +23 | +65 | +3 | +41 | +44 | +
| 9행 | +87 | +13 | +82 | +38 | +31 | +12 | +29 | +29 | +80 | +
이들 중 최댓값은 90이고, 이 값은 5행 7열에 위치한다.
+첫째 줄부터 아홉 번째 줄까지 한 줄에 아홉 개씩 수가 주어진다. 주어지는 수는 100보다 작은 자연수 또는 0이다.
+첫째 줄에 최댓값을 출력하고, 둘째 줄에 최댓값이 위치한 행 번호와 열 번호를 빈칸을 사이에 두고 차례로 출력한다. 최댓값이 두 개 이상인 경우 그 중 한 곳의 위치를 출력한다.
+3 23 85 34 17 74 25 52 65 +10 7 39 42 88 52 14 72 63 +87 42 18 78 53 45 18 84 53 +34 28 64 85 12 16 75 36 55 +21 77 45 35 28 75 90 76 1 +25 87 65 15 28 11 37 28 74 +65 27 75 41 7 89 78 64 39 +47 47 70 45 23 65 3 41 44 +87 13 82 38 31 12 29 29 80 ++
90 +5 7 ++
두 전봇대 A와 B 사이에 하나 둘씩 전깃줄을 추가하다 보니 전깃줄이 서로 교차하는 경우가 발생하였다. 합선의 위험이 있어 이들 중 몇 개의 전깃줄을 없애 전깃줄이 교차하지 않도록 만들려고 한다.
+ +예를 들어, <그림 1>과 같이 전깃줄이 연결되어 있는 경우 A의 1번 위치와 B의 8번 위치를 잇는 전깃줄, A의 3번 위치와 B의 9번 위치를 잇는 전깃줄, A의 4번 위치와 B의 1번 위치를 잇는 전깃줄을 없애면 남아있는 모든 전깃줄이 서로 교차하지 않게 된다.
+ +<그림 1>
+ +전깃줄이 전봇대에 연결되는 위치는 전봇대 위에서부터 차례대로 번호가 매겨진다. 전깃줄의 개수와 전깃줄들이 두 전봇대에 연결되는 위치의 번호가 주어질 때, 남아있는 모든 전깃줄이 서로 교차하지 않게 하기 위해 없애야 하는 최소 개수의 전깃줄을 구하는 프로그램을 작성하시오.
+첫째 줄에는 두 전봇대 사이의 전깃줄의 개수가 주어진다. 전깃줄의 개수는 100,000 이하의 자연수이다. 둘째 줄부터 한 줄에 하나씩 전깃줄이 A전봇대와 연결되는 위치의 번호와 B전봇대와 연결되는 위치의 번호가 차례로 주어진다. 위치의 번호는 500,000 이하의 자연수이고, 같은 위치에 두 개 이상의 전깃줄이 연결될 수 없다.
+첫째 줄에 남아있는 모든 전깃줄이 서로 교차하지 않게 하기 위해 없애야 하는 전깃줄의 최소 개수를 출력한다. 둘째 줄부터 한 줄에 하나씩 없애야 하는 전깃줄의 A전봇대에 연결되는 위치의 번호를 오름차순으로 출력한다. 만약 답이 두 가지 이상이라면 그 중 하나를 출력한다.
+8 +1 8 +3 9 +2 2 +4 1 +6 4 +10 10 +9 7 +7 6 ++
3 +1 +3 +4 ++
길이가 N인 배열 a가 주어진다. 배열 a의 i번째 원소를 ai라고 정의하자.
+ +다음 과정을 통해 배열에서 점수를 획득할 수 있다.
+ +배열 a에서 획득할 수 있는 점수의 최댓값을 구하시오. 단, 점수는 한 번만 획득 가능하다.
+첫째 줄에 배열 a의 길이 N이 주어진다.
+ +둘째 줄에 배열 a의 원소 ai가 공백으로 구분되어 주어진다.
+첫째 줄에 정답을 출력한다.
+2 +3 8 ++
4 +1 19 3 10 ++
6 ++
12 ++
계단 오르기 게임은 계단 아래 시작점부터 계단 꼭대기에 위치한 도착점까지 가는 게임이다. <그림 1>과 같이 각각의 계단에는 일정한 점수가 쓰여 있는데 계단을 밟으면 그 계단에 쓰여 있는 점수를 얻게 된다.
+ +<그림 1>
+ +예를 들어 <그림 2>와 같이 시작점에서부터 첫 번째, 두 번째, 네 번째, 여섯 번째 계단을 밟아 도착점에 도달하면 총 점수는 10 + 20 + 25 + 20 = 75점이 된다.
+ +<그림 2>
+ +계단 오르는 데는 다음과 같은 규칙이 있다.
+ +따라서 첫 번째 계단을 밟고 이어 두 번째 계단이나, 세 번째 계단으로 오를 수 있다. 하지만, 첫 번째 계단을 밟고 이어 네 번째 계단으로 올라가거나, 첫 번째, 두 번째, 세 번째 계단을 연속해서 모두 밟을 수는 없다.
+ +각 계단에 쓰여 있는 점수가 주어질 때 이 게임에서 얻을 수 있는 총 점수의 최댓값을 구하는 프로그램을 작성하시오.
+입력의 첫째 줄에 계단의 개수가 주어진다.
+ +둘째 줄부터 한 줄에 하나씩 제일 아래에 놓인 계단부터 순서대로 각 계단에 쓰여 있는 점수가 주어진다. 계단의 개수는 300이하의 자연수이고, 계단에 쓰여 있는 점수는 10,000이하의 자연수이다.
+첫째 줄에 계단 오르기 게임에서 얻을 수 있는 총 점수의 최댓값을 출력한다.
+6 +10 +20 +15 +25 +10 +20 ++
75 ++
코코는 특이하게 생긴 화이트 초콜릿과 다크 초콜릿을 무한히 많이 갖고 있다. 화이트 초콜릿은 각 모서리의 길이가 1인 사각 피라미드이고, 다크 초콜릿은 각 모서리의 길이가 1인 정사면체 모양이다. 어느 날 코코는 이 초콜릿들을 가지고 놀다가, 초콜릿을 잘 쌓으면 더 큰 사각 피라미드를 만들 수 있다는 사실을 알아냈다. 바닥면의 직사각형의 크기가 인 피라미드를 쌓는 구체적인 방법은 다음과 같다.
+ +아래 그림은 피라미드의 1층을 채우는 과정을 나타낸 것이다. 1층을 채우는 데에 화이트 초콜릿은 8개, 다크 초콜릿은 7개가 필요하고, 2층까지 합하면 각각 10개, 8개가 필요하다.
+ +코코는 아주 큰 초콜릿 피라미드를 만들어 한별이에게 선물하려고 한다. 이 때 화이트와 다크 초콜릿이 각각 몇 개씩 필요한지 계산해주자.
+첫 번째 줄에 테스트 케이스의 개수 가 주어진다. 다음 개의 줄 각각에는 정수 과 의 값이 순서대로 주어진다.
+각 테스트 케이스에 대해, 필요한 화이트 초콜릿의 개수와 다크 초콜릿의 개수를 한 줄에 순서대로 출력한다.
+2 +2 3 +10 10 ++
10 8 +670 660 ++
스도쿠는 18세기 스위스 수학자가 만든 '라틴 사각형'이랑 퍼즐에서 유래한 것으로 현재 많은 인기를 누리고 있다. 이 게임은 아래 그림과 같이 가로, 세로 각각 9개씩 총 81개의 작은 칸으로 이루어진 정사각형 판 위에서 이뤄지는데, 게임 시작 전 일부 칸에는 1부터 9까지의 숫자 중 하나가 쓰여 있다.
+ +나머지 빈 칸을 채우는 방식은 다음과 같다.
+ +위의 예의 경우, 첫째 줄에는 1을 제외한 나머지 2부터 9까지의 숫자들이 이미 나타나 있으므로 첫째 줄 빈칸에는 1이 들어가야 한다.
+ +또한 위쪽 가운데 위치한 3x3 정사각형의 경우에는 3을 제외한 나머지 숫자들이 이미 쓰여있으므로 가운데 빈 칸에는 3이 들어가야 한다.
+ +이와 같이 빈 칸을 차례로 채워 가면 다음과 같은 최종 결과를 얻을 수 있다.
+ +게임 시작 전 스도쿠 판에 쓰여 있는 숫자들의 정보가 주어질 때 모든 빈 칸이 채워진 최종 모습을 출력하는 프로그램을 작성하시오.
+아홉 줄에 걸쳐 한 줄에 9개씩 게임 시작 전 스도쿠판 각 줄에 쓰여 있는 숫자가 한 칸씩 띄워서 차례로 주어진다. 스도쿠 판의 빈 칸의 경우에는 0이 주어진다. 스도쿠 판을 규칙대로 채울 수 없는 경우의 입력은 주어지지 않는다.
+모든 빈 칸이 채워진 스도쿠 판의 최종 모습을 아홉 줄에 걸쳐 한 줄에 9개씩 한 칸씩 띄워서 출력한다.
+ +스도쿠 판을 채우는 방법이 여럿인 경우는 그 중 하나만을 출력한다.
+0 3 5 4 6 9 2 7 8 +7 8 2 1 0 5 6 0 9 +0 6 0 2 7 8 1 3 5 +3 2 1 0 4 6 8 9 7 +8 0 4 9 1 3 5 0 6 +5 9 6 8 2 0 4 1 3 +9 1 7 6 5 2 0 8 0 +6 0 3 7 0 1 9 5 2 +2 5 8 3 9 4 7 6 0 ++
1 3 5 4 6 9 2 7 8 +7 8 2 1 3 5 6 4 9 +4 6 9 2 7 8 1 3 5 +3 2 1 5 4 6 8 9 7 +8 7 4 9 1 3 5 2 6 +5 9 6 8 2 7 4 1 3 +9 1 7 6 5 2 3 8 4 +6 4 3 7 8 1 9 5 2 +2 5 8 3 9 4 7 6 1 ++
자연수 M과 N이 주어질 때 M이상 N이하의 자연수 중 소수인 것을 모두 골라 이들 소수의 합과 최솟값을 찾는 프로그램을 작성하시오.
+ +예를 들어 M=60, N=100인 경우 60이상 100이하의 자연수 중 소수는 61, 67, 71, 73, 79, 83, 89, 97 총 8개가 있으므로, 이들 소수의 합은 620이고, 최솟값은 61이 된다.
+입력의 첫째 줄에 M이, 둘째 줄에 N이 주어진다.
+ +M과 N은 10,000이하의 자연수이며, M은 N보다 작거나 같다.
+M이상 N이하의 자연수 중 소수인 것을 모두 찾아 첫째 줄에 그 합을, 둘째 줄에 그 중 최솟값을 출력한다.
+ +단, M이상 N이하의 자연수 중 소수가 없을 경우는 첫째 줄에 -1을 출력한다.
+60 +100 ++
64 +65 ++
620 +61 ++
-1 ++
어떤 수들이 있을 때, 그 수들을 대표하는 값으로 가장 흔하게 쓰이는 것은 평균이다. 평균은 주어진 모든 수의 합을 수의 개수로 나눈 것이다. 예를 들어 10, 40, 30, 60, 30의 평균은 (10 + 40 + 30 + 60 + 30) / 5 = 170 / 5 = 34가 된다.
+ +평균 이외의 또 다른 대표값으로 중앙값이라는 것이 있다. 중앙값은 주어진 수를 크기 순서대로 늘어 놓았을 때 가장 중앙에 놓인 값이다. 예를 들어 10, 40, 30, 60, 30의 경우, 크기 순서대로 늘어 놓으면
+ +10 30 30 40 60
+ +이 되고 따라서 중앙값은 30이 된다.
+ +다섯 개의 자연수가 주어질 때 이들의 평균과 중앙값을 구하는 프로그램을 작성하시오.
+첫째 줄부터 다섯 번째 줄까지 한 줄에 하나씩 자연수가 주어진다. 주어지는 자연수는 100 보다 작은 10의 배수이다.
+첫째 줄에는 평균을 출력하고, 둘째 줄에는 중앙값을 출력한다. 평균과 중앙값은 모두 자연수이다.
+10 +40 +30 +60 +30 ++
34 +30 ++
두 사람 A와 B가 번갈아 가면서 두 개의 구슬 통에서 몇 개씩의 구슬을 꺼내는 게임을 한다.
+ +한번에 한 사람이 한 통에서 꺼낼 수 있는 구슬의 개수는 세 가지 뿐이다. 그리고 구슬을 꺼낼 경우 두 개의 구슬 통 중에서 하나를 마음대로 선택해서 그 안에서만 꺼낼 수 있다. 즉 두 개의 통 모두에서 동시에 몇 개씩 꺼낼 수는 없다.
+ +게임은 항상 A가 먼저하고 그 다음 B, 그 다음 A 순으로 번갈아가면서 진행된다. 그리고 자신의 차례가 되었을 때에 정해진 규칙대로 구슬을 꺼낼 수 없는 사람이 게임에서 지게 되고, 상대방은 승리하게 된다.
+ +예를 들어 한번에 꺼낼 수 있는 구슬의 개수를 1개, 3개, 또는 4개라고 하자. 만일 두 개의 구슬 통에 각각 4개, 1개의 구슬이 있다고 하면 처음 선택을 하게 되는 A가 이긴다. 그러나 만일 두 통속의 구슬이 각각 5개, 5개라면 B가 이긴다.
+ +즉 한번에 꺼낼 수 있는 구슬 개수인 b1, b2, b3가 주어지고, 두 구슬 통 속에 들어있는 구슬의 수인 k1, k2이 정해지면, 이러한 b1, b2, b3와 k1, k2에 따라서 승패는 결정된다. 문제는 주어진 b1, b2, b3와 k1, k2에 대하여 A, B중 누가 승자인지를 결정하는 것이다.
+ +처음 두 통 속에 들어 있는 구슬의 수 k1, k2와 한 번에 꺼낼 수 있는 구슬의 수 b1, b2, b3에 대한 제한조건은 다음과 같다.
+ +첫 줄에는 한번에 꺼낼 수 있는 구슬의 개수를 나타내는 세 개의 정수 b1, b2, b3 가 나타난다. 그 다음 5개의 각 줄에는 두 통속에 처음 담겨있는 구슬의 개수 k1, k2가 각각 표시되어 있다.
+각 5개의 k1, k2 경우에 대하여 그에 대응되는 승자(A 또는 B)를 각각 한 줄에 하나씩 차례대로 다섯 개를 출력해야 한다.
+1 3 4 +4 1 +5 5 +10 2 +15 16 +30 14 ++
A +B +A +A +B ++
Sweden may not have a particularly impressive mountain range compared to other NCPC countries such as Norway and Iceland, but at least it beats the flatlands of Denmark. The situation is not so clear when comparing other member countries though. For example, is Estonia more mountainous than Lithuania? To settle this question, you want to determine which of the two countries has the most impressive mountain peak.
+ +A mountain range is defined by sampling the heights of equidistant points. Within a mountain range, we call a triple of indices a peak if . The height of a peak is defined as the smaller of and .
+ +Given a mountain range, can you find the height of its highest peak?
+The first line contains a single integer (), the number of sampled points of the mountain range.
+ +The second and final line contains the heights () of the sampled points, in nanometers above sea level.
+ +It is guaranteed that the mountain range contains at least one peak.
+Output a single integer: the height of the highest peak.
+11 +0 1 2 3 4 5 4 3 2 1 0 ++
10 +29 85 88 12 52 37 19 86 7 44 ++
3 +2147483647 318000000000 2147483647 ++
3 +1 1 1 ++
5 ++
67 ++
315852516353 ++
0 ++
신종 바이러스인 웜 바이러스는 네트워크를 통해 전파된다. 한 컴퓨터가 웜 바이러스에 걸리면 그 컴퓨터와 네트워크 상에서 연결되어 있는 모든 컴퓨터는 웜 바이러스에 걸리게 된다.
+ +예를 들어 7대의 컴퓨터가 <그림 1>과 같이 네트워크 상에서 연결되어 있다고 하자. 1번 컴퓨터가 웜 바이러스에 걸리면 웜 바이러스는 2번과 5번 컴퓨터를 거쳐 3번과 6번 컴퓨터까지 전파되어 2, 3, 5, 6 네 대의 컴퓨터는 웜 바이러스에 걸리게 된다. 하지만 4번과 7번 컴퓨터는 1번 컴퓨터와 네트워크상에서 연결되어 있지 않기 때문에 영향을 받지 않는다.
+ +어느 날 1번 컴퓨터가 웜 바이러스에 걸렸다. 컴퓨터의 수와 네트워크 상에서 서로 연결되어 있는 정보가 주어질 때, 1번 컴퓨터를 통해 웜 바이러스에 걸리게 되는 컴퓨터의 수를 출력하는 프로그램을 작성하시오.
+첫째 줄에는 컴퓨터의 수가 주어진다. 컴퓨터의 수는 100 이하인 양의 정수이고 각 컴퓨터에는 1번 부터 차례대로 번호가 매겨진다. 둘째 줄에는 네트워크 상에서 직접 연결되어 있는 컴퓨터 쌍의 수가 주어진다. 이어서 그 수만큼 한 줄에 한 쌍씩 네트워크 상에서 직접 연결되어 있는 컴퓨터의 번호 쌍이 주어진다.
+1번 컴퓨터가 웜 바이러스에 걸렸을 때, 1번 컴퓨터를 통해 웜 바이러스에 걸리게 되는 컴퓨터의 수를 첫째 줄에 출력한다.
+7 +6 +1 2 +2 3 +1 5 +5 2 +5 6 +4 7 ++
4 ++
자취 년 차 한별이는 슬슬 냉장고에 있는 음식들의 유통기한이 지나지 않았을지 걱정이다. 그러나 유통기한으로 적혀 있는 날짜의 연도/월/일 순서를 알 수 없어서 고민하고 있다.
+ +날짜를 표기하는 방법은 국가에 따라 다르며, 크게 세 가지 방법이 있다.
+ +따라서 예를 들어 10/12/32라는 날짜는
중 하나가 된다. 월 일이라는 날짜는 없으므로 적어도 연도/월/일 형식(년 월 일)은 아니라는 것을 알 수 있다.
+ +한별이는 냉장고 음식들의 유통기한을 보고 세 가지 방법 중 유효한 날짜로 해석 가능한 어떤 형식으로 해석해도 음식이 안전한지 알고 싶다. 한별이를 도와 음식이 안전한지 판단하는 프로그램을 작성해 보자.
+첫 번째 줄에 오늘 날짜를 나타내는 정수 , , 가 공백으로 구분되어 주어진다. 이는 오늘이 년 월 일이라는 것을 의미한다. (, 년 월 일은 올바른 날짜)
+ +다음 줄에는 냉장고의 음식의 개수 이 주어진다. ()
+ +다음 개의 줄에는 각 줄마다 음식의 유통기한을 나타내는 정수 , , 가 공백으로 구분되어 주어진다. 음식에는 유통기한이 //의 형식으로 적혀 있다. ()
+ +모든 날짜는 년에서 년 사이이며, 연도는 으로 나눈 나머지만이 주어진다.
+각 날짜마다 한 줄에 하나씩 다음 중 한 가지를 출력한다.
+ +invalid: 어떤 형식으로 해석해도 올바르지 않은 날짜인 경우safe: 해석 가능한 모든 형식에 대해 오늘 날짜가 유통기한보다 이전이거나 같은 날일 경우unsafe: 나머지 경우월, 월, 월, 월, 월, 월, 월은 각각 일까지 있다.
+ +월, 월, 월, 월은 각각 일까지 있다.
+ +월은 윤년인 경우 일, 윤년이 아닌 경우 일까지 있다. 문제에서 주어지는 연도에 한정할 경우, 로 나누어떨어지는 연도는 모두 윤년이다.
+22 11 26 +4 +22 11 30 +22 11 31 +22 12 1 +22 22 22 ++
safe +safe +unsafe +invalid ++
두 개의 자연수를 입력받아 최대 공약수와 최소 공배수를 출력하는 프로그램을 작성하시오.
+첫째 줄에는 두 개의 자연수가 주어진다. 이 둘은 10,000이하의 자연수이며 사이에 한 칸의 공백이 주어진다.
+첫째 줄에는 입력으로 주어진 두 수의 최대공약수를, 둘째 줄에는 입력으로 주어진 두 수의 최소 공배수를 출력한다.
+24 18 ++
6 +72+
++ +현대모비스는 글로벌 자동차 부품 기업으로 자율주행, 커넥티비티, 전동화 분야에 역량을 집중해 스마트 모빌리티 시대를 선도하고 있는 기업입니다.
+ +현대모비스는 소프트웨어 생태계 조성을 위해 소프트웨어 아카데미를 운영하고 있으며, 내부적으로는 연구원들의 소프트웨어 직무교육 이수를 통해 우수인재를 육성하고, 대외적으로는 채용 연계형 프로그램을 운영하여 취업 준비생들에게 소프트웨어 전문 교육을 무상으로 제공하고, 더 나아가 우수 이수자들을 채용하고 있습니다.
+
현대모비스에서 소프트웨어 아카데미 견학생을 모집한다고 한다. 이번 견학 활동은 모두 팀 단위로 진행되며 아래 두 조건을 모두 만족하는 팀만 소프트웨어 아카데미를 견학할 수 있다.
+ +Sogang ICPC Team 학회원 명이 견학을 희망한다. 학회장 동건이는 명으로 최대한 많은 팀을 만들어 견학을 보내고 싶다. 동건이가 최대 몇 팀이나 견학 보낼 수 있을지 구해보자.
+첫째 줄에 견학을 희망하는 학회원의 수 과 견학하는 팀의 최소 능력치를 나타내는 정수 이 공백으로 구분되어 주어진다. (, )
+ +둘째 줄에 학회원 명의 능력치를 나타내는 개의 정수 이 공백으로 구분되어 주어진다. ()
+첫째 줄에 동건이가 견학 보낼 수 있는 최대 팀 수를 출력한다.
+6 10 +3 5 7 3 5 6 ++
1 10 +100 ++
2 ++
0 ++
개의 정점으로 이루어진 트리가 주어진다. 트리의 각 정점은 번부터 번까지 번호가 매겨져 있고 번 정점은 루트이다.
+ +이 트리는 다음과 같은 특수한 성질을 가지고 있다.
+ +두 정점의 가장 가까운 공통 조상은, 두 정점을 모두 자손으로 가지면서 깊이가 가장 깊은 정점으로 정의한다.
+ +두 정수 와 가 주어졌을 때, 번 정점과 번 정점의 가장 가까운 공통 조상의 번호를 구해보자.
+첫째 줄에 정수 와 가 공백으로 구분되어 주어진다.
+첫째 줄에 번 정점과 번 정점의 가장 가까운 공통 조상의 번호를 출력한다.
+어떤 정점의 자손은 자기 자신을 포함한다.
+1 4 ++
21 49 ++
30 20 ++
1 ++
7 ++
5 ++
A palindrome string is a word which reads the same backward as forward, such as madam or racecar. In this problem we only consider strings with lowercase alphabets.
+ +We newly define the types of palindromes. If a string is not a palindrome, we try to make it a palindrome by removing the minimum number of characters in the string. For a string , if is the minimum number of characters removed to make the string a palindrome, we call the string type- palindrome. Thus, if is a palindrome, then is a type- palindrome.
+ +Given a string , write a program to determine if is a type- palindrome where .
+Your program is to read from standard input. The input is a single line containing a string with length () of lowercase alphabets.
+Your program is to write to standard output. Print exactly one line. The line should contain a number among if the input string is a type- palindrome where and otherwise . The negative number means the input string is not a type- palindrome where .
+aababaa ++
abccbbab ++
acmicpc ++
0 ++
2 ++
-1 ++
오목은 바둑판에 검은 바둑알과 흰 바둑알을 교대로 놓아서 겨루는 게임이다. 바둑판에는 19개의 가로줄과 19개의 세로줄이 그려져 있는데 가로줄은 위에서부터 아래로 1번, 2번, ... ,19번의 번호가 붙고 세로줄은 왼쪽에서부터 오른쪽으로 1번, 2번, ... 19번의 번호가 붙는다.
+ +위의 그림에서와 같이 같은 색의 바둑알이 연속적으로 다섯 알을 놓이면 그 색이 이기게 된다. 여기서 연속적이란 가로, 세로 또는 대각선 방향 모두를 뜻한다. 즉, 위의 그림은 검은색이 이긴 경우이다. 하지만 여섯 알 이상이 연속적으로 놓인 경우에는 이긴 것이 아니다.
+ +입력으로 바둑판의 어떤 상태가 주어졌을 때, 검은색이 이겼는지, 흰색이 이겼는지 또는 아직 승부가 결정되지 않았는지를 판단하는 프로그램을 작성하시오. 단, 검은색과 흰색이 동시에 이기거나 검은색 또는 흰색이 두 군데 이상에서 동시에 이기는 경우는 입력으로 들어오지 않는다.
+19줄에 각 줄마다 19개의 숫자로 표현되는데, 검은 바둑알은 1, 흰 바둑알은 2, 알이 놓이지 않는 자리는 0으로 표시되며, 숫자는 한 칸씩 띄어서 표시된다.
+첫줄에 검은색이 이겼을 경우에는 1을, 흰색이 이겼을 경우에는 2를, 아직 승부가 결정되지 않았을 경우에는 0을 출력한다. 검은색 또는 흰색이 이겼을 경우에는 둘째 줄에 연속된 다섯 개의 바둑알 중에서 가장 왼쪽에 있는 바둑알(연속된 다섯 개의 바둑알이 세로로 놓인 경우, 그 중 가장 위에 있는 것)의 가로줄 번호와, 세로줄 번호를 순서대로 출력한다.
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 1 2 0 0 2 2 2 1 0 0 0 0 0 0 0 0 0 0 +0 0 1 2 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 +0 0 0 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 1 2 2 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 2 1 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++
1 +3 2 ++
플래피 버드는 장애물을 피해 최대한 멀리까지 도달하는 게임이다.
+ +하나의 장애물을 피할 때마다 점씩 점수를 얻게 된다. 게임에는 총 개의 장애물이 존재하고, 번째 장애물은 두 개의 장애물로 표현된다. 상단 장애물 끝 지점의 위치는 로 나타내어지고, 하단 장애물 끝 지점의 위치는 로 나타내어진다.
+ +플래피 버드 고수 세정이는 장애물이 어떤 식으로 주어지든 플래피 버드를 조작해 피할 수 있다. (단, 플래피 버드의 크기가 장애물의 틈새보다 클 경우에는 세정이도 장애물을 피하지 못한다.) 즉, 플래피 버드의 크기 가 장애물의 틈새보다 클 경우에는 장애물을 피하지 못한다. 이때, 장애물을 피하지 못하면 게임이 바로 끝나게 된다.
+ +여러 종류의 플래피 버드가 각 게임마다 주어질 때, 해당 플래피 버드를 가지고 몇 점까지 획득할 수 있는지 구하려고 한다.
+ +세정이의 게임 스코어를 구해 출력해보자.
+첫 번째 줄에는 장애물의 개수 이 주어진다.
+ +두 번째 줄에는 상단 장애물의 위치 가 공백으로 구분되어 주어진다.
+ +세 번째 줄에는 하단 장애물의 위치 가 공백으로 구분되어 주어진다. (이때, 주어지는 입력은 임이 보장된다.)
+ +네 번째 줄에는 플레이할 플래피 버드의 개수 가 주어진다.
+ +다섯 번째 줄에는 각 플래피 버드의 크기 가 주어진다.
+각 플래피 버드별로 세정이가 얻을 수 있는 최대 게임 스코어를 각 줄마다 하나씩 출력한다.
+7 +10 5 7 7 8 9 10 +1 -1 2 -1 5 2 9 +4 +3 7 5 1 ++
6 +1 +4 +7 ++
++ +나락도 락이다. 부모님께 온 연락도 락이다. 오락가락?도 락? 이다.?
+
알파벳 대문자로 이루어진 길이 의 문자열 가 주어진다. 의 부분열 중 ROCK으로 끝나는 문자열의 개수를 로 나눈 나머지를 출력하라.
+첫 번째 줄에 문자열 의 길이 이 주어진다.
+ +두 번째 줄에 알파벳 대문자로만 이루어진 문자열 가 주어진다.
+의 부분열 중 ROCK으로 끝나는 문자열의 개수를 로 나눈 나머지를 출력한다.
+문자열의 부분열이란 문자열에서 몇몇 문자를 지운(물론 지우지 않아도 된다) 문자열을 의미한다. 예를 들어 aan은 hanyang의 부분열이다.
+6 +NAROCK ++
5 +RROCK ++
4 ++
3 ++
Spies Breaching Computers (SBC) is a private digital spy agency that is developing a new device for intercepting information using electromagnetic waves, which allows spying even without physical contact with the target.
+ +The device tries to collect information one byte at a time, this is, a sequence of bits where each of them, naturally, can have a value of or . In certain situations, due to interference from other devices, the reading cannot be done successfully. In this case, the device returns the value for the corresponding bit, informing that the reading could not be performed.
+ +In order to automate the recognition of the information the device reads, a request was made for a program that, based on the information read by the device, informs whether all bits were read successfully or not. Your task is to write this program.
+The input consists of a single line, containing integers , , , , , , and , indicating the values read by the device ( is 0, 1 or 9 for ).
Print a single line containing the capital letter “S” if all bits are read successfully; otherwise print a single line containing the capital letter “F”, corresponding to a failure.
0 0 1 1 0 1 0 1 ++
0 0 1 9 0 1 0 1 ++
S ++
F ++
인터넷 방송 KOI(Korea Open Internet)의 음악 프로그램 PD인 남일이는 자기가 맡은 프로그램 '뮤직 KOI'에서 가수의 출연 순서를 정하는 일을 매우 골치 아파한다. 순서를 정하기 위해서는 많은 조건을 따져야 한다.
+ +그래서 오늘 출연 예정인 여섯 팀의 가수에 대해서 남일이가 보조 PD 세 명에게 각자 담당한 가수의 출연 순서를 정해오게 하였다. 보조 PD들이 가져온 것은 아래와 같다.
+ +첫 번째 보조 PD는 1번 가수가 먼저, 다음에 4번 가수, 다음에 3번 가수가 출연하기로 순서를 정했다. 두 번째 보조 PD는 6번, 2번, 5번, 4번 순으로 자기 담당 가수들의 순서를 정했다. 한 가수를 여러 보조 PD가 담당할 수도 있다. 마지막으로, 세 번째 보조 PD는 2번 먼저, 다음에 3번으로 정했다.
+ +남일이가 할 일은 이 순서들을 모아서 전체 가수의 순서를 정하는 것이다. 남일이는 잠시 생각을 하더니 6 2 1 5 4 3으로 순서를 정했다. 이렇게 가수 순서를 정하면 세 보조 PD가 정해온 순서를 모두 만족한다. 물론, 1 6 2 5 4 3으로 전체 순서를 정해도 괜찮다.
+ +경우에 따라서 남일이가 모두를 만족하는 순서를 정하는 것이 불가능할 수도 있다. 예를 들어, 세 번째 보조 PD가 순서를 2 3 대신에 3 2로 정해오면 남일이가 전체 순서를 정하는 것이 불가능하다. 이번에 남일이는 우리 나라의 월드컵 4강 진출 기념 음악제의 PD를 맡게 되었는데, 출연 가수가 아주 많다. 이제 여러분이 해야 할 일은 보조 PD들이 가져 온 순서들을 보고 남일이가 가수 출연 순서를 정할 수 있도록 도와 주는 일이다.
+ +보조 PD들이 만든 순서들이 입력으로 주어질 때, 전체 가수의 순서를 정하는 프로그램을 작성하시오.
+첫째 줄에는 가수의 수 N과 보조 PD의 수 M이 주어진다. 가수는 번호 1, 2,…,N 으로 표시한다. 둘째 줄부터 각 보조 PD가 정한 순서들이 한 줄에 하나씩 나온다. 각 줄의 맨 앞에는 보조 PD가 담당한 가수의 수가 나오고, 그 뒤로는 그 가수들의 순서가 나온다. N은 1이상 1,000이하의 정수이고, M은 1이상 100이하의 정수이다.
+출력은 N 개의 줄로 이뤄지며, 한 줄에 하나의 번호를 출력한 다. 이들은 남일이가 정한 가수들의 출연 순서를 나타낸다. 답이 여럿일 경우에는 아무거나 하나를 출력 한다. 만약 남일이가 순서를 정하는 것이 불가능할 경우에는 첫째 줄에 0을 출력한다.
+6 3 +3 1 4 3 +4 6 2 5 4 +2 2 3 ++
6 +2 +1 +5 +4 +3 ++
아래 <그림 1>과 같이 여러개의 정사각형칸들로 이루어진 정사각형 모양의 종이가 주어져 있고, 각 정사각형들은 하얀색으로 칠해져 있거나 파란색으로 칠해져 있다. 주어진 종이를 일정한 규칙에 따라 잘라서 다양한 크기를 가진 정사각형 모양의 하얀색 또는 파란색 색종이를 만들려고 한다.
+ +전체 종이의 크기가 N×N(N=2k, k는 1 이상 7 이하의 자연수) 이라면 종이를 자르는 규칙은 다음과 같다.
+ +전체 종이가 모두 같은 색으로 칠해져 있지 않으면 가로와 세로로 중간 부분을 잘라서 <그림 2>의 I, II, III, IV와 같이 똑같은 크기의 네 개의 N/2 × N/2색종이로 나눈다. 나누어진 종이 I, II, III, IV 각각에 대해서도 앞에서와 마찬가지로 모두 같은 색으로 칠해져 있지 않으면 같은 방법으로 똑같은 크기의 네 개의 색종이로 나눈다. 이와 같은 과정을 잘라진 종이가 모두 하얀색 또는 모두 파란색으로 칠해져 있거나, 하나의 정사각형 칸이 되어 더 이상 자를 수 없을 때까지 반복한다.
+ +위와 같은 규칙에 따라 잘랐을 때 <그림 3>은 <그림 1>의 종이를 처음 나눈 후의 상태를, <그림 4>는 두 번째 나눈 후의 상태를, <그림 5>는 최종적으로 만들어진 다양한 크기의 9장의 하얀색 색종이와 7장의 파란색 색종이를 보여주고 있다.
+ +입력으로 주어진 종이의 한 변의 길이 N과 각 정사각형칸의 색(하얀색 또는 파란색)이 주어질 때 잘라진 하얀색 색종이와 파란색 색종이의 개수를 구하는 프로그램을 작성하시오.
+첫째 줄에는 전체 종이의 한 변의 길이 N이 주어져 있다. N은 2, 4, 8, 16, 32, 64, 128 중 하나이다. 색종이의 각 가로줄의 정사각형칸들의 색이 윗줄부터 차례로 둘째 줄부터 마지막 줄까지 주어진다. 하얀색으로 칠해진 칸은 0, 파란색으로 칠해진 칸은 1로 주어지며, 각 숫자 사이에는 빈칸이 하나씩 있다.
+첫째 줄에는 잘라진 햐얀색 색종이의 개수를 출력하고, 둘째 줄에는 파란색 색종이의 개수를 출력한다.
+8 +1 1 0 0 0 0 1 1 +1 1 0 0 0 0 1 1 +0 0 0 0 1 1 0 0 +0 0 0 0 1 1 0 0 +1 0 0 0 1 1 1 1 +0 1 0 0 1 1 1 1 +0 0 1 1 1 1 1 1 +0 0 1 1 1 1 1 1 ++
9 +7 ++
You just finished disking your field and it is time to head back to the farmhouse. Some of the livestock has been acting up (you think it is the Clydesdale horses but you’re not sure) and putting up obstacles to prevent you from getting home.
+The first line contains a single positive integer, n, denoting the side length of the square field. The next n lines will consist of a map of your field, with ‘.’ denoting an open space and ‘x’ denoting an obstacle. You are in the top left corner of the field and the farmhouse is in the bottom right corner of the field. You don’t have a lot of gas in the tractor, so each move you make must be either down or right (no backtracking).
+Print “Yes” if there is a simple path (down and right moves only) to your farm house. If there is no simple path print “No”.
+6 +..x... +.x.... +....x. +xx.x.. +..x... +...... ++
5 +.x.x. +..... +xxx.. +....x +.x... ++
No ++
Yes ++
A mathematician has stolen your calculator! Luckily, you know how to code and can write a program that adds together numbers. Write a program that adds together a list of integers.
+The first line will contain a single integer n that indicates the number of integers to add together. The next n lines will each contain one integer. Your task is to write a program that adds all of the integers together.
+Output the resulting integer. The output should be one line containing one integer value.
+3 +1 +2 +3 ++
6 ++
At a contest you have been asked to write a program that reads in a line of text and reverses the order of all words that begin with vowels. Words that begin with consonants will keep their position in the line of text. You are not sure why you would ever need this, but hey it’s worth points.
+There will be an unknown number of lines to process and each line will only contain words that are each separated with a single space.
+For each input, display the converted line on its own line.
+apple +Eat apples +snakes are coming into Your house +Axe hat bat other toy octagon me I love oranges ++
apple +apples Eat +snakes into coming are Your house +oranges hat bat I toy octagon me other love Axe ++
The International Costumes and Props Company (ICPC) received an order from a client to produce N pennants each containing the same word. However, due to some miscommunication between the account manager and the client, not all the produced pennants have the same word although all of them have a word of the same length. Reproducing those pennants is very costly as the ICPC only uses a certain type of rare fabric in their production.
+ +Fortunately, the client didn’t specify the word that they want to be in the pennants. In fact, the client will be satisfied if and only if all the pennants have the same word.
+ +The ICPC has a special technique to change one character in a word into some other character. It is expensive, albeit not as expensive as reproducing a new pennant. Therefore, the ICPC has to minimize the number of times they have to use such a technique. Your task in this problem is to help the ICPC to determine the minimum total number of characters that need to be changed so that the client will be satisfied.
+ +For example, let there be N = 6 pennants with the following words: calf, palm, book, icpc, ball, and room. The total number of characters than need to be changed can be minimized if all the words are changed into balm.
calf → 2 characters: b**mpalm → 1 characters: b***book → 3 characters: *almicpc → 4 characters: balmball → 1 characters: ***mroom → 3 characters: bal*The symbol * represents an unchanged character. There are a total of 14 characters that need to be changed in this example.
Input begins with a line containing two integers N M (2 ≤ N ≤ 100; 1 ≤ M ≤ 100) representing the number of pennants and the length of each word in the pennant, respectively. The next N line each contains a string Si (|Si| = M) representing the word on the ith pennant. Each string only contains lowercase alphabetical characters.
+Output contains an integer in a line representing the minimum total number of characters that need to be changed so that the client will be satisfied.
+6 4 +calf +palm +book +icpc +ball +room ++
3 11 +goodluckfor +icpcjakarta +contestants ++
5 14 +helpiamtrapped +inanincfactory +forthreemonths +withoutfoodand +drinkandshower ++
14 ++
19 ++
49 ++
+ 팩스는 Run-Length Encoding(RLE)라고 불리는 인코딩을 사용한다. RLE란 아주 단순한 데이터 압축으로 데이터를 데이터와 반복된 횟수로 저장하는 방식을 말한다. 이 방식은 상대적으로 단순한 그래픽 이미지(아이콘, 글, 선 긋기)와 같이 반복이 많은 데이터를 압축할 때 좋다. 그러나 사진과 같이 반복이 별로 없다면 별로 좋지 않고, 거의 파일 크기를 두배로 늘린다.
+ ++ 아주 간단한 RLE 알고리즘을 이용하여 데이터 뭉치를 해독하는 프로그램을 작성해야 한다.
++ run은 2바이트를 사용하여 인코딩된다. 첫 번째 바이트는 반복횟수(count)를 뜻하고, 두 번째 바이트는 반복될 문자(값,value)를 뜻한다.
+ ++ count 바이트는 첫 번째 비트가 1이며, 남은 7개의 비트로 [반복될 횟수-3]을 저장한다. 그러므로 최대 130번의 반복까지 저장할 수 있다. (즉 3회이상 반복되어야 이런 형식으로 인코딩된다는 뜻이다.) 값을 저장하는 value 바이트는 첫 번째 비트가 0이며 남은 7개의 비트로 [값-1]형태로 저장하여 1부터 128까지의 값을 저장할 수 있다.
++ 첫째 줄은 데이터 세트 수 P(1 ≤ P ≤ 1000)가 입력으로 들어온다. 각각의 데이터 세트는 여러 줄로 구성되어 있는데, 첫째 줄은 문제 번호와 디코딩해야 할 바이트 수 B(1 ≤ B ≤ 5000)가 공백으로 구분되어 들어온다. 남은 줄은 디코드해야할 데이터로 구성되어 있다. 데이터는 한 줄에 각 80개의 16진법 숫자이며 (마지막 줄은 80개보다 적을 수 있다), 16진법 숫자 2개가 하나의 바이트를 나타낸다.
+ ++ (16진법 수는 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F로 구성되어 있다)
++ 각각의 데이터 세트에 대해 여러 줄의 출력을 해야한다. 첫째 줄은 코딩한 바이트 수를 출력한다. 남은 줄은 디코딩한 데이터를 출력하는데, 한 줄에 80개의 16진수로 출력한다. (마지막 줄은 80개보다 적을 수 있다)
+4 +2 +0007 +4 +00F481A5 +32 +850080FF016666825A0A717273747580080110111384550301020399807700CC +2 +A568 ++
1 +07 +5 +F4A5A5A5A5 +44 +0000000000000000FFFFFF66665A5A5A5A5A71727374758008011011135555555555555501020399 +777777CC +40 +68686868686868686868686868686868686868686868686868686868686868686868686868686868 ++
Bessie is in Camelot and has encountered a sticky situation: she needs to pass through the forest that is guarded by the Knights of Ni. In order to pass through safely, the Knights have demanded that she bring them a single shrubbery. Time is of the essence, and Bessie must find and bring them a shrubbery as quickly as possible.
+ +Bessie has a map of of the forest, which is partitioned into a square grid arrayed in the usual manner, with axes parallel to the X and Y axes. The map is W x H units in size (1 ≤ W ≤ 1000; 1 ≤ H ≤ 1000).
+ +The map shows where Bessie starts her quest, the single square where the Knights of Ni are, and the locations of all the shrubberies of the land. It also shows which areas of the map can be traverse (some grid blocks are impassable because of swamps, cliffs, and killer rabbits). Bessie can not pass through the Knights of Ni square without a shrubbery.
+ +In order to make sure that she follows the map correctly, Bessie can only move in four directions: North, East, South, or West (i.e., NOT diagonally). She requires one day to complete a traversal from one grid block to a neighboring grid block.
+ +It is guaranteed that Bessie will be able to obtain a shrubbery and then deliver it to the Knights of Ni. Determine the quickest way for her to do so.
+8 4 +4 1 0 0 0 0 1 0 +0 0 0 1 0 1 0 0 +0 2 1 1 3 0 4 0 +0 0 0 4 1 1 1 0 ++
11 ++
《보드게임컵》을 준비하다 지친 은하는 보드게임컵 참가자들을 경기장에 몰아넣고 결투를 시키는 게임 《수 나누기 게임》을 만들었습니다.
+ +《수 나누기 게임》의 규칙은 다음과 같습니다.
+ +《수 나누기 게임》의 결과를 가지고 한별이와 내기를 하던 은하는 게임이 종료되기 전에 모든 플레이어의 점수를 미리 알 수 있을지 궁금해졌습니다. 은하를 위해 각 플레이어가 가지고 있는 카드에 적힌 수가 주어졌을 때, 게임이 종료된 후의 모든 플레이어의 점수를 구해주세요.
+첫 번째 줄에 플레이어의 수 이 주어집니다.
+ +두 번째 줄에 첫 번째 플레이어부터 번째 플레이어까지 각 플레이어가 가지고 있는 카드에 적힌 정수 , , 이 공백으로 구분되어 주어집니다.
+첫 번째 플레이어부터 번째 플레이어까지 게임이 종료됐을 때의 각 플레이어의 점수를 공백으로 구분하여 출력해주세요.
+3 +3 4 12 ++
4 +7 23 8 6 ++
1 1 -2 ++
0 0 0 0 ++
미국으로 유학간 동혁이는 세탁소를 운영하고 있다. 동혁이는 최근에 아르바이트로 고등학생 리암을 채용했다.
+ +동혁이는 리암에게 실망했다.
+ +리암은 거스름돈을 주는 것을 자꾸 실수한다.
+ +심지어 \5달러를 주는것이다!
+ +어쩔수 없이 뛰어난 코딩 실력을 발휘해 리암을 도와주는 프로그램을 작성하려고 하지만, 디아블로를 하느라 코딩할 시간이 없어서 이 문제를 읽고 있는 여러분이 대신 해주어야 한다.
+ +거스름돈의 액수가 주어지면 리암이 줘야할 쿼터(Quarter, \0.10)의 개수, 니켈(Nickel, \0.01)의 개수를 구하는 프로그램을 작성하시오. 거스름돈은 항상 \1.24를 거슬러 주어야 한다면, 손님은 4쿼터, 2다임, 0니켈, 4페니를 받게 된다.
+첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 거스름돈 C를 나타내는 정수 하나로 이루어져 있다. C의 단위는 센트이다. (1달러 = 100센트) (1<=C<=500)
+각 테스트케이스에 대해 필요한 쿼터의 개수, 다임의 개수, 니켈의 개수, 페니의 개수를 공백으로 구분하여 출력한다.
+3 +124 +25 +194+
4 2 0 4 +1 0 0 0 +7 1 1 4+
n번째 삼각수, T(n)은 1부터 n까지의 합이다. T(n) = 1 + ... + n. 이것은 삼각형 모양으로 표현할 수 있다. 아래 그림은 T(4)를 나타낸 것이다.
+ +다음과 같은 식을 통해 가중치를 부여한 삼각수의 합을 구할 수 있다.
+ +W(n) = Sum[k=1..n; k*T(k+1)]
+ +n이 주어졌을 때, W(n)을 구하는 프로그램을 작성하시오.
+첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 정수 n 하나로 이루어져 있다. (1<=n<=300)
+각 테스트 케이스에 대해 W(n)을 한 줄에 하나씩 출력한다.
+4 +3 +4 +5 +10+
45 +105 +210 +2145+
정수 A, B 가 주어진다. 세로 길이가 A cm, 가로 길이가 B cm 인 아래와 같은 직사각형의 넓이를 cm2 단위로 구하시오.
+ +표준 입력에 다음과 같은 형태로 입력이 주어진다.
+ ++A +B+
세로 길이가 A cm, 가로 길이가 B cm인 직사각형의 넓이를 cm2 단위로 구하고, 단위 (cm2)를 생략하여 출력한다.
+2 +3 ++
100 +1 ++
4 +4 ++
6 ++
100 ++
16 ++
Brainf*ck은 Urban Müller가 1993년에 만든 프로그래밍 언어이다. 그의 목적은 역사상 가장 작은 튜링 완전 언어(Turing -complete language)의 컴파일러를 만드는 것이었다.위키백과에는 다음과 같은 설명이 적혀져 있다. (designed to challenge and amuse programmers, and was not made to be suitable for practical use)
+ +이 언어는 0으로 초기화 된 크기가 32768바이트인 바이트 배열, 배열의 맨 첫 바이트를 가리키는 포인터를 가지고 있다.
+ +다음과 같이 7가지 명령어를 가지고 있으며, 각 명령어는 문자 1글자이다. (원래 8가지 명령어를 가지고 있지만, 문제를 위해 하나를 지웠다)
+ +>: 포인터를 증가시킨다. 만약, 포인터 값이 32767이면 0이된다.<: 포인터를 감소시킨다. 만약, 포인터 값이 0이면 32767이 된다.+: 포인터가 가리키는 값을 증가시킨다. 255를 증가시키면 0이 된다.-: 포인터가 가리키는 값을 감소시킨다. 0을 감소시키면 255가 된다..: 포인터가 가리키는 값을 ASCII문자로 출력한다.[: 포인터가 가리키는 값이 0이면, 짝이 되는 뒤쪽의 ]로 이동한다.]: 포인터가 가리키는 값이 0이 아니면, 짝이되는 앞쪽의 [로 이동한다.Brainf*ck 프로그램이 주어졌을 때, 이 프로그램의 출력을 출력하는 프로그램을 작성하시오.
+첫째 줄에 프로그램의 개수 T(1 ≤ T ≤ 100)가 주어진다. 각 프로그램은 한줄 또는 그 이상으로 구성되어 있으며, end만 적혀있는 줄로 끝난다. 프로그램에 올바르지 않은 문자 (<>+-.[])가 있다면, 이는 무시하고 넘어가야 한다. %는 주석을 의미하며, %가 나온 뒤에 나오는 해당 줄의 문자는 모두 무시한다. 프로그램의 최대 명령어 개수는 128,000이다.
각 프로그램의 결과를 다음과 같이 출력한다. 첫째 줄에 PROGRAM #n을 출력한다. n은 프로그램 번호이다. (첫 번째 프로그램부터 차례대로 1이고, 1 ≤ n ≤ N이다). 둘째 줄에는 프로그램의 결과를 출력한다. 만약 [나 ]가 짝이 맞지 않을 대는 COMPILE ERROR를 출력하면 된다. 출력에서 여러 줄을 출력할 수도 있다.
3 +++++++++[>+++++++++ % hello-world. +<-]>.<+++++[>++++++<-]>-.+++++++.. ++++.<++++++++[>>++++<<-]>>.<<++++[> +------<-]>.<++++[>++++++<-]>.+++. +------.--------.>+. +end ++++[>+++++++[. +end +%% Print alphabet, A-Z. ++ + + + + +++++++++++++++++++++> +++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ ++< [ >.+<- ] +end ++
PROGRAM #1: +Hello World! +PROGRAM #2: +COMPILE ERROR +PROGRAM #3: +ABCDEFGHIJKLMNOPQRSTUVWXYZ ++
N*M크기의 두 행렬 A와 B가 주어졌을 때, 두 행렬을 더하는 프로그램을 작성하시오.
+첫째 줄에 행렬의 크기 N 과 M이 주어진다. 둘째 줄부터 N개의 줄에 행렬 A의 원소 M개가 차례대로 주어진다. 이어서 N개의 줄에 행렬 B의 원소 M개가 차례대로 주어진다. N과 M은 100보다 작거나 같고, 행렬의 원소는 절댓값이 100보다 작거나 같은 정수이다.
+첫째 줄부터 N개의 줄에 행렬 A와 B를 더한 행렬을 출력한다. 행렬의 각 원소는 공백으로 구분한다.
+3 3 +1 1 1 +2 2 2 +0 1 0 +3 3 3 +4 4 4 +5 5 100 ++
4 4 4 +6 6 6 +5 6 100 ++
0보다 크거나 같은 정수 N이 주어진다. 이때, N!을 출력하는 프로그램을 작성하시오.
+첫째 줄에 정수 N(0 ≤ N ≤ 20)이 주어진다.
+첫째 줄에 N!을 출력한다.
+10 ++
0 ++
3628800 ++
1 ++
666은 종말을 나타내는 수라고 한다. 따라서, 많은 블록버스터 영화에서는 666이 들어간 제목을 많이 사용한다. 영화감독 숌은 세상의 종말 이라는 시리즈 영화의 감독이다. 조지 루카스는 스타워즈를 만들 때, 스타워즈 1, 스타워즈 2, 스타워즈 3, 스타워즈 4, 스타워즈 5, 스타워즈 6과 같이 이름을 지었고, 피터 잭슨은 반지의 제왕을 만들 때, 반지의 제왕 1, 반지의 제왕 2, 반지의 제왕 3과 같이 영화 제목을 지었다. 하지만 숌은 자신이 조지 루카스와 피터 잭슨을 뛰어넘는다는 것을 보여주기 위해서 영화 제목을 좀 다르게 만들기로 했다.
+ +종말의 수란 어떤 수에 6이 적어도 3개 이상 연속으로 들어가는 수를 말한다. 제일 작은 종말의 수는 666이고, 그 다음으로 큰 수는 1666, 2666, 3666, .... 이다. 따라서, 숌은 첫 번째 영화의 제목은 "세상의 종말 666", 두 번째 영화의 제목은 "세상의 종말 1666"와 같이 이름을 지을 것이다. 일반화해서 생각하면, N번째 영화의 제목은 세상의 종말 (N번째로 작은 종말의 수) 와 같다.
+ +숌이 만든 N번째 영화의 제목에 들어간 수를 출력하는 프로그램을 작성하시오. 숌은 이 시리즈를 항상 차례대로 만들고, 다른 영화는 만들지 않는다.
+첫째 줄에 N이 주어진다. N은 13,559,699보다 작거나 같은 자연수이다.
+첫째 줄에 N번째 영화의 제목에 들어간 수를 출력한다.
+2 ++
3 ++
6 ++
187 ++
500 ++
1666 ++
2666 ++
5666 ++
66666 ++
166699 ++
+ 영어 소문자와 대문자로 이루어진 단어를 입력받은 뒤, 대문자는 소문자로, 소문자는 대문자로 바꾸어 출력하는 프로그램을 작성하시오.
++ 첫째 줄에 영어 소문자와 대문자로만 이루어진 단어가 주어진다. 단어의 길이는 최대 100이다.
++ 첫째 줄에 입력으로 주어진 단어에서 대문자는 소문자로, 소문자는 대문자로 바꾼 단어를 출력한다.
+WrongAnswer ++
wRONGaNSWER ++
B진법 수 N이 주어진다. 이 수를 10진법으로 바꿔 출력하는 프로그램을 작성하시오.
+ +10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를 사용한다.
+ +A: 10, B: 11, ..., F: 15, ..., Y: 34, Z: 35
+첫째 줄에 N과 B가 주어진다. (2 ≤ B ≤ 36)
+ +B진법 수 N을 10진법으로 바꾸면, 항상 10억보다 작거나 같다.
+첫째 줄에 B진법 수 N을 10진법으로 출력한다.
+ZZZZZ 36 ++
60466175 ++
N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오.
+첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 절댓값이 1,000,000보다 작거나 같은 정수이다. 수는 중복되지 않는다.
+첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다.
+5 +5 +4 +3 +2 +1 ++
1 +2 +3 +4 +5 ++
() 꼴의 정수 또는 으로만 이루어진 수열이 있습니다. 흐즈로는 이 수열에 대해 다음과 같은 연산을 정의했습니다.
+ +예를 들어, 수열 에 을 골라 실행한다면 수열은 이 되며, 여기에 를 골라 실행한다면 수열은 이 됩니다.
+ +흐즈로는 수열에 연산을 여러 번 실행하여 수열의 최댓값이 가능한 한 커지길 원합니다. 흐즈로는 이 연산을 계속 반복했다가는 머리가 아파질 것이라고 생각하여, 여러분에게 프로그램 제작을 부탁하기로 했습니다. 수열이 주어졌을 때, 흐즈로가 정의한 연산을 번 이상 시행하여 수열의 최댓값을 가능한 한 크게 만들어주세요.
+첫 번째 줄에 수열의 길이 이 주어집니다.
+ +두 번째 줄에 수열의 각 원소 또는 가 주어집니다. 수열 에는 꼴의 정수가 반드시 하나 이상 존재합니다.
+첫 줄에 흐즈로가 정의한 연산을 번 이상 수행해 만들 수 있는 가장 큰 최댓값을 출력하세요. 문제의 답은 보다 크지 않음이 보장됩니다.
+20 +512 32 64 0 0 0 0 64 64 0 32 0 0 0 512 0 0 256 256 256 ++
2048 ++
동규는 세수를 하다가 정렬이 하고 싶어졌다.
+ +정수 세 개를 생각한 뒤에, 이를 오름차순으로 정렬하고 싶어졌다.
+ +정수 세 개가 주어졌을 때, 가장 작은 수, 그 다음 수, 가장 큰 수를 출력하는 프로그램을 작성하시오.
+정수 세 개가 주어진다. 이 수는 1보다 크거나 같고, 1,000,000보다 작거나 같다. 이 수는 모두 다르다.
+제일 작은 수, 그 다음 수, 제일 큰 수를 차례대로 출력한다.
+3 1 2 ++
1 2 3 ++
어떤 사람의 C언어 성적이 주어졌을 때, 평점은 몇 점인지 출력하는 프로그램을 작성하시오.
+ +A+: 4.3, A0: 4.0, A-: 3.7
+ +B+: 3.3, B0: 3.0, B-: 2.7
+ +C+: 2.3, C0: 2.0, C-: 1.7
+ +D+: 1.3, D0: 1.0, D-: 0.7
+ +F: 0.0
+첫째 줄에 C언어 성적이 주어진다. 성적은 문제에서 설명한 13가지 중 하나이다.
+첫째 줄에 C언어 평점을 출력한다.
+A0 ++
4.0 ++
The th Champernowne word is obtained by writing down the first positive integers and concatenating them together. For example, the 10th Champernowne word is "12345678910".
+ +Given two positive integers and , count how many of the first Champernowne words are divisible by .
+The single line of input contains two integers, and .
+Output a single integer, which is a count of the first Champernowne words divisible by .
+4 2 ++
100 7 ++
314 159 ++
100000 999809848 ++
2 ++
14 ++
4 ++
1 ++
Tennis is a racket sport that is played by two opposing players on S sets. Each set consists of at least K games. A set is won by a player if that player wins at least K games and at least 2 games more than the opponent. Once a set is won, the set is ended and the match continues to a new set (if any) where both players start from 0 game won for that new set.
+ +For example, let K = 6, then a set can be ended with any of the following.
+ +On the other hand, a set cannot be ended with any of the following.
+ +You are given K, S and N, determine whether there could be such a tennis match with S sets to ends exactly with N games. If there is such a tennis match, then output “YES” (without quotes) in a single line, otherwise, output “NO” (without quotes) in a single line.
+ +For example, let K = 4, S = 2, and N = 14. It is possible to have such a tennis match. One the possibilities is as follows.
+ +There are a total of N = 6 + 4 + 4 + 0 = 14 games on S = 2 sets where each set is won if a player won at least K = 4 games and at least 2 games more than the opponent.
+Input contains three integers K S N (2 ≤ K ≤ 109; 1 ≤ S, N ≤ 109) in a line representing the minimum number of games to win a set, the total number of sets, and the total number of games, respectively.
+Output in a line a string “YES” or “NO” (without quotes) whether it is possible to have such a tennis match.
+4 2 14 ++
3 1 2 ++
6 5 181 ++
YES ++
NO ++
YES ++
크기의 차원 배열이 있다. 당신은 배열의 각 칸에 이상 이하의 정수를 채워 넣어 배열을 증가 상태로 만들고자 한다.
+ +배열이 증가 상태라는 것은 에서 출발해서 을 향해 오른쪽이나 아래쪽으로 이동할 때 가능한 모든 경로에 대해, 각 경로에서 방문한 칸의 수를 처음부터 일렬로 나열한 수열이 오름차순임을 의미한다.
+ +첫째 줄에 , , 가 주어진다.
+조건에 맞는 배열이 존재하면 첫 번째 줄에 YES를 출력하고 두 번째 줄부터 개의 각 줄에 이상 이하의 수 개를 공백으로 구분하여 출력하라. 조건에 맞는 배열이 여러 개일 경우 그중 하나만 출력한다.
그런 배열이 존재하지 않으면 NO를 출력하라.
3 5 15 ++
3 5 6 ++
YES +1 4 5 7 13 +2 5 7 8 14 +5 6 8 9 15 ++
NO ++
부터 까지의 수가 하나씩 임의로 배열된 길이 의 수열 이 주어진다. 주어진 수열에서 연속된 개의 수를 고른 후, 선택한 개의 수의 구간 내에서 개의 수를 자유롭게 재배열하는 연산을 한 번 수행한다.
+ +연산을 수행한 후, 수열에서 만들 수 있는 연속된 증가하는 부분 수열의 최대 길이를 구하시오.
+ +증가하는 수열이란, 모든 에 대해 인 수열을 말한다.
+첫 번째 줄에 정수 , 가 공백으로 구분되어 주어진다.
+ +두 번째 줄에 정수 이 공백으로 구분되어 주어진다.
+첫 번째 줄에 수열에서 만들 수 있는 연속된 증가하는 부분 수열의 최대 길이를 출력한다.
+5 3 +2 1 5 3 4 ++
7 3 +3 2 1 7 4 5 6 ++
4 ++
5 ++
평소 반상회에 참석하는 것을 좋아하는 주희는 이번 기회에 부녀회장이 되고 싶어 각 층의 사람들을 불러 모아 반상회를 주최하려고 한다.
+ +이 아파트에 거주를 하려면 조건이 있는데, “a층의 b호에 살려면 자신의 아래(a-1)층의 1호부터 b호까지 사람들의 수의 합만큼 사람들을 데려와 살아야 한다” 는 계약 조항을 꼭 지키고 들어와야 한다.
+ +아파트에 비어있는 집은 없고 모든 거주민들이 이 계약 조건을 지키고 왔다고 가정했을 때, 주어지는 양의 정수 k와 n에 대해 k층에 n호에는 몇 명이 살고 있는지 출력하라. 단, 아파트에는 0층부터 있고 각층에는 1호부터 있으며, 0층의 i호에는 i명이 산다.
+첫 번째 줄에 Test case의 수 T가 주어진다. 그리고 각각의 케이스마다 입력으로 첫 번째 줄에 정수 k, 두 번째 줄에 정수 n이 주어진다
+각각의 Test case에 대해서 해당 집에 거주민 수를 출력하라.
+2 +1 +3 +2 +3 ++
6 +10 ++
연종이는 엄청난 기억력을 가지고 있다. 그래서 하루 동안 본 정수들을 모두 기억 할 수 있다. 하지만 이를 믿을 수 없는 동규는 그의 기억력을 시험해 보기로 한다. 동규는 연종을 따라 다니며, 연종이 하루 동안 본 정수들을 모두 ‘수첩1’에 적어 놓았다. 그것을 바탕으로 그가 진짜 암기왕인지 알아보기 위해, 동규는 연종에게 M개의 질문을 던졌다. 질문의 내용은 “X라는 정수를 오늘 본 적이 있는가?” 이다. 연종은 막힘없이 모두 대답을 했고, 동규는 연종이 봤다고 주장하는 수 들을 ‘수첩2’에 적어 두었다. 집에 돌아온 동규는 답이 맞는지 확인하려 하지만, 연종을 따라다니느라 너무 힘들어서 여러분에게 도움을 요청했다. 동규를 도와주기 위해 ‘수첩2’에 적혀있는 순서대로, 각각의 수에 대하여, ‘수첩1’에 있으면 1을, 없으면 0을 출력하는 프로그램을 작성해보자.
+첫째 줄에 테스트케이스의 개수 T가 들어온다. 다음 줄에는 ‘수첩 1’에 적어 놓은 정수의 개수 N(1 ≤ N ≤ 1,000,000)이 입력으로 들어온다. 그 다음 줄에 ‘수첩 1’에 적혀 있는 정수들이 N개 들어온다. 그 다음 줄에는 ‘수첩 2’에 적어 놓은 정수의 개수 M(1 ≤ M ≤ 1,000,000) 이 주어지고, 다음 줄에 ‘수첩 2’에 적어 놓은 정수들이 입력으로 M개 들어온다. 모든 정수들의 범위는 int 로 한다.
+‘수첩2’에 적혀있는 M개의 숫자 순서대로, ‘수첩1’에 있으면 1을, 없으면 0을 출력한다.
+1 +5 +4 1 5 2 3 +5 +1 3 7 9 5 ++
1 +1 +0 +0 +1 ++
석원이는 자신의 현관문에 비밀번호 기계를 설치했다. 그 기계의 모양은 다음과 같다.
+ +지나가던 석원이 친구 주희는 단순한 호기심에 저 비밀번호를 풀고 싶어한다. 이때 주희는 바닥에 떨어져 있는 힌트 종이를 줍게 된다. 이 종이에는 석원이가 비밀번호를 만들 때 사용했던 조건이 적혀 있다. 이제 주희는 이 조건을 가지고, 석원이 집의 가능한 비밀번호의 전체 개수를 알고 싶어 한다. 현재 컴퓨터를 사용할 수 없는 주희는 당신에게 이 문제를 부탁했다. 석원이의 힌트 종이는 다음과 같다.
+ +(ex. 15 라는 비밀번호는 불가능하다. (1과 5는 인접하지 않는다. ) 하지만 1236이라는 비밀번호는 가능하다.)
+첫 번째 줄에 Test case의 수 T가 주어진다. 그리고 각각의 케이스마다 입력으로 첫 번째 줄에 비밀번호의 길이 N이 주어진다.( 1 <= N <= 1,000 )
+각각의 Test case에 대해서 조건을 만족하는 비밀번호의 개수를 출력하라. 단, 수가 매우 커질 수 있으므로 비밀번호의 개수를 1,234,567으로 나눈 나머지를 출력하라.
+3 +1 +2 +3 ++
10 +26 +74 ++
단어 와 정수 가 주어졌을 때, 의 번째 글자를 출력하는 프로그램을 작성하시오.
+첫째 줄에 영어 소문자와 대문자로만 이루어진 단어 가 주어진다. 단어의 길이는 최대 이다.
+ +둘째 줄에 정수 가 주어진다. ()
+의 번째 글자를 출력한다.
+문자열 에 대해 는 의 길이를 의미한다.
+Sprout +3 ++
shiftpsh +6 ++
Baekjoon +4 ++
r ++
p ++
k ++
어떤 수식이 주어졌을 때, 괄호를 제거해서 나올 수 있는 서로 다른 식의 개수를 계산하는 프로그램을 작성하시오.
+ +이 수식은 괄호가 올바르게 쳐져 있다. 예를 들면, 1+2, (3+4), (3+4*(5+6))와 같은 식은 괄호가 서로 쌍이 맞으므로 올바른 식이다.
+ +하지만, 1+(2*3, ((2+3)*4 와 같은 식은 쌍이 맞지 않는 괄호가 있으므로 올바른 식이 아니다.
+ +괄호를 제거할 때는, 항상 쌍이 되는 괄호끼리 제거해야 한다.
+ +예를들어 (2+(2*2)+2)에서 괄호를 제거하면, (2+2*2+2), 2+(2*2)+2, 2+2*2+2를 만들 수 있다. 하지만, (2+2*2)+2와 2+(2*2+2)는 만들 수 없다. 그 이유는 쌍이 되지 않는 괄호를 제거했기 때문이다.
+ +어떤 식을 여러 쌍의 괄호가 감쌀 수 있다.
+첫째 줄에 음이 아닌 정수로 이루어진 수식이 주어진다. 이 수식은 괄호가 올바르게 쳐져있다. 숫자, '+', '*', '-', '/', '(', ')'로만 이루어져 있다. 수식의 길이는 최대 200이고, 괄호 쌍은 적어도 1개, 많아야 10개이다.
+올바른 괄호 쌍을 제거해서 나올 수 있는 서로 다른 식을 사전 순으로 출력한다.
+(0/(0)) ++
(2+(2*2)+2) ++
(1+(2*(3+4))) ++
(0/0) +0/(0) +0/0 ++
(2+2*2+2) +2+(2*2)+2 +2+2*2+2 ++
(1+(2*3+4)) +(1+2*(3+4)) +(1+2*3+4) +1+(2*(3+4)) +1+(2*3+4) +1+2*(3+4) +1+2*3+4 ++
2차원 공간에서 점의 위치를 표현하는 방식은 여러 가지가 있다. 일반적으로 많이 쓰이는 직교좌표계는 x축, y축 방향의 1차원 위치를 통해 점의 위치를 표현한다. 이 문제에서는 점의 2차원 위치를 표현하는 또 다른 방식을 소개한다. 편의상 점 의 직교좌표계상 좌표를 라 하자.
+ +직교좌표계와 극좌표계 중 하나를 사용하는 의 좌표가 주어졌을 때, 이를 다른 하나의 좌표계를 사용하는 좌표로 바꿔보자.
+첫째 줄에 테스트 케이스의 수 가 주어진다.
+ +둘째 줄부터 테스트 케이스가 주어진다. 각 테스트 케이스는 개의 줄로 이루어져 있다.
+ +테스트 케이스의 첫째 줄에는 변환할 좌표의 좌표계 번호가 주어진다. 1은 직교좌표계, 2는 극좌표계이다.
테스트 케이스의 둘째 줄에는 변환할 좌표를 나타내는 두 실수 , 가 소수점 아래 여덟째 자리까지 주어진다. 는 직교좌표계의 경우 이고, 극좌표계의 경우 이다.
+각 테스트 케이스마다 한 줄에 변환한 좌표를 나타내는 두 실수를 출력한다.
+ +절대오차 혹은 상대오차는 까지 허용한다.
+2 +1 +1.00000000 2.00000000 +2 +2.23606798 1.10714872 ++
2 +1 +-1.00000000 -2.00000000 +2 +2.23606798 4.24874137 ++
2 +1 +0.00000000 0.00000000 +2 +0.00000000 0.00000000 ++
2.23606798 1.10714872 +1 2 ++
2.23606798 4.24874137 +-1 -2 ++
0 0 +0 0 ++
상근이는 나무 M미터가 필요하다. 근처에 나무를 구입할 곳이 모두 망해버렸기 때문에, 정부에 벌목 허가를 요청했다. 정부는 상근이네 집 근처의 나무 한 줄에 대한 벌목 허가를 내주었고, 상근이는 새로 구입한 목재절단기를 이용해서 나무를 구할것이다.
+ +목재절단기는 다음과 같이 동작한다. 먼저, 상근이는 절단기에 높이 H를 지정해야 한다. 높이를 지정하면 톱날이 땅으로부터 H미터 위로 올라간다. 그 다음, 한 줄에 연속해있는 나무를 모두 절단해버린다. 따라서, 높이가 H보다 큰 나무는 H 위의 부분이 잘릴 것이고, 낮은 나무는 잘리지 않을 것이다. 예를 들어, 한 줄에 연속해있는 나무의 높이가 20, 15, 10, 17이라고 하자. 상근이가 높이를 15로 지정했다면, 나무를 자른 뒤의 높이는 15, 15, 10, 15가 될 것이고, 상근이는 길이가 5인 나무와 2인 나무를 들고 집에 갈 것이다. (총 7미터를 집에 들고 간다) 절단기에 설정할 수 있는 높이는 양의 정수 또는 0이다.
+ +상근이는 환경에 매우 관심이 많기 때문에, 나무를 필요한 만큼만 집으로 가져가려고 한다. 이때, 적어도 M미터의 나무를 집에 가져가기 위해서 절단기에 설정할 수 있는 높이의 최댓값을 구하는 프로그램을 작성하시오.
+첫째 줄에 나무의 수 N과 상근이가 집으로 가져가려고 하는 나무의 길이 M이 주어진다. (1 ≤ N ≤ 1,000,000, 1 ≤ M ≤ 2,000,000,000)
+ +둘째 줄에는 나무의 높이가 주어진다. 나무의 높이의 합은 항상 M보다 크거나 같기 때문에, 상근이는 집에 필요한 나무를 항상 가져갈 수 있다. 높이는 1,000,000,000보다 작거나 같은 양의 정수 또는 0이다.
+적어도 M미터의 나무를 집에 가져가기 위해서 절단기에 설정할 수 있는 높이의 최댓값을 출력한다.
+4 7 +20 15 10 17 ++
5 20 +4 42 40 26 46 ++
15 ++
36 ++
이 문제는 수학 선생님의 고민(Easy)의 상위 문제이고, 수학 선생님의 고민(Easy)에 이 문제의 정답 코드를 제출하여 맞힐 수 있다.
+ +차형준 선생님은 여느 때와 같이 재밌는 문제를 고민하다가 다음과 같이 양의 정수 에 대한 이차식 을 정수 범위에서 인수분해 하는 문제를 고안하게 되었다.
+ +이 작을 때에는 쉽게 손으로 계산할 수 있었지만, 이 커짐에 따라 문제는 버거워졌다.
+ +따라서 선생님은 수학은 잘 못해도 시키는 대로 코딩은 하는 도훈이에게 문제를 맡겼다. 하지만 도훈이는 사실 ChatGPT가 알려준 코드를 복사-붙여넣기 해왔을 뿐이라 실상은 "Hello World!" 정도나 출력할 줄 안다. 그래서 도훈이는 늘 하던 대로 ChatGPT에게 코딩을 부탁했다.
+ +하지만 답변 받는 도중 인터넷이 끊겨버렸다..!
+ +ChatGPT에게 프로그램을 만들어달라고 하다가 인터넷이 끊긴 모습이다.
+ +도훈이를 도와 를 정수 범위에서 인수분해 하는 프로그램을 작성하여라.
+첫 번째 줄에 양의 정수 이 주어진다.
+첫 번째 줄에 주어진 에 대해 이차식 가 정수 범위에서 인수분해가 불가능하다면 -1을 출력하고, 가능하다면 인수분해 한 결과를 나타내는 네 정수 , , , 를 공백으로 구분하여 출력한다. 이 네 정수는 임을 의미한다. 가능한 쌍이 여러 가지라면 그중 아무것이나 출력한다.
1 ++
2 ++
1 -1 1 3 ++
-1 ++
상근이는 오락실에서 바구니를 옮기는 오래된 게임을 한다. 스크린은 N칸으로 나누어져 있다. 스크린의 아래쪽에는 M칸을 차지하는 바구니가 있다. (M<N) 플레이어는 게임을 하는 중에 바구니를 왼쪽이나 오른쪽으로 이동할 수 있다. 하지만, 바구니는 스크린의 경계를 넘어가면 안 된다. 가장 처음에 바구니는 왼쪽 M칸을 차지하고 있다.
+ +스크린의 위에서 사과 여러 개가 떨어진다. 각 사과는 N칸중 한 칸의 상단에서 떨어지기 시작하며, 스크린의 바닥에 닿을때까지 직선으로 떨어진다. 한 사과가 바닥에 닿는 즉시, 다른 사과가 떨어지기 시작한다.
+ +바구니가 사과가 떨어지는 칸을 차지하고 있다면, 바구니는 그 사과가 바닥에 닿을 때, 사과를 담을 수 있다. 상근이는 사과를 모두 담으려고 한다. 이때, 바구니의 이동 거리의 최솟값을 구하는 프로그램을 작성하시오.
+첫째 줄에 N과 M이 주어진다. (1 ≤ M < N ≤ 10) 둘째 줄에 떨어지는 사과의 개수 J가 주어진다. (1 ≤ J ≤ 20) 다음 J개 줄에는 사과가 떨어지는 위치가 순서대로 주어진다.
+모든 사과를 담기 위해서 바구니가 이동해야 하는 거리의 최솟값을 출력한다.
+5 1 +3 +1 +5 +3 ++
5 2 +3 +1 +5 +3 ++
6 ++
4 ++
Albert는 혼자서도 할 수 있는 보드 게임을 즐겨한다. 이 게임을 플레이 하기 위해 우선 행 열 크기의 격자 보드 게임판을 준비한 후 임의의 칸에 벽을 설치한다. 이후, 개의 서로 다른 빈칸에 (즉, 벽이 없는 칸) 게임말을 하나씩 놓고, 마지막으로 남아있는 빈칸 중 한 곳을 골라 각 게임말이 도달해야하는 목적지를 정한다 - 목적지 칸의 위치를 라 하자 (행 열). 편의상 게임말에는 1번부터 번까지 번호가 붙어있다고 하고, 번째 말이 놓인 칸을 라 하자.
+ +예를 들어 아래 그림의 좌측은 인 게임 보드판의 모습을 나타내고 'W' 로 표시된 칸은 벽을 나타낸다. 나머지 '.' 로 표시된 칸은 빈칸을 나타낸다. 편의상 이 문제에서 문자열 는 번째 행의 게임 보드판의 모습을 나타내는 길이가 인 문자열이라 하면, 이 예제의 게임 보드판은 ".WW.", "..W.", ".WW.", "...." 로 나타낼 수 있다. 우측 그림은 이후 Albert가 총 3개의 게임말을 놓은 칸과 목적지 칸을 나타내는데, , ], 그리고 이다.
이 때 각 말이 목적지에 도달하려면 벽이 없는 빈칸을 통해 상/하/좌/우로 이동할 수 있는데, 번째 말이 목적지까지 이동해야하는 최소 거리를 라 하자. 위 예제에서 (하 -> 우 로 이동하면 된다), , 그리고 임을 쉽게 알 수 있다. 모든 말이 이동해야하는 최소 거리의 총 합을 라 하고, 이는 게임의 점수가 된다 - 이 예제의 게임 점수는 점이다.
+ +이 놀이가 너무 심심하다고 느낀 Albet는 게임을 약간 변형해보기로 했다. 우선, 맨 처음의 보드 게임 상태를 유지한채로 벽을 하나 없애보기로 했다. 벽을 없애면 새로운 길이 생길 수 있으므로 게임의 점수는 같거나 낮아질텐데, 이 점수의 차이를 없어진 "벽의 가치"라 정의하자. 위 예제에서는 벽이 총 5칸 있으므로, 아래 그림 처럼 5가지 다른 방법으로 벽을 딱 하나 없앨 수 있다 - 벽이 없어진 칸은 알아보기 쉽도록 그림에서 'X'로 표시했지만 빈칸이므로 게임말이 지나갈 수 있다.
+ +위 다섯가지의 새로운 게임 보드에서 점수를 구한 후 기존 게임의 점수 (앞서 구한 17점) 과의 차이를 구하면 없앤 벽의 가치가 된다. 왼쪽 부터 순서대로 이를 구해보면:
+ +게임 보드의 상태가 주어졌을 때, 기존 게임의 점수 를 구하고 모든 벽의 가치 총합도 구해보자.
+입력 첫 줄에 테스트 케이스의 수 가 주어진다.
+ +각 테스트 케이스의 첫 줄에는 가 공백으로 구분되어 주어진다. 다음 줄에 걸쳐 각 줄에 한 쌍의 정수가 공백으로 구분되어 주어지는데 이는 순서대로 번째 게임 말의 위치인 를 나타낸다. 다음 줄에 걸쳐 각 줄에 길이가 인 문자열이 공백없이 주어지는데 이는 순서대로 번째 행의 보드 게임판을 나타내는 문자열 이며, 벽이 있는 칸은 'W'가 주어지고 없는 칸은 '.'가 주어진다.
+각 테스트 케이스의 정답인 한 쌍의 정수를 공백으로 구분하여 각 줄에 출력한다. 첫 정수는 기존 게임의 점수인 를 출력하고 두 번째 정수는 모든 벽의 가치 총합을 나타낸다.
+3 +4 4 3 2 2 +1 1 +1 4 +4 4 +.WW. +..W. +.WW. +.... +5 7 3 2 4 +2 1 +4 3 +3 7 +.W..W.. +.WW.WWW +.W..W.. +....W.. +....... +5 7 3 2 4 +2 1 +4 3 +3 7 +.W..... +.WW.WW. +.W..W.. +....W.. +....W.. ++
17 12 +18 10 +16 6 ++
소수전공 수업을 마무리한 찬우는 축하의 의미로 학생들에게 사탕을 나누어 주려 한다. 구체적으로, 기준이 되는 음이 아닌 정수 를 정한 뒤 최종 점수가 점을 넘는 학생들에게 점수가 높은 만큼 많은 사탕을 줄 것이다. 즉, 점을 받은 학생은 개, 점을 받은 학생은 개, ()점을 받은 학생은 개의 사탕을 받게 된다.
+ +찬우는 학생들에게 최대한 많은 사탕을 나누어주고 싶기 때문에 기준 점수 를 가능한 한 낮게 정하려 한다. 하지만, 지금 가지고 있는 돈으로는 사탕을 개까지만 살 수 있기 때문에 사탕의 총 개수가 개를 넘으면 안 된다.
+ +찬우의 수업은 총 명이 수강했고, 번째 학생은 점을 받았다. 수강생의 수와 각 학생의 점수, 사탕의 최대 개수 가 주어질 때 찬우를 위해 가능한 의 최솟값을 구하는 프로그램을 작성해 주자.
+첫째 줄에 정수 , 가 공백으로 구분되어 주어진다.
+ +둘째 줄에 개의 정수 이 공백으로 구분되어 주어진다.
+첫째 줄에 가능한 기준 의 최솟값을 출력한다.
+입출력 양이 많으므로 문제지 2-4페이지의 언어 가이드에 있는 빠른 입출력을 사용하는 것을 권장한다.
+4 80 +80 100 50 40 ++
4 61 +80 100 50 40 ++
50 ++
60 ++
상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그램 봉지와 5킬로그램 봉지가 있다.
+ +상근이는 귀찮기 때문에, 최대한 적은 봉지를 들고 가려고 한다. 예를 들어, 18킬로그램 설탕을 배달해야 할 때, 3킬로그램 봉지 6개를 가져가도 되지만, 5킬로그램 3개와 3킬로그램 1개를 배달하면, 더 적은 개수의 봉지를 배달할 수 있다.
+ +상근이가 설탕을 정확하게 N킬로그램 배달해야 할 때, 봉지 몇 개를 가져가면 되는지 그 수를 구하는 프로그램을 작성하시오.
+첫째 줄에 N이 주어진다. (3 ≤ N ≤ 5000)
+상근이가 배달하는 봉지의 최소 개수를 출력한다. 만약, 정확하게 N킬로그램을 만들 수 없다면 -1을 출력한다.
+18 ++
4 ++
6 ++
9 ++
11 ++
4 ++
-1 ++
2 ++
3 ++
3 ++
땅 위에 달팽이가 있다. 이 달팽이는 높이가 V미터인 나무 막대를 올라갈 것이다.
+ +달팽이는 낮에 A미터 올라갈 수 있다. 하지만, 밤에 잠을 자는 동안 B미터 미끄러진다. 또, 정상에 올라간 후에는 미끄러지지 않는다.
+ +달팽이가 나무 막대를 모두 올라가려면, 며칠이 걸리는지 구하는 프로그램을 작성하시오.
+첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000)
+첫째 줄에 달팽이가 나무 막대를 모두 올라가는데 며칠이 걸리는지 출력한다.
+2 1 5 ++
5 1 6 ++
100 99 1000000000 ++
4 ++
2 ++
999999901 ++
FizzBuzz 문제는 에 대해 다음 규칙에 따라 문자열을 한 줄에 하나씩 출력하는 문제입니다.
+ +FizzBuzz”를 출력합니다.Fizz”를 출력합니다.Buzz”를 출력합니다.FizzBuzz 문제에서 연속으로 출력된 세 개의 문자열이 주어집니다. 이때, 이 세 문자열 다음에 올 문자열은 무엇일까요?
+FizzBuzz 문제에서 연속으로 출력된 세 개의 문자열이 한 줄에 하나씩 주어집니다. 각 문자열의 길이는 이하입니다. 입력이 항상 FizzBuzz 문제에서 연속으로 출력된 세 개의 문자열에 대응됨이 보장됩니다.
+연속으로 출력된 세 개의 문자열 다음에 올 문자열을 출력하세요. 여러 문자열이 올 수 있는 경우, 아무거나 하나 출력하세요.
+FizzBuzz 문제의 에 대한 출력은 다음과 같습니다.
+ ++1 +2 +Fizz +4 +Buzz +Fizz +7 +8 +Fizz +Buzz +11 +Fizz +13 +14 +FizzBuzz +16 +17 +Fizz +19 +Buzz+
Fizz +Buzz +11 ++
980803 +980804 +FizzBuzz ++
Fizz ++
980806 ++
길이가 인 양의 정수로 이루어진 배열 이 주어집니다. 이 배열을 비내림차순, 즉, 이 되도록 정렬하기 위해서 다음과 같은 가지 조작을 순서와 횟수에 상관 없이 원하는 만큼 할 수 있습니다.
+ +를 비내림차순으로 정렬하기 위해 필요한 비용 총합의 최솟값을 출력하세요.
+첫 줄에 배열 의 길이 이 주어집니다.
+ +둘째 줄에 의 각 원소 이 공백으로 구분되어 주어집니다.
+ +셋째 줄에 조작의 개수 이 주어집니다.
+ +다음 개의 줄의 번째 줄에 조작을 의미하는 세 개의 정수 가 공백으로 구분되어 주어집니다.
+첫 줄에 배열 를 비내림차순으로 정렬하기 위해 필요한 비용 총합의 최솟값을 출력하세요. 단, 배열을 비내림차순으로 만드는 것이 불가능한 경우 대신 을 출력하세요.
+4 +1 4 3 2 +4 +1 2 4 +2 3 3 +3 4 2 +1 4 10 ++
4 +1 3 1 3 +6 +1 2 3 +1 3 3 +1 4 3 +2 3 3 +2 4 1 +3 4 1 ++
5 +5 4 3 2 1 +2 +1 2 5 +3 4 3 ++
7 ++
2 ++
-1 ++
상근이는 매일 아침 알람을 듣고 일어난다. 알람을 듣고 바로 일어나면 다행이겠지만, 항상 조금만 더 자려는 마음 때문에 매일 학교를 지각하고 있다.
+ +상근이는 모든 방법을 동원해보았지만, 조금만 더 자려는 마음은 그 어떤 것도 없앨 수가 없었다.
+ +이런 상근이를 불쌍하게 보던 창영이는 자신이 사용하는 방법을 추천해 주었다.
+ +바로 "45분 일찍 알람 설정하기"이다.
+ +이 방법은 단순하다. 원래 설정되어 있는 알람을 45분 앞서는 시간으로 바꾸는 것이다. 어차피 알람 소리를 들으면, 알람을 끄고 조금 더 잘 것이기 때문이다. 이 방법을 사용하면, 매일 아침 더 잤다는 기분을 느낄 수 있고, 학교도 지각하지 않게 된다.
+ +현재 상근이가 설정한 알람 시각이 주어졌을 때, 창영이의 방법을 사용한다면, 이를 언제로 고쳐야 하는지 구하는 프로그램을 작성하시오.
+첫째 줄에 두 정수 H와 M이 주어진다. (0 ≤ H ≤ 23, 0 ≤ M ≤ 59) 그리고 이것은 현재 상근이가 설정한 알람 시간 H시 M분을 의미한다.
+ +입력 시간은 24시간 표현을 사용한다. 24시간 표현에서 하루의 시작은 0:0(자정)이고, 끝은 23:59(다음날 자정 1분 전)이다. 시간을 나타낼 때, 불필요한 0은 사용하지 않는다.
+첫째 줄에 상근이가 창영이의 방법을 사용할 때, 설정해야 하는 알람 시간을 출력한다. (입력과 같은 형태로 출력하면 된다.)
+10 10 ++
0 30 ++
23 40 ++
9 25 ++
23 45 ++
22 55 ++
+ 때는 2040년, 이민혁은 우주에 자신만의 왕국을 만들었다. 왕국은 N개의 행성으로 이루어져 있다. 민혁이는 이 행성을 효율적으로 지배하기 위해서 행성을 연결하는 터널을 만들려고 한다.
+ ++ 행성은 3차원 좌표위의 한 점으로 생각하면 된다. 두 행성 A(xA, yA, zA)와 B(xB, yB, zB)를 터널로 연결할 때 드는 비용은 min(|xA-xB|, |yA-yB|, |zA-zB|)이다.
+ ++ 민혁이는 터널을 총 N-1개 건설해서 모든 행성이 서로 연결되게 하려고 한다. 이때, 모든 행성을 터널로 연결하는데 필요한 최소 비용을 구하는 프로그램을 작성하시오.
++ 첫째 줄에 행성의 개수 N이 주어진다. (1 ≤ N ≤ 100,000) 다음 N개 줄에는 각 행성의 x, y, z좌표가 주어진다. 좌표는 -109보다 크거나 같고, 109보다 작거나 같은 정수이다. 한 위치에 행성이 두 개 이상 있는 경우는 없다.
++ 첫째 줄에 모든 행성을 터널로 연결하는데 필요한 최소 비용을 출력한다.
+5 +11 -15 -15 +14 -5 -15 +-1 -1 -5 +10 -4 -1 +19 -4 19 ++
4 ++
상근이는 친구들과 함께 SF영화를 찍으려고 한다. 이 영화는 외계 지형이 필요하다. 실제로 우주선을 타고 외계 행성에 가서 촬영을 할 수 없기 때문에, 컴퓨터 그래픽으로 CG처리를 하려고 한다.
+ +외계 지형은 중앙 이동 알고리즘을 이용해서 만들려고 한다.
+ +알고리즘을 시작하면서 상근이는 정사각형을 이루는 점 4개를 고른다. 그 후에는 다음과 같은 과정을 거쳐서 지형을 만든다.
+ +초기 상태에서 위와 같은 과정을 한 번 거치면 총 4개의 정사각형이 새로 생긴다. 이와 같은 과정을 상근이가 만족할 때 까지 계속한다.
+ +아래 그림은 과정을 총 2번 거쳤을 때까지의 모습이다.
+ +| 초기 상태 - 점 4개 | +1번 - 점 9개 | +2번 - 25개 | +
상근이는 어떤 점은 한 개 보다 많은 정사각형에 포함될 수 있다는 사실을 알았다. 메모리 소모량을 줄이기 위해서 중복하는 점을 한 번만 저장하려고 한다. 과정을 N번 거친 후 점 몇 개를 저장해야 하는지 구하는 프로그램을 작성하시오.
+첫째 줄에 N이 주어진다. (1 ≤ N ≤ 15)
+첫째 줄에 과정을 N번 거친 후 점의 수를 출력한다.
+1 ++
2 ++
5 ++
9 ++
25 ++
1089 ++
상근이의 동생 상수는 수학을 정말 못한다. 상수는 숫자를 읽는데 문제가 있다. 이렇게 수학을 못하는 상수를 위해서 상근이는 수의 크기를 비교하는 문제를 내주었다. 상근이는 세 자리 수 두 개를 칠판에 써주었다. 그 다음에 크기가 큰 수를 말해보라고 했다.
+ +상수는 수를 다른 사람과 다르게 거꾸로 읽는다. 예를 들어, 734와 893을 칠판에 적었다면, 상수는 이 수를 437과 398로 읽는다. 따라서, 상수는 두 수중 큰 수인 437을 큰 수라고 말할 것이다.
+ +두 수가 주어졌을 때, 상수의 대답을 출력하는 프로그램을 작성하시오.
+첫째 줄에 상근이가 칠판에 적은 두 수 A와 B가 주어진다. 두 수는 같지 않은 세 자리 수이며, 0이 포함되어 있지 않다.
+첫째 줄에 상수의 대답을 출력한다.
+734 893 ++
221 231 ++
839 237 ++
437 ++
132 ++
938 ++
1, 2, 3, 4, 5, 6, 7, 8, 9를 로마 숫자로 바꾼다면 I, II, III, IV, V, VI, VII, VIII, IX가 된다.
+ +10, 20, 30, 40, 50, 60, 70, 80, 90은 X, XX, XXX, XL, L, LX, LXX, LXXX, XC가 된다.
+ +100보다 작은 수를 로마 숫자로 바꾸려면, 십의 자리와 일의 자리를 따로따로 위의 방법을 이용해서 로마 숫자로 바꾼 다음, 하나로 이어 붙이면 된다.
+ +예를 들어, 48은 XLVIII이다. 그 이유는 40을 XL로 바꾸고, 8을 VIII로 바꾼 다음, 둘을 이어 붙이면 XLVIII이기 때문이다.
+ +로마 숫자가 주어졌을 때, 문자를 재배치했을 때 나올 수 있는 숫자 중, 가장 작은 수를 구하여 로마 숫자로 출력하는 프로그램을 작성하시오.
+첫째 줄에 1보다 크거나 같고, 100보다 작은 정수 B가 로마 숫자로 주어진다.
+첫째 줄에, 로마 숫자 B의 문자를 재배치했을 때, 나올 수 있는 숫자 중, 가장 작은 수를 로마 숫자로 출력한다.
+VII ++
VI ++
III ++
VII ++
IV ++
III ++
도미노는 여러 종류의 타일 게임에서 사용하는 조각이다. 도미노 조각은 두 칸으로 이루어져 있다. 각 칸에는 점이 찍혀있는데, 점이 안 찍혀져 있을 수도 있다. 점의 개수는 세트의 크기에 의해서 결정된다. 세트의 크기가 N인 도미노 세트에서 점의 개수는 0보다 크거나 같고, N보다 작거나 같다. 두 도미노에 찍혀잇는 점의 개수가 같다면, 두 도미노는 동일한 것이다. 예를 들어, 점이 2개와 8개 찍혀있는 도미노는 8개와 2개 찍혀있는 도미노와 같은 도미노이다.
+ +크기가 N인 도미노 세트는 N 또는 그보다 작거나 같은 점을 포함하는 가능한 도미노를 모두 포함하고 있고, 각 도미노는 중복되지 않는다. 다음은 크기가 2인 도미노 세트이다.
+ +N을 입력받은 뒤, 크기가 N인 도미노 세트에는 점이 몇 개 찍혀 있는지 구하는 프로그램을 작성하시오.
+첫째 줄에 도미노 세트의 크기 N (1 ≤ N ≤ 1000)이 주어진다.
+크기가 N인 도미노 세트에 찍혀 있는 점의 개수를 출력한다.
+2 ++
3 ++
15 ++
12 ++
30 ++
2040 ++
예전에는 운영체제에서 크로아티아 알파벳을 입력할 수가 없었다. 따라서, 다음과 같이 크로아티아 알파벳을 변경해서 입력했다.
+ +| 크로아티아 알파벳 | +변경 | +
|---|---|
| č | +c= | +
| ć | +c- | +
| dž | +dz= | +
| đ | +d- | +
| lj | +lj | +
| nj | +nj | +
| š | +s= | +
| ž | +z= | +
예를 들어, ljes=njak은 크로아티아 알파벳 6개(lj, e, š, nj, a, k)로 이루어져 있다. 단어가 주어졌을 때, 몇 개의 크로아티아 알파벳으로 이루어져 있는지 출력한다.
+ +dž는 무조건 하나의 알파벳으로 쓰이고, d와 ž가 분리된 것으로 보지 않는다. lj와 nj도 마찬가지이다. 위 목록에 없는 알파벳은 한 글자씩 센다.
+첫째 줄에 최대 100글자의 단어가 주어진다. 알파벳 소문자와 '-', '='로만 이루어져 있다.
+ +단어는 크로아티아 알파벳으로 이루어져 있다. 문제 설명의 표에 나와있는 알파벳은 변경된 형태로 입력된다.
+입력으로 주어진 단어가 몇 개의 크로아티아 알파벳으로 이루어져 있는지 출력한다.
+ljes=njak ++
ddz=z= ++
nljj ++
c=c= ++
dz=ak ++
6 ++
3 ++
3 ++
2 ++
3 ++
Дима совсем недавно устроился на работу. Так как он очень ценный работник, его зарплата будет расти не по дням, а по часам. Если точнее, то каждый месяц количество рублей, составляющих его зарплату, будет равно возведенному в третью степень номеру месяца. Так, в первый месяц он получит рубль, во второй --- , в третий --- и так далее.
+ +Как всем известно, законы о налогообложении --- вещь сложная. Недавно в стране, в которой работает Дима, был принят новый закон. Суть его заключается в том, что процент налога, ежемесячно выплачиваемый сотрудником вычисляется по следующей формуле:
+ +Для каждой организации было введено свое . Дима знает это число для организации, в которой он работает. И теперь он хочет узнать, сколько процентов заработка он будет ежемесячно отдавать в качестве налога.
+Первая строка входного файла содержит единственное целое число ().
+Выведите в выходной файл одно целое число () --- искомый процент.
+При вычислении налога во втором примере получается следующая строка: . Седьмая цифра при этом равна .
+3 ++
7 ++
2 ++
1 ++
학교의 로고인 DKSH는 Dankook University Software High School의 약자이다.
+ +D, K, S, H로만 이루어진 문자열이 주어진다. 이 문자열에서 DKSH가 몇 번 나타나는지 구해보자.
첫째 줄에 문자열이 입력된다. 문자열의 길이는 을 넘지 않는다.
+첫째 줄에 입력된 문자열에서 DKSH가 몇 번 나타나는지 출력한다.
DKKSSH ++
HDKSHDDKS ++
SDKSHSSDKSHS ++
0 ++
1 ++
2 ++
단대소프트고에는 교실 개가 있다. 교실은 번부터 번까지 순서로 연달아 있다.
+ +학교 밖에는 명의 학생들이 있다. 명의 학생은 학교에 들어가기 전 학생마다 목적지 교실을 정하게 된다. 번째 학생의 목적지는 번 교실이다. 학생들의 목적지는 모두 달라야 한다. 번째 학생은 번 교실, 번 교실, 번 교실까지 모든 교실에 들어갔다 나오게 된다. 마지막 교실까지 들어갔다 나오게 되면 아무 교실도 방문하지 않고 다시 학교 밖으로 나간다.
+ +모든 학생의 방문이 끝나면, 교실의 점수를 구할 수 있다. 번째 교실의 점수는 × (번째 교실에 학생이 들어갔다 나온 횟수)가 된다. 학생들은 학교에 들어가기 전 방문 후의 교실의 점수의 합이 최대가 되도록 의논하여 목적지를 정한다. 이때 방문이 끝난 후 모든 교실의 점수의 합을 구해보자.
+첫째 줄에 과 가 공백으로 구분되어 입력된다.
+ +둘째 줄에 정수 이 공백으로 구분되어 입력된다.
+첫째 줄에 방문이 끝난 후 모든 교실의 점수의 합을 출력한다.
+5 3 +3 -5 2 -1 4 ++
6 ++
팰린드롬의 마법사 엣지는 오늘도 팰린드롬을 찾고 있었다. 그러던 도중 팰린드롬을 좋아하는 사람들이 모이는 축제를 만들고 싶어졌다. 축제의 이름의 길이는 이고 이름은 서로 다른 영어 알파벳 소문자 가지로 이루어져 있어야 한다. 마법사 엣지는 축제 이름의 조건을 만족하면서 서로 다른 부분 문자열 중 팰린드롬의 개수가 가장 많은 문자열을 축제의 이름으로 정한다. 문제에 사용된 단어의 의미는 예제 아래에 위치한 노트를 참고하자.
+ +마법사 엣지를 위해 축제의 이름을 하나 만들어주자. 축제의 이름으로 정할 수 있는 이름이 여러 개라면, 사전순으로 가장 앞선 이름을 만든다.
+첫째 줄에 이름의 길이 과 알파벳 소문자의 개수 가 공백으로 구분되어 입력된다.
+첫째 줄에 마법사 엣지가 정할 축제의 이름을 출력한다.
+팰린드롬은 앞으로 읽으나 뒤로 읽으나 똑같은 문자열을 말한다. 예를 들어 level은 팰린드롬이지만, apple은 아니다.
+ +부분 문자열이란 문자열에서 연속한 문자 몇 개를 이어 붙인 문자열을 뜻한다. 예를 들어 aba의 부분 문자열은 a, b, a, ab, ba, aba가 있다.
+ +두 부분 문자열 , 가 서로 다르다는건 두 부분 문자열의 길이가 다르거나, 의 번째 글자와 의 번째 글자가 다르게 하는 어떤 가 존재함을 뜻한다. 서로 다른 부분 문자열이란 부분 문자열 중 서로 다른 것들이다. 예를 들어 aba의 서로 다른 부분 문자열은 a, b, ab, ba, aba이다.
+ +사전순은 사전에 쓰이는 문자열의 배열 순서를 말한다. 예를 들어 abc는 acb보다 사전순으로 앞섰고, aa는 aaa보다 사전순으로 앞섰다.
+1 1 ++
2 1 ++
2 2 ++
a ++
aa ++
ab ++
트럭을 타고 이동하던 상근이는 경찰의 검문을 받게 되었다. 경찰은 상근이가 운반하던 화물을 하나하나 모두 확인할 것이기 때문에, 검문하는데 엄청나게 오랜 시간이 걸린다.
+ +상근이는 시간을 때우기 위해서 수학 게임을 하기로 했다.
+ +먼저 근처에 보이는 숫자 N개를 종이에 적는다. 그 다음, 종이에 적은 수를 M으로 나누었을 때, 나머지가 모두 같게 되는 M을 모두 찾으려고 한다. M은 1보다 커야 한다.
+ +N개의 수가 주어졌을 때, 가능한 M을 모두 찾는 프로그램을 작성하시오.
+첫째 줄에 종이에 적은 수의 개수 N이 주어진다. (2 ≤ N ≤ 100)
+ +다음 줄부터 N개 줄에는 종이에 적은 수가 하나씩 주어진다. 이 수는 모두 1보다 크거나 같고, 1,000,000,000보다 작거나 같은 자연수이다. 같은 수가 두 번 이상 주어지지 않는다.
+ +항상 M이 하나 이상 존재하는 경우만 입력으로 주어진다.
+첫째 줄에 가능한 M을 공백으로 구분하여 모두 출력한다. 이때, M은 증가하는 순서이어야 한다.
+3 +6 +34 +38 ++
5 +5 +17 +23 +14 +83 ++
2 4 ++
3 ++
동혁이는 오래된 창고를 뒤지다가 낡은 체스판과 피스를 발견했다.
+ +체스판의 먼지를 털어내고 걸레로 닦으니 그럭저럭 쓸만한 체스판이 되었다. 하지만, 검정색 피스는 모두 있었으나, 흰색 피스는 개수가 올바르지 않았다.
+ +체스는 총 16개의 피스를 사용하며, 킹 1개, 퀸 1개, 룩 2개, 비숍 2개, 나이트 2개, 폰 8개로 구성되어 있다.
+ +동혁이가 발견한 흰색 피스의 개수가 주어졌을 때, 몇 개를 더하거나 빼야 올바른 세트가 되는지 구하는 프로그램을 작성하시오.
+첫째 줄에 동혁이가 찾은 흰색 킹, 퀸, 룩, 비숍, 나이트, 폰의 개수가 주어진다. 이 값은 0보다 크거나 같고 10보다 작거나 같은 정수이다.
+첫째 줄에 입력에서 주어진 순서대로 몇 개의 피스를 더하거나 빼야 되는지를 출력한다. 만약 수가 양수라면 동혁이는 그 개수 만큼 피스를 더해야 하는 것이고, 음수라면 제거해야 하는 것이다.
+0 1 2 2 2 7 ++
2 1 2 1 2 1 ++
1 0 0 0 0 1 ++
-1 0 0 1 0 7 ++
세 점이 주어졌을 때, 축에 평행한 직사각형을 만들기 위해서 필요한 네 번째 점을 찾는 프로그램을 작성하시오.
+세 점의 좌표가 한 줄에 하나씩 주어진다. 좌표는 1보다 크거나 같고, 1000보다 작거나 같은 정수이다.
+직사각형의 네 번째 점의 좌표를 출력한다.
+5 5 +5 7 +7 5 ++
30 20 +10 10 +10 20 ++
7 7 ++
30 10 ++
개의 정수 이 주어진다.
+ +을 각각 출력한다.
+ +바꿔 말하면, 에 대해서 를 출력한다.
+첫 번째 줄에 정수의 개수 이 주어진다. ()
+ +두 번째 줄에 개의 정수 이 공백으로 구분되어 주어진다. ()
+위의 계산으로 얻을 수 있는 개의 수들을 공백으로 구분하여 출력한다.
+첫 번째 예시에서, 이므로, , , , 그리고 이다.
+4 +1 2 3 4 ++
1 6 20 50 ++
상근이는 창고에서 링 N개를 발견했다. 상근이는 각각의 링이 앞에 있는 링과 뒤에 있는 링과 접하도록 바닥에 내려놓았다.
+ +상근이는 첫 번째 링을 돌리기 시작했고, 나머지 링도 같이 돌아간다는 사실을 발견했다. 나머지 링은 첫 번째 링 보다 빠르게 돌아가기도 했고, 느리게 돌아가기도 했다. 이렇게 링을 돌리다 보니 첫 번째 링을 한 바퀴 돌리면, 나머지 링은 몇 바퀴 도는지 궁금해졌다.
+ +링의 반지름이 주어진다. 이때, 첫 번째 링을 한 바퀴 돌리면, 나머지 링은 몇 바퀴 돌아가는지 구하는 프로그램을 작성하시오.
+첫째 줄에 링의 개수 N이 주어진다. (3 ≤ N ≤ 100)
+ +다음 줄에는 링의 반지름이 상근이가 바닥에 놓은 순서대로 주어진다. 반지름은 1과 1000를 포함하는 사이의 자연수이다.
+출력은 총 N-1줄을 해야 한다. 첫 번째 링을 제외한 각각의 링에 대해서, 첫 번째 링을 한 바퀴 돌리면 그 링은 몇 바퀴 도는지 기약 분수 형태 A/B로 출력한다.
+3 +8 4 2 ++
4 +12 3 8 4 ++
4 +300 1 1 300 ++
2/1 +4/1 ++
4/1 +3/2 +3/1 ++
300/1 +300/1 +1/1 ++
나비는 새로 건설할 도시의 전봇대를 관리하는 일을 맡았다. 아직 전선이 연결되지 않았기 때문에, 나비는 이 전봇대들의 전선을 연결해야 한다. 전봇대는 의 간격으로 직선을 따라 총 개가 건설되어 있으며 왼쪽에서부터 번호가 부터 까지 붙어 있다. 첫 번째 전봇대의 위치는 이고 초기에 번 전봇대의 높이는 이다. 좌표평면에서 나타낸다면 번 전봇대는 부터 를 연결하는 선분으로 생각할 수 있다.
+ +전선은 두 전봇대의 가장 윗부분을 최단 거리로 연결한다. 즉 번째 전봇대와 번째 전봇대가 연결된다면 와 를 선분으로 연결한다. 그리고 이때 연결 비용은 전선의 길이의 제곱이다.
+ +나비는 준혁이에게 시작 전봇대의 번호 를 받고 번 전봇대를 포함하여 몇 개의 전봇대를 선택하여 전선을 연결한다. 선택한 전봇대를 번호의 오름차순으로 정렬하였을 때 라 한다면 번째 전봇대와 번째 전봇대를 전선으로 연결하게 된다.
+ +또한 나비는 다음과 같은 조건을 만족하도록 전봇대를 선택하여 연결하여야 한다.
+ +준혁이는 나비에게 개의 작업을 준다. 작업마다 시작 전봇대가 일 때 조건을 만족하게 연결 비용의 합의 최솟값을 구해보자.
+첫째 줄에 이 주어진다.
+ +둘째 줄에 정수 이 공백으로 구분되어 주어진다.
+ +셋째 줄에 작업의 수 가 주어진다.
+ +넷째 줄 부터 개의 줄에 걸쳐 시작 전봇대의 번호 가 주어진다.
+줄마다 시작 전봇대의 번호가 일 때 연결 비용의 합을 한 줄에 하나씩 출력한다.
+5 +5 9 3 5 6 +3 +1 +3 +5 ++
5 +1 2 3 2 1 +1 +3 ++
17 +44 +18 ++
0 ++
두 숫자 R1과 R2가 있을 때, 두 수의 평균 S는 (R1+R2)/2와 같다. 상근이는 정인이 생일 선물로 두 숫자 R1과 R2를 주려고 한다. 생일 파티에서 상근이는 정인이에게 이 두 숫자를 말해주고, 정인이는 이 숫자를 받아 적는다. 그리고 나서 기쁜 마음으로 1년동안 이 숫자를 외우면서 산다.
+ +상근이는 R1과 R2를 엄청난 고민 끝에 정했다. 작년에는 R1과 R2를 까먹어서 아무 숫자나 정해서 주었기 때문에, 올해는 까먹지 않기 위해서 평균 S도 같이 기억하려고 한다.
+ +오늘은 정인이 생일이다. 5분 후에 상근이는 생일 선물로 두 숫자 R1과 R2를 말해주어야 하지만, 안타깝게도 R2를 까먹고 말았다. 하지만 R1과 S는 기억하고 있다!
+ +상근이를 도와 R2가 몇 인지 구하는 프로그램을 작성하시오.
+첫째 줄에 두 정수 R1과 S가 주어진다. 두 수는 -1000보다 크거나 같고, 1000보다 작거나 같다.
+첫째 줄에 R2를 출력한다.
+11 15 ++
4 3 ++
19 ++
2 ++
Every year, mathematicians and computer scientists from around the globe gather for the prestigious Inversion Counting Puzzle Contest (ICPC). For the next ICPC, the organizers had prepared the following challenge: given a string S consisting of lowercase letters, count the number of inversions in it. An inversion is a pair of indices i < j such that Si (the letter at position i) comes after Sj in the alphabet.
+ +However, just last month, a group of outstanding researchers devised a sophisticated algorithm that can count the inversions in a string extremely fast. While this was great news for the advancement of science, it has been a nightmare for the ICPC staff, since their planned challenge is now obsolete.
+ +This issue escalated to the head problem setter, who then presented a clever idea. Instead of simply receiving a string S, they should ask participants to repeat this string N times before counting the inversions. If the judges then set N to be large enough, at some point the algorithm proposed by the researchers will start to be too slow. Happy with this idea, the ICPC staff went ahead with organizing the next contest.
+ +Unfortunately, now the judges don’t know the answers to the input files anymore, and therefore can’t judge submissions! The ICPC has just kicked off, and participants are about to start submitting their solutions. Please help the judges by computing the answers, so that the ICPC can run smoothly.
+The first line contains a string S (1 ≤ |S| ≤ 105), which is made of lowercase letters.
+ +The second line contains an integer N (1 ≤ N ≤ 1012) indicating how many times the string S is to be repeated.
+Output a single line with an integer indicating the number of inversions in the string SN (S repeated N times). Because this number can be very large, output the remainder of dividing it by 109 + 7.
+ba +1 ++
ab +3 ++
zkba +1 ++
cab +7 ++
1 ++
3 ++
6 ++
77 ++
두 자연수 A와 B가 있을 때, A%B는 A를 B로 나눈 나머지 이다. 예를 들어, 7, 14, 27, 38을 3으로 나눈 나머지는 1, 2, 0, 2이다.
+ +수 10개를 입력받은 뒤, 이를 42로 나눈 나머지를 구한다. 그 다음 서로 다른 값이 몇 개 있는지 출력하는 프로그램을 작성하시오.
+첫째 줄부터 열번째 줄 까지 숫자가 한 줄에 하나씩 주어진다. 이 숫자는 1,000보다 작거나 같고, 음이 아닌 정수이다.
+첫째 줄에, 42로 나누었을 때, 서로 다른 나머지가 몇 개 있는지 출력한다.
+1 +2 +3 +4 +5 +6 +7 +8 +9 +10 ++
42 +84 +252 +420 +840 +126 +42 +84 +420 +126 ++
39 +40 +41 +42 +43 +44 +82 +83 +84 +85 ++
10 ++
1 ++
6 ++
Quicksort is a recursive sorting algorithm developed in 1959 by Tony Hoare. One of the major steps in the algorithm is the partition\/ step: given an element in the array (the pivot\/ element) rearrange the elements in the array as shown below where all the values in are and all elements in are .
+ +Figure A.1 below shows an array before and after it's been partitioned with the pivot element . Note that the elements in and are typically not in sorted order and either one of them could be empty.
+ +Figure A.1: An array before and after a partition
+ +How a partition is executed and how a pivot element is selected are fascinating questions but are not of interest to us. What we would like you to do is the following: given an array, determine all the values that could be the pivot value assuming the array has been partitioned, or determine that the array has not been partitioned.
+Input starts with a positive integer denoting the size of the array. Following this are positive integers indicating the values in the array. All values are unique and .
+Output the number of values in the array that could have served as pivot values to partition the array, followed by the pivot values in the order that they appear in the input. If just output the first 100 of these pivot values. Note that a value of indicates that the array is not partitioned.
+10 1 11 8 13 53 20 63 99 79 94 ++
3 1 13 63 ++
19세기 독일 수학자 헤르만 민코프스키는 비유클리드 기하학 중 택시 기하학을 고안했다.
+ +택시 기하학에서 두 점 T1(x1,y1), T2(x2,y2) 사이의 거리는 다음과 같이 구할 수 있다.
+ +D(T1,T2) = |x1-x2| + |y1-y2|
+ +두 점 사이의 거리를 제외한 나머지 정의는 유클리드 기하학에서의 정의와 같다.
+ +따라서 택시 기하학에서 원의 정의는 유클리드 기하학에서 원의 정의와 같다.
+ +원: 평면 상의 어떤 점에서 거리가 일정한 점들의 집합
+ +반지름 R이 주어졌을 때, 유클리드 기하학에서 원의 넓이와, 택시 기하학에서 원의 넓이를 구하는 프로그램을 작성하시오.
+첫째 줄에 반지름 R이 주어진다. R은 10,000보다 작거나 같은 자연수이다.
+첫째 줄에는 유클리드 기하학에서 반지름이 R인 원의 넓이를, 둘째 줄에는 택시 기하학에서 반지름이 R인 원의 넓이를 출력한다. 정답과의 오차는 0.0001까지 허용한다.
+유클리드 기하학: 한국어 위키 영문 위키 Wolfram Mathworld
+ +비유클리드 기하학: 한국어 위키 영문 위키 Wolfram Mathworld
+ +택시 기하학: 한국어 위키 영문 위키 Wolfram Mathworld
+1 ++
21 ++
42 ++
3.141593 +2.000000 ++
1385.442360 +882.000000 ++
5541.769441 +3528.000000 ++
Guess Who is a two-player board game in which a number of characters are uniquely identified by a set of attributes (e.g. wearing glasses), and each player attempts to guess the other player's hidden character by asking a number of yes/no questions such as "does the person wear glasses?"
+ +In our variation of this game, there are characters, each of which is uniquely identified by a set of attributes. The value of each attribute is either YES or NO. You will be provided with a list of the characters and their attributes, together with a series of questions and the corresponding responses. Your task is to determine the hidden character, if possible.
+Input begins with three space-separated integers , , and , satisfying , , and . The next lines each contains a string of characters that are either Y or N. The th line specifies the values of the attributes of the th character. Each of the next lines contains an integer , followed by a space, followed by a single character Y or N. This indicates the question is about attribute , and the response that the attribute of the hidden character is YES or NO. There is at most one question for each of the attribute. At least one of the listed characters has attributes consistent with the responses of the queries.
In the first line, output one of unique or ambiguous, indicating if there is a uniquely identifiable hidden character, or if there are multiple possible hidden characters.
In the case in which the hidden character is uniquely identifiable, output on the second line the index (between 1 and ) of the hidden character. If there are multiple possible hidden characters, output on the second line the number of possible hidden characters.
+5 5 3 +YYYYY +NNNNN +YNYNY +YYYNN +NNYYY +1 N +2 N +3 Y ++
5 5 3 +YYYYY +NNNNN +YNYNY +YYNNN +NNNYY +1 Y +5 Y +3 Y ++
unique +5 ++
ambiguous +2 ++
2024년 2월 3일 개최 예정인 온사이트 그랜드 아레나에서는 참가자들에게 티셔츠 한 장과 펜 한 자루가 포함된 웰컴 키트를 나눠줄 예정입니다. 키트를 제작하는 업체는 다음과 같은 조건으로만 주문이 가능합니다.
+ +총 명의 참가자 중 S, M, L, XL, XXL, XXXL 사이즈의 티셔츠를 신청한 사람은 각각 명입니다. 티셔츠는 남아도 되지만 부족해서는 안 되고 신청한 사이즈대로 나눠주어야 합니다. 펜은 남거나 부족해서는 안 되고 정확히 참가자 수만큼 준비되어야 합니다.
+ +티셔츠를 장씩 최소 몇 묶음 주문해야 하는지, 그리고 펜을 자루씩 최대 몇 묶음 주문할 수 있고, 그 때 펜을 한 자루씩 몇 개 주문하는지 구하세요.
+첫 줄에 참가자의 수 이 주어집니다.
+ +둘째 줄에 티셔츠 사이즈별 신청자의 수 이 공백으로 구분되어 주어집니다.
+ +셋째 줄에 정수 티셔츠와 펜의 묶음 수를 의미하는 정수 와 가 공백으로 구분되어 주어집니다.
+첫 줄에 티셔츠를 장씩 최소 몇 묶음 주문해야 하는지 출력하세요.
+ +다음 줄에 펜을 자루씩 최대 몇 묶음 주문할 수 있는지와, 그 때 펜을 한 자루씩 몇 개 주문하는지 구하세요.
+23 +3 1 4 1 5 9 +5 7 ++
7 +3 2 ++
은하는 긴 막대에 개의 과일이 꽂혀있는 과일 탕후루를 만들었습니다. 과일의 각 종류에는 부터 까지의 번호가 붙어있고, 앞쪽부터 차례로 번 과일이 꽂혀있습니다. 과일 탕후루를 다 만든 은하가 주문을 다시 확인해보니 과일을 두 종류 이하로 사용해달라는 요청이 있었습니다.
+ +탕후루를 다시 만들 시간이 없었던 은하는, 막대의 앞쪽과 뒤쪽에서 몇 개의 과일을 빼서 두 종류 이하의 과일만 남기기로 했습니다. 앞에서 개, 뒤에서 개의 과일을 빼면 번 과일, 총 개가 꽂혀있는 탕후루가 됩니다.
+ +이렇게 만들 수 있는 과일을 두 종류 이하로 사용한 탕후루 중에서, 과일의 개수가 가장 많은 탕후루의 과일 개수를 구하세요.
+첫 줄에 과일의 개수 이 주어집니다.
+ +둘째 줄에 탕후루에 꽂힌 과일을 의미하는 개의 정수 이 공백으로 구분되어 주어집니다.
+문제의 방법대로 만들 수 있는 과일을 두 종류 이하로 사용한 탕후루 중에서, 과일의 개수가 가장 많은 탕후루의 과일 개수를 첫째 줄에 출력하세요.
+5 +5 1 1 2 1 ++
3 +1 1 1 ++
9 +1 2 3 4 5 6 7 8 9 ++
4 ++
3 ++
2 ++
상근이는 상근날드에서 N행 M열 크기의 초콜릿을 사은품으로 받았다. 상근이는 이기적으로 살면 안 된다는 부모님의 가르침을 마음속에 새기고 있었다. 따라서, 그는 친구들과 초콜릿을 나누어 먹으려고 한다.
+ +문제를 열심히 찾아보다보면 분명히 상근이가 정사각형을 좋아한다는 문제를 찾을 수 있을 것이다. 따라서, 상근이는 초콜릿을 쪼개서 모두 정사각형 모양으로 만들려고 한다. 상근이는 초콜릿을 베스트 프랜드에게만 나누어 주려고 한다. 되도록 적은 수의 정사각형이 남도록 초콜릿을 쪼개보자. 이때, 버리는 초콜릿이 있으면 안 된다.
+ +위의 그림은 N이 3이고, M이 4인초콜릿이다. 왼쪽 초콜릿은 총 6개의 초콜릿으로 쪼갠 그림이고, 오른쪽 그림은 4개로 쪼갠 그림이다. 오른족 그림이 가장 적은 수의 정사각형으로 쪼개는 방법이다.
+ +초콜릿의 크기가 주어졌을 때, 쪼개서 나올 수 있는 정사각형 개수의 최솟값을 구하는 프로그램을 작성하시오.
+첫째 줄에 N과 M이 주어진다. (1 ≤ N, M ≤ 1000)
+첫째 줄에 초콜릿을 쪼개서 나올 수 있는 정사각형 개수의 최솟값을 출력한다.
+3 4 ++
4 4 ++
2 5 ++
4 ++
1 ++
4 ++
투표가 끝난 뒤에는 개표를 해야 한다. 일반적으로 개표는 칠판을 사용하며, 한 표가 나올 때마다 한 획을 추가로 긋는 방식을 사용한다.
+ +이 문제에서는 다음과 같은 방식으로 개표를 진행한다.
+ +|를 맨 뒤에 그린다.|를 그리는 대신 이미 있던 개의 |에 가로줄을 그어 ++++를 만든다. 이후 칸의 공백을 뒤에 추가한다.예를 들면, 표를 받은 후보의 경우 칠판에는 ++++ ++++ ||가 적히게 된다.
첫 번째 줄에 후보의 수 가 주어진다.
+ +두 번째 줄부터 개의 줄에 걸쳐, 각 후보가 받은 표의 수 이 주어진다.
+각 후보에 대해, 칠판에 그려지게 되는 결과를 한 줄에 하나씩 출력한다.
+3 +12 +1 +5 ++
++++ ++++ || +| +++++ ++
재원이의 마을에는 개의 버스 정류장과 개의 버스 노선이 있다.
+ +번 노선은 번 정류장에서 출발해 시간 후 번 정류장에 도착하며, 번 정류장과 번 정류장을 제외한 다른 정류장에는 멈추지 않는다. 또한, 배차 간격 가 있어 시에 번 정류장에서 버스가 운행을 시작한 뒤, 매 시간마다 번 정류장에서 버스가 운행을 시작한다.
+ +빨리 도착해야 하는 재원이는, 빨리 기다리기를 사용하기로 했다. 빨리 기다리기를 사용하면, 현재 정류장에서 출발하는 노선 중 하나를 선택해 배차 간격과 무관하게 지금 당장 출발하도록 할 수 있다.
+ +빨리 기다리기를 최대 번 사용해 번 정류장에서 번 정류장까지 가는 데에 걸리는 최소 시간을 재원이에게 알려주자.
+첫 번째 줄에 정류장의 개수 , 노선의 개수 , 빨리 기다리기를 사용할 수 있는 최대 횟수 가 공백으로 구분되어 주어진다.
+ +개의 줄에 걸쳐 버스 노선의 정보가 주어진다. 번째 줄에는 번 버스 노선의 정보 , , , 가 공백으로 구분되어 주어진다.
+첫 번째 줄에 번 정류장에서 번 정류장까지 가는 데에 걸리는 최소 시간을 출력한다. 불가능한 경우에는 을 출력한다.
+3 3 1 +1 3 7 2 +1 2 2 5 +2 3 4 4 ++
6 ++
선아는 최근에 어떤 미생물을 연구하고 있다. 선아는 연구 과정에서 이 미생물 여러 마리를 한 줄로 나열하면 미생물이 한 마리만 남을 때까지 다음 규칙들에 따라 미생물들이 서로 흡수한다는 사실을 알아냈다.
+ +선아에게는 이 미생물이 마리 있다. 이 마리의 미생물들이 한 줄로 나열되었을 때 마지막에 남는 미생물의 최종 크기와 초기 위치를 찾는 프로그램을 작성해 보자.
+첫 번째 줄에 미생물들의 수 이 주어진다.
+ +두 번째 줄에 미생물들의 초기 크기를 나타내는 개의 정수 가 공백으로 구분되어 주어진다. 는 번째 미생물의 초기 크기를 나타낸다. 각 미생물의 초기 크기는 이상 이하의 정수이다. 또한 같은 초기 크기를 가지는 두 미생물은 존재하지 않는다.
+첫 번째 줄에 마지막에 남는 미생물의 최종 크기를 출력한다.
+ +두 번째 줄에 그 미생물의 초기 위치를 출력한다.
+5 +4 1 3 2 5 ++
15 +5 ++
1 이상 9 이하의 정수 A, B에 대해 A+B의 값을 출력해야 한다. 단, 이 문제는 인터랙티브 (상호작용) 문제이다. 이 문제에서는 A와 B의 값이 바로 주어지지 않고, 채점기와의 상호작용을 통해 그 값을 알아내야 한다.
+여러분은 채점기에게 최대 18번 질문할 수 있다. 질문의 형태는 다음 중 하나이다.
+ +? A x - A의 값이 x인지 물어본다.? B x - B의 값이 x인지 물어본다.예를 들어 A의 값이 4인지 물어보려면 ? A 4를 출력하면 된다. 이때 x는 1 이상 9 이하의 정수여야 한다.
질문을 출력한 뒤 실제로 질문을 채점기에게 보내려면 표준 출력을 flush해야 한다. 자세한 내용은 아래의 노트 란을 참조하자.
+ +질문을 보낸 뒤에는 채점기로부터 정수 하나를 입력받는다. 그 수는 질문의 답이 "예"인 경우 1, "아니요"인 경우 0이다.
+ +A와 B의 값을 알아냈으면 A+B를 계산하여 다음과 같은 형태로 출력한다.
+ +! x - A+B의 값은 x이다.예를 들어 A+B가 10인 경우 ! 10을 출력하면 된다. 이는 질문 횟수에 포함되지 않는다.
아래의 "노트" 란에 여러 언어에 대한 예시 코드가 작성되어 있다. 단, 완성되지 않은 코드이므로 빈 공간은 직접 채워 넣어야 한다.
+상호작용 문제는 채점 방식이 복잡하기 때문에, 문제에 주어진 규약을 지키지 않았을 때 "틀렸습니다"가 아닌 다른 결과가 나올 수도 있음에 유의하자.
+ +예시 코드
+ +C
+ +
+#include <stdio.h>
+int main() {
+ int resp;
+ for(int a=1; a<=9; a++){
+ // A가 a인지 물어보고 flush를 한다.
+ printf("? A %d\n", a);
+ fflush(stdout);
+
+ // 채점기의 답변을 입력받는다.
+ scanf("%d", &resp);
+
+ if(resp == 1){
+ // 답변이 "예"이므로 A의 값은 a이다.
+ // B의 값도 알아내야 하는데, 이 부분은 직접 채워보자.
+ int b = 0;
+ printf("! %d", a + b);
+ break;
+ }
+ }
+}
+
+
+C++
+ +
+#include <iostream>
+int main() {
+ int resp;
+ for(int a=1; a<=9; a++){
+ // A가 a인지 물어보고 flush를 한다.
+ // endl은 자동으로 flush도 해준다.
+ std::cout << "? A " << a << std::endl;
+
+ // 채점기의 답변을 입력받는다.
+ std::cin >> resp;
+
+ if(resp == 1){
+ // 답변이 "예"이므로 A의 값은 a이다.
+ // B의 값도 알아내야 하는데, 이 부분은 직접 채워보자.
+ int b = 0;
+ std::cout << "! " << a + b;
+ break;
+ }
+ }
+}
+
+
+Python
+ +
+for a in range(1, 10):
+ # A가 a인지 물어보고 flush를 한다.
+ # print에 flush 파라미터를 넣으면 된다.
+ print("? A", a, flush=True)
+
+ # 채점기의 답변을 입력받는다.
+ resp = int(input())
+
+ if resp == 1:
+ # 답변이 "예"이므로 A의 값은 a이다.
+ # B의 값도 알아내야 하는데, 이 부분은 직접 채워보자.
+ b = 0
+ print("!", a + b)
+ break
+
+
+Rust
+ +
+fn read_i32() -> i32 {
+ let mut resp_s = String::new();
+ std::io::stdin().read_line(&mut resp_s).unwrap();
+ resp_s.trim().parse().unwrap()
+}
+
+fn main() {
+ for a in 1..=9 {
+ // A가 a인지 물어보고 flush를 한다.
+ // println!은 자동으로 flush도 해준다.
+ println!("? A {a}");
+
+ // 채점기의 답변을 입력받는다.
+ let resp = read_i32();
+
+ if resp == 1 {
+ // 답변이 "예"이므로 A의 값은 a이다.
+ // B의 값도 알아내야 하는데, 이 부분은 직접 채워보자.
+ let b = 0;
+ println!("! {}", a + b);
+ break;
+ }
+ }
+}
+
+
+Java
+ +
+import java.io.*;
+import java.util.*;
+
+public class Main {
+ public static void main(String[] args) throws IOException{
+ Scanner sc = new Scanner(System.in);
+ for(int a=1; a<=9; a++){
+ // A가 a인지 물어보고 flush를 한다.
+ // System.out.println은 자동으로 flush도 해준다.
+ System.out.println("? A " + a);
+
+ // 채점기의 답변을 입력받는다.
+ int resp = sc.nextInt();
+
+ if(resp == 1){
+ // 답변이 "예"이므로 A의 값은 a이다.
+ // B의 값도 알아내야 하는데, 이 부분은 직접 채워보자.
+ int b = 0;
+ System.out.println("! " + (a + b));
+ break;
+ }
+ }
+ }
+}
+
+
+표준 출력을 flush해야 하는 이유
+ +콘솔 혹은 파일 입출력은 사칙연산이나 값을 대입하는 등의 기본적인 연산에 비해 상대적으로 느린 작업이다. 따라서 많은 프로그래밍 언어의 기본 출력 기능은 출력을 요청받은 값들을 한 공간에 쌓아두고, 적당한 때에 한꺼번에 출력되도록 한다. 이 공간을 버퍼(buffer)라고 부른다.
+ +그러나 이 문제에서는 채점기가 프로그램의 출력을 실시간으로 확인해야 답변을 줄 수 있다. 따라서 버퍼를 직접 비우는 작업이 필요하고, 이 작업을 flush라고 한다.
+ +예고편
+ +제2편에서는 "적응하는 채점기"와 "적응하지 않는 채점기"의 차이를 다룬다. 제1편에 비해 어렵다는 점을 유의하자.
+ +이 문제의 채점기는 적응하지 않는다.
++ +0 + +0 + +1 + +0 + +1 ++
? A 1 + +? A 2 + +? A 3 + +? B 1 + +? B 2 + +! 5 ++
1 이상 10,000 이하의 정수 A, B에 대해 A+B의 값을 출력해야 한다. 단, 이 문제는 인터랙티브 (상호작용) 문제이다. 이 문제에서는 A와 B의 값이 바로 주어지지 않고, 채점기와의 상호작용을 통해 그 값을 알아내야 한다.
+ +상호작용 문제에 대해 잘 모른다면, 제1편을 먼저 풀어보자.
+제1편과 같은 방식으로 상호작용하면 된다. 단, 이 문제에서는 최대 19,997번 질문할 수 있다.
+ +이 문제의 채점기는 적응하지 않는다. 자세한 설명은 아래 노트 란을 참조하자.
+이 문제는 예제를 포함하여 10개의 테스트케이스를 사용한다.
+ +상호작용 문제의 채점기는 적응하는 (adaptive) 채점기와 적응하지 않는 (non-adaptive) 채점기로 나뉜다. 둘의 구분은 다음과 같다.
+ +? A 1과 ? A 2에 모두 "예"라고 답하는 등의 모순적인 답변은 하지 않는다.A와 B의 값을 정하는 시점이 사용자에게 보이지 않는데, 채점기가 적응하든 아니든 무슨 차이가 있을까? 그 차이는 다음과 같다. 만약 이 문제의 채점기가 적응한다면 이 문제는 풀 수 없는 문제였을 것이다. 다음과 같은 채점기를 사용하면 A와 B를 알아내는 데 항상 19,998번의 질문이 필요한데, 실제로는 19,997번까지만 질문할 수 있기 때문이다.
+ +두 후보 집합에서 총 19,998개의 원소를 제거해야 정답을 받는데, 질문 하나당 한 원소만 지울 수 있으므로 최소 19,998번의 질문이 필요한 것이다.
+ +하지만 이 문제의 채점기는 적응하지 않기 때문에, 위와 같은 방식을 사용하지 않고 A와 B의 값을 처음부터 정해 놓는다. 이 경우에는 랜덤을 잘 활용하면 각 테스트케이스에 대해 99.999999%의 확률로 정답을 낼 수 있다. 정답 확률이 정확히 100%가 아니니까 틀린 풀이가 아닌지 의문이 들 수 있다. 하지만 실제로 제출했을 때 틀렸습니다를 받을 일은 사실상 없다고 보아도 무방하고, 이렇게 랜덤을 사용하여 푸는 문제가 온라인 저지는 물론 대회에도 가끔 등장한다는 점을 고려하면 충분히 인정되는 풀이라고 할 수 있다.
++ +0 + +0 + +1 + +0 + +1 ++
? A 123 + +? A 2517 + +? A 3150 + +? B 1342 + +? B 205 + +! 3355 ++
Do you know about Yokohama Phenomena? The phenomenon takes place when three programmers, sitting around a table, hold a single pen together above a board. A grid of squares is drawn on the board, with each square marked with a single letter. Although none of the participants purposely moves the pen, its nib, as if it has a will, goes down to one of the squares marked with Y, and then starts moving on the board. The squares passed are marked with O, K, O, H, A, and M in this order, and then the nib stops on the square marked with A.
Let us call the series of squares along such a trajectory of the nib a YOKOHAMA trace. A YOKOHAMA trace is defined as follows.
+ +Y, O, K, O, H, A, M, and A, in this order.Note that the same square may appear more than once in the series.
+ +Figure A.1 (a) is an illustration of the board corresponding to Sample Input 1. Figures A.1 (b) and (c) show trajectories on two of the YOKOHAMA traces. Both traces start at the leftmost square in the upper row. The same square marked with O appears twice in the trace illustrated in Figure A.1 (c).
Figure A.1. A board and trajectories on two of the YOKOHAMA traces
+ +You are given a grid of squares, each marked with one of six letters, A, H, K, M, O, or Y. Your task is to count how many distinct YOKOHAMA traces are possible on it.
The input consists of a single test case of the following format.
+ +++ ++ +
+ +
+ +
+
The first two integers and (, ) describe the size of the grid. The grid has squares arranged in an matrix. The following lines describe the letters marked in the squares. The square at the -th row and the -th column in the grid (, ) has letter marked in it. Each is one of the six letters, A, H, K, M, O, or Y.
Output a line containing the number of distinct YOKOHAMA traces.
+2 4 +YOHA +OKAM ++
3 4 +YOKH +OKHA +KHAM ++
3 6 +MAYOHA +AHOKAM +MAYOHA ++
8 ++
0 ++
80 ++
유명한 제빵사 김원웅은 빵집을 운영하고 있다. 원웅이의 빵집은 글로벌 재정 위기를 피해가지 못했고, 결국 심각한 재정 위기에 빠졌다.
+ +원웅이는 지출을 줄이고자 여기저기 지출을 살펴보던 중에, 가스비가 제일 크다는 것을 알게되었다. 따라서 원웅이는 근처 빵집의 가스관에 몰래 파이프를 설치해 훔쳐서 사용하기로 했다.
+ +빵집이 있는 곳은 R*C 격자로 표현할 수 있다. 첫째 열은 근처 빵집의 가스관이고, 마지막 열은 원웅이의 빵집이다.
+ +원웅이는 가스관과 빵집을 연결하는 파이프를 설치하려고 한다. 빵집과 가스관 사이에는 건물이 있을 수도 있다. 건물이 있는 경우에는 파이프를 놓을 수 없다.
+ +가스관과 빵집을 연결하는 모든 파이프라인은 첫째 열에서 시작해야 하고, 마지막 열에서 끝나야 한다. 각 칸은 오른쪽, 오른쪽 위 대각선, 오른쪽 아래 대각선으로 연결할 수 있고, 각 칸의 중심끼리 연결하는 것이다.
+ +원웅이는 가스를 되도록 많이 훔치려고 한다. 따라서, 가스관과 빵집을 연결하는 파이프라인을 여러 개 설치할 것이다. 이 경로는 겹칠 수 없고, 서로 접할 수도 없다. 즉, 각 칸을 지나는 파이프는 하나이어야 한다.
+ +원웅이 빵집의 모습이 주어졌을 때, 원웅이가 설치할 수 있는 가스관과 빵집을 연결하는 파이프라인의 최대 개수를 구하는 프로그램을 작성하시오.
+첫째 줄에 R과 C가 주어진다. (1 ≤ R ≤ 10,000, 5 ≤ C ≤ 500)
+ +다음 R개 줄에는 빵집 근처의 모습이 주어진다. '.'는 빈 칸이고, 'x'는 건물이다. 처음과 마지막 열은 항상 비어있다.
+첫째 줄에 원웅이가 놓을 수 있는 파이프라인의 최대 개수를 출력한다.
+5 5 +.xx.. +..x.. +..... +...x. +...x. ++
6 10 +..x....... +.....x.... +.x....x... +...x...xx. +.......... +....x..... ++
2 ++
5 ++
You are given pairs of integers. Consider a complete graph on vertices and define the weight of the edge to be .
+ +Determine the maximum weight of the matching in this graph.
+ +In other words, consider all ways to select edges of this graph such that no two chosen edges have a common endpoint. What is the maximum possible total weight of these edges?
+The first line of the input contains a single integer ().
+ +The -th of the next lines contain two integers and ().
+Print a single integer --- the maximum weight of the matching in this graph.
+Adjacency matrix:
+2 +0 10 +7 7 +9 4 +2 15 ++
18 ++
U našoj lijepoj domovini, ceste su ponos i dika njenih građana, a posebno superautocesta maštovitog naziva . Nažalost, mnogobrojni turisti sa svojim trabantima napunjenim jeftinim paštetama i limenkama pive svake godine unište cestu pa je treba popravljati.
+ +Državni zavod za cjelovitost cesta napravio je pregled autoceste i označio sve rupe koje treba sanirati. Sanira se na sljedeći način: najprije se, počevši od nekog mjesta prije prvog oštećenja, cesta podijeli na segmente jednake duljine i zatim se na svaki segment na kojem ima oštećenja pošalje jedan bager sa pripadajućom ekipom.
+ +Zbog nedovoljnog broja bagera u državi, prometni stručnjaci trebaju odrediti kako podijeliti cestu na segmente unaprijed zadane duljine tako da broj segmenata s oštećenjima bude što manji.
+ +Na cesti se nalazi rupa i svaka je zadana cijelim brojem koji predstavlja njenu udaljenost od početka ceste. Dužina svakog segmenta je unaprijed zadana prirodnim brojem . Na prvih metara ceste nema oštećenja. Cesta se podijeli na segmente tako da se odabere mjesto za početak prvog segmenta koje se mora nalaziti na jednom od prvih metara. Ako prvi segment počinje na -tom metru, onda -ti segment počinje na metru. Jedan bager može pokriti sve rupe od početka nekog segmenta (uključivo) do početka sljedećeg segmenta (isključivo).
+ +Napišite program koji će odrediti minimalni broj bagera potrebnih za sanaciju autoceste i sva moguća mjesta na kojima prvi segment može početi.
+U prvom se retku nalaze prirodni brojevi i () iz teksta zadatka.
+ +U drugom je retku prirodnih brojeva () koji predstavljaju pozicije svih rupa na cesti.
+U prvom retku ispišite minimalni broj bagera potrebnih za sanaciju autoceste.
+ +U idućem retku ispišite pozicije svih mjesta na kojima prvi segment može početi. Te brojeve treba ispisati u rastućem poretku i međusobno ih odvojiti jednim razmakom.
+3 5 +4 5 7 8 9 ++
4 3 +7 14 15 ++
2 10 +3 4 7 8 12 13 14 15 20 21 ++
2 +1 ++
2 +1 2 4 ++
7 +1 2 ++
상근이는 건물 옥상에서 배추를 재배하기로 했다. 매번 물을 주러 옥상에 올라가기 귀찮기 때문에, N개의 스프링쿨러를 설치하려고 한다.
+ +스프링쿨러는 모두 같은 모델이며, 그 스프링쿨러를 중심으로 하는 반지름이 1인 원에 물을 뿌릴 수 있다.
+ +빌딩의 옥상은 가로 X, 세로 Y인 직사각형이다. 옥상은 축에 평행한 직사각형으로 모델링 할 수 있으며, 양 꼭짓점의 좌표는 (0, 0)과 (X, Y) 가 된다.
+ +스프링쿨러는 정수 좌표를 갖는 곳에만 설치할 수 있다.
+ +빌딩의 크기와 스프링쿨러의 위치가 주어졌을 때, 물을 뿌릴 수 있는 영역의 넓이를 구하는 프로그램을 작성하시오.
+첫째 줄에 X와 Y가 주어진다. (1 ≤ X, Y ≤ 1000)
+ +둘째 줄에 스프링쿨러의 수 N이 주어진다. (1 ≤ N ≤ 10,000)
+ +셋째 줄부터 N개 줄에는 스프링 쿨러의 좌표 x와 y가 주어진다. (0 ≤ x ≤ X, 0 ≤ y ≤ Y)
+스프링쿨러가 물을 뿌릴 수 있는 영역의 넓이를 출력한다. 오차는 ±0.01까지 허용한다.
+4 5 +2 +0 0 +4 4 ++
10 3 +2 +5 1 +6 1 ++
7 7 +4 +3 2 +2 2 +1 1 +6 3 ++
2.356194 ++
5.054816 ++
10.767205 ++
JavaScript에서 은 수에 대해서는 일반적인 의미의 덧셈 뺄셈의 의미를 가지고 있습니다. 하지만 문자열에 대해서 는 두 문자열을 이어붙이라는 의미이고, 는 양쪽 문자열을 수로 해석한 이후에 빼라는 의미입니다.
+ +를 각각 수와 문자열로 생각했을 때 를 출력하세요.
+첫 줄에는 정수 가 주어집니다.
+ +둘째 줄에는 정수 가 주어집니다.
+ +셋째 줄에는 정수 가 주어집니다.
+ +주어지는 모든 수는 으로 시작하지 않는 양의 정수입니다.
+첫 줄에는 를 수로 생각했을 때, 를 출력하세요.
+ +둘째 줄에는 를 문자열로 생각했을 때, 를 출력하세요.
+는 수와 문자열 모두에서 를 먼저 계산 한 이후 를 계산합니다.
+3 +4 +5 ++
2 +29 ++
整数 H, M が与えられる.
+ +H 時間 M 分が何分かを求めよ.
+入力は以下の形式で与えられる.
+ ++H +M+
H 時間 M 分が何分かを,単位 (分) を省いて出力せよ.
+ +答え以外は何も出力しないこと.(入力を促す文章なども出力しないこと.)
+8 +30 ++
14 +0 ++
0 +29 ++
23 +59 ++
510 ++
840 ++
29 ++
1439 ++
Bajtazar właśnie wprowadził się do nowego mieszkania. Udekorowawszy już półki swoimi trofeami z przeróżnych konkursów recytatorskich oraz mistrzostw Bajtocji w jodłowaniu na czas, spostrzegł, że jedna ściana jest całkiem pusta. Nie spodobało mu się to, więc chciałby zapełnić ją obrazami.
+ +Ściana Bajtazara ma kształt prostokąta o wymiarach h × w metrów. Pobliski marszand, który jest bliskim znajomym Bajtazara, oferuje n rodzajów obrazów, przy czym dysponuje on nieograniczoną liczba obrazów każdego rodzaju. Wszystkie obrazy tego samego rodzaju mają dokładnie te same wymiary – obrazy i-tego rodzaju są zawsze kwadratami o boku długości di metrów. Co ciekawe, dla każdych dwóch różnych wartości di, jedna jest podzielna bez reszty przez drugą.
+ +Dla Bajtazara cena obrazów nie gra roli (wszak na mistrzostwach w jodłowaniu na czas nagrody są dość pokaźne), chciałby jednak upewnić się, że na ścianie nie zostanie żadne puste miejsce. W tym celu postanowił zakupić pewną liczbę obrazów i powiesić je na ścianie tak, aby pokryć ją całą. Oczywiście obrazy nie mogą się nawzajem pokrywać, mogą jednak stykać się bokami. Bajtazar nie chce jednak zbyt wiele razy maszerować do marszanda tam i z powrotem – chciałby więc kupić możliwie jak najmniej obrazów. Pomóż mu i napisz program, który obliczy dla niego, ile obrazów musi kupić, lub stwierdzi, że pokrycie ściany nie jest możliwe!
+W pierwszym wierszu wejścia znajdują się dwie liczby całkowite h oraz w (1 ≤ h, w ≤ 109) – wymiary ściany Bajtazara.
+ +W drugim wierszu wejścia znajduje się jedna liczba całkowita n (1 ≤ n ≤ 30) – liczba rodzajów obrazów.
+ +W trzecim wierszu wejścia znajduje się ciąg n różnych liczb całkowitych d1, d2, . . . , dn (1 ≤ di ≤ 109; di < di+1; di+1 jest podzielne bez reszty przez di) – wymiary obrazów kolejnych rodzajów.
+Jeśli pokrycie ściany jest możliwe, w jednym wierszu wyjścia powinna znaleźć się jedna liczba całkowita, oznaczająca minimalną możliwą liczbę obrazów potrzebnych do pokrycia ściany. W przeciwnym wypadku w wierszu tym powinna znaleźć się liczba −1.
+Wyjaśnienie przykładu: W pierwszym teście przykładowym Bajtazar może pokryć ścianę dziewięcioma obrazami (sześcioma rozmiaru 1×1, dwoma rozmiaru 3×3 i jednym rozmiaru 6×6) na przykład w następujący sposób:
+ +W drugim teście przykładowym nie jest możliwe dokładne pokrycie ściany.
+6 10 +3 +1 3 6 ++
3 3 +1 +2 ++
9 ++
-1 ++
Hard 버전과 , 의 제한을 제외한 문제 차이는 없다.
+ +다음 조건들을 만족하는 부분 문자열을 알파벳 묶음이라고 하자.
+ +예를 들어 "AAABBAAC"와 같은 문자열이 있을 때, 알파벳 묶음은 "AAA", "BB", "AA", "C"로 4개다. 위의 문자열에서 "B", "AC"는 조건을 만족하지 않으므로 알파벳 묶음이 아니다.
영어 알파벳 대문자로만 이루어진 길이가 인 문자열 가 주어질 때, 다음 쿼리를 수행하는 프로그램을 작성하자.
+ +Z인 경우 A로 변경한다.는 의 번째 알파벳부터 번째 알파벳까지를 모두 순서대로 포함하는 부분 문자열이다.
+첫 번째 줄에 문자열의 길이 과 쿼리의 개수 가 공백으로 구분되어 주어진다.
+ +두 번째 줄에 영어 알파벳 대문자로만 이루어진 길이가 인 문자열 가 주어진다.
+ +세 번째 줄부터 개의 줄에 걸쳐 쿼리가 한 줄에 하나씩 주어진다.
+ +번 쿼리는 한 번 이상 주어진다.
+번 쿼리에 대한 결괏값을 한 줄에 하나씩 입력으로 주어진 순서대로 출력한다.
+8 5 +AAABBAAC +1 3 8 +2 2 7 +1 1 8 +2 6 7 +1 1 8 ++
4 +5 +3 ++
현재 번 건물에 있는 세우는 막차를 놓쳐버렸다. 그래서 세우네 집인 번 건물까지 걸어가기로 했다. 그러다 세우는 번 건물에서 출발할 때, 지금부터 정확히 분 후부터 버스 첫 차가 운행하기 시작한다는 것을 깨달았다.
+ +세우네 도시에는 양방향으로 서로 다른 두 개의 건물을 연결하는 개의 인도와 개의 차도가 있다. 첫 차가 운행하기 시작하는 분 이전에는 인도로만 이동할 수 있고, 분 후부터는 인도로 이동하거나, 버스를 타고 차도로 이동할 수 있다.
+ +세우가 번 건물에서 출발해 번 건물까지 도착하는 데 걸리는 최소 시간을 구하는 프로그램을 작성해 보자.
+첫 번째 줄에 각각 건물의 개수, 버스 첫 차가 운행하기 시작하는 시간, 인도의 개수, 차도의 개수를 의미하는 정수 , , , 가 공백으로 구분되어 주어진다. ; , ;
+ +개의 줄에 걸쳐, 번째 줄에는 각각 번째 인도가 연결하는 두 건물과 이동 시간을 뜻하는 정수 , , 가 공백으로 구분되어 주어진다. 임의의 에 대해 번 건물에서 번 건물로 가는 인도는 유일하다. , ; ;
+ +개의 줄에 걸쳐, 번째 줄에는 각각 번째 차도가 연결하는 두 건물과 이동 시간을 뜻하는 정수 , , 가 공백으로 구분되어 주어진다. 임의의 에 대해 번 건물에서 번 건물로 가는 차도는 유일하다. , ; ;
+ +세우가 번 건물에서 출발하여 번 건물까지 도착할 수 있음이 보장된다.
+첫 번째 줄에 번 건물에서 출발해 번 건물까지 도착하는 데 걸리는 최소 시간을 출력한다.
+5 4 4 2 +1 4 3 +2 4 2 +2 5 4 +3 5 1 +3 4 1 +2 3 2 ++
6 ++
기다란 종이에 알파벳 대문자로만 이루어진 문자열이 한 줄로 쓰여 있다. 예를 들어 아래 그림과 같이 종이에 “ABAACA”가 쓰여 있다고 가정하자.
이제 이 종이를 한 번만 접을 것이다. 종이는 서로 이웃한 문자 사이에서만 접을 수 있다. 예를 들어 아래 그림과 같이 위 종이를 번째 문자와 번째 문자 사이에서 접을 수 있다.
+ +이때 서로 맞닿은 문자 쌍 중에서, 서로 같은 문자가 맞닿은 쌍의 개수가 이 접기의 점수가 된다. 예를 들어 앞에서의 접기의 점수는 점이 된다. 하지만 아래 그림과 같이 번째 문자와 번째 문자 사이에서 종이를 접으면 점수는 점이 된다.
+ +이제 여러분은 알파벳 대문자로만 이루어진 문자열 가 주어질 때, 다음과 같은 질문 개에 답해야 한다.
+ +첫 번째 줄에 문자열의 길이를 나타내는 정수 이 주어진다.
+ +두 번째 줄에 알파벳 대문자로만 이루어진 문자열 가 주어진다.
+ +세 번째 줄에 정수 가 주어진다.
+ +네 번째 줄부터 개 줄에 걸쳐 위에서 설명한 질문을 나타내는 정수 , 이 공백으로 구분되어 주어진다.
+각 질문의 답을 나타내는 정수를 순서대로 한 줄에 하나씩 출력한다.
+6 +ABAACA +4 +1 4 +2 5 +3 6 +1 6 ++
5 +ABBAB +4 +1 5 +1 4 +2 5 +3 5 ++
1 +1 +1 +2 ++
2 +2 +1 +0 ++
매직 스퀘어는 3×3개의 작은 사각형으로 이루어져 있고, 각 사각형의 안에는 20,000보다 작거나 같은 양의 정수가 있다.
+ +매직 스퀘어는 각각의 행과 열, 두 대각선에 쓰여 있는 수의 합이 모두 같다.
+ +상근이도 매직 스퀘어를 만들었다. 하지만, 창영이가 일부 숫자를 지우개로 지워버렸다. 창영이는 착하기 때문에 숫자를 많아야 세 개만 지웠다.
+ +일부 숫자가 지워진 매직 스퀘어가 주어졌을 때, 지워져 있는 숫자를 채우는 프로그램을 작성하시오.
+총 세 개의 줄에 매직 스퀘어를 이루는 세 개의 숫자가 주어진다. 지워진 숫자는 0으로 주어진다.
+지워진 숫자를 채운 매직 스퀘어를 출력한다.
+4 9 2 +3 0 7 +8 1 6 ++
0 12 12 +16 10 0 +8 8 14 ++
495 468 0 +0 522 414 +441 0 549 ++
4 9 2 +3 5 7 +8 1 6 ++
6 12 12 +16 10 4 +8 8 14 ++
495 468 603 +630 522 414 +441 576 549 ++
디미고의 공식 명칭인 '한국디지털미디어고등학교'는 너무 길다. 그래서 한국디지털미디어고등학교를 문과 계열의 디지털콘텐츠과와 이비지니스과 학교, 이과 계열의 웹프로그래밍과와 해킹방어과 학교 즉, 문과 학교와 이과 학교 둘로 나누어 학교 이름을 줄이려 한다. 학생회는 나눈 두 학교의 이름을 새로 지어야 한다.
+ +학생회는 한국디지털미디어고등학교의 정체성을 지키기 위해 두 학교의 이름을 원래 학교 이름의 연속된 앞부분과 나머지 뒷부분으로 나누어 정하기로 했다. 예를 들어 "KoreaDigitalMediaHighSchool"을 앞부분 "KoreaDigital"과 뒷부분 "MediaHighSchool"으로 나눌 수 있다. 또한 앞부분 또는 뒷부분이 빈 문자열이어도 된다.
이때 문과 계열과 이과 계열은 서로 라이벌 의식을 가지고 있기 때문에 나누어진 두 학교의 이름이 최대한 달랐으면 했다. 학생회는 이를 객관적으로 판단하기 위해 불일치도라는 값을 사용하기로 했다. 불일치도는 학교 이름을 나눈 두 문자열을 각각 , 라고 했을 때 이다. 문자열 에 대해 는 의 길이를 의미하며, 는 와 중 크지 않은 수를 의미한다.
+ +는 대소문자를 구분하여 , 모두의 부분 문자열이 되는 문자열 중 가장 긴 문자열의 길이이다. 예를 들면, "ABCD"와 "ABDF"의 공통 부분 문자열 중 가장 긴 문자열은 "ABD"로 "ABCD" "ABDF"는 이다. 부분 문자열은 원래 문자열에서 순서를 유지하면서 개 이상의 문자를 제거해 만든 문자열이다. 예를 들어, "ABC", "BD"는 "ABCD"의 부분 문자열이지만 "BDC", "EAB", "abc"는 아니다.
한국디지털미디어고등학교를 잘 나눌 수 있도록 가능한 불일치도의 최댓값을 구하자.
+첫 번째 줄에 학교 이름을 나타내는 문자열 가 주어진다. 는 알파벳 소문자와 대문자로만 이루어져 있다.
+첫 번째 줄에 불일치도의 최댓값을 출력한다.
+KoreaDigitalMediaHighSchool ++
seungchan ++
ababa ++
9 ++
3 ++
0 ++
병윤이는 크기의 격자판을 가지고 재밌는 놀이를 하고 있다.
+ +병윤이는 처음에 모든 칸이 흰색인 격자판으로 놀이를 시작하며, 다음과 같은 행동을 회 반복한다.
+ +병윤이가 회에 걸쳐 외친 개수가 주어지면, 역으로 병윤이가 무슨 행동을 하였는지 알아내는 프로그램을 작성해 보자.
+첫째 줄에 정수 , 가 공백으로 구분되어 주어진다. 은 홀수
+ +둘째 줄에 개의 정수 가 공백으로 구분되어 주어진다.
+ +번째 정수는 병윤이가 번째로 외친 개수이다.
+병윤이가 수행한 행동을 줄에 걸쳐 다음과 같은 형식으로 출력한다.
+ +R x를 출력한다.C y를 출력한다.정답이 여러 개라면 아무거나 출력한다.
+ +병윤이가 어떻게 행동해도 입력으로 주어진 수열을 구성할 수 없는 경우 첫째 줄에 -1만 출력한다.
3 4 +3 4 5 6 ++
3 5 +3 4 5 6 7 ++
987654321 3 +987654321 1975308642 2962962959 ++
C 1 +R 1 +C 2 +C 3 ++
-1 ++
R 1 +R 2 +C 1 ++
어떤 문자열 에 대해 은 를 뒤집은 문자열이다. 두 문자열 와 에 대해 는 두 문자열을 차례로 이어 붙인 문자열이다.
+ +길이 의 알파벳 소문자로만 이루어진 문자열 에 대해 길이 의 접두사를 , 길이 의 접미사를 라고 하자. 는 을 만족하는 의 개수로 정의한다.
+ +과 가 주어질 때, 인 문자열 를 구해보자.
+첫째 줄에 과 가 공백으로 구분되어 주어진다. ;
+첫째 줄에 인 문자열 가 존재한다면 Yes, 아니라면 No를 출력한다.
만약 가 존재한다면 둘째 줄에 가능한 를 아무거나 하나 출력한다.
+문자열 의 길이 의 접두사는, 의 앞에서부터 개를 순서대로 이어붙인 문자열이다. 예를 들어 abcde의 길이 3의 접두사는 abc이다.
문자열 의 길이 의 접미사는, 의 뒤에서부터 개를 순서대로 이어붙인 문자열이다. 예를 들어 abcde의 길이 2의 접미사는 de이다.
6 4 ++
6 1 ++
7 6 ++
No ++
Yes +gggkik ++
Yes +aaaaaaa ++
승형이와 원빈이는 배낭여행을 가기 위해 두 개의 배낭을 준비했다. 각 배낭에는 개의 물건이 들어있으며
+ +배낭의 무게는 배낭 안에 남아있는 물건들의 무게의 합으로 정의된다. 원빈이는 최대 번 두 배낭 중 하나를 선택하여 맨 위에 있는 물건을 없앨 수 있다. 물건을 없애면 선택한 배낭의 무게는 없앤 물건의 무게만큼 줄어들며 선택한 배낭에 물건이 하나도 없으면 아무런 일도 일어나지 않는다.
+ +원빈이의 행동이 모두 끝난 후, 승형이는 자신이 멜 가방을 결정한다. 승형이는 약삭빠르기 때문에 항상 두 배낭 중 더 가벼운 배낭을 메고 다닌다. 만약 두 배낭의 무게가 같다면 둘 중 아무 배낭이나 메고 다닌다. 원빈이가 들어야 하는 배낭은 승형이가 선택하지 않은 배낭이다.
+ +원빈이가 들어야 하는 배낭의 무게의 최솟값을 구해보자.
+첫 번째 줄에 두 정수 과 가 주어진다.
+ +두 번째 줄에 첫 번째 배낭의 물건들의 무게를 나타내는 개의 정수 이 주어진다.
+ +세 번째 줄에 두 번째 배낭의 물건들의 무게를 나타내는 개의 정수 이 주어진다.
+원빈이가 들어야 하는 배낭의 무게의 최솟값을 출력한다.
+이 문제는 입력 데이터의 용량이 커서, 시간 초과를 받지 않으려면 빠른 입출력 방법을 사용해야 할 수 있다.
+ +cin/cout을 사용하고자 한다면:
+
+ cin.tie(nullptr)와 ios::sync_with_stdio(false)를 main 함수 안의 맨 위에 적는다.endl 대신 개행 문자(\n)를 사용한다.scanf/printf/puts/getchar/putchar 등 C의 입출력 방식을 사용하면 안 된다.Scanner와 System.out.println 대신 BufferedReader와 BufferedWriter를 사용한다.BufferedWriter.flush를 마지막에 한 번 수행한다.input 대신 sys.stdin.readline을 사용한다. 단, 이 함수는 맨 끝의 개행 문자까지 같이 입력받음에 유의한다..rstrip()을 추가로 해 주는 것이 좋다.3 2 +3 1 4 +1 5 9 ++
3 0 +3 1 4 +1 5 9 ++
6 ++
15 ++
정민이는 부터 까지 한 개씩 들어있는 수열을 만드는 것을 목표로 한다. 이를 위해 최소 개수의 양의 정수가 들어있는 수열을 준비했고, 목표를 달성할 때까지 다음 작업들을 반복했다.
+ +익준이는 모든 작업을 마친 정민이를 보고 어떤 정수들을 가지고 처음 작업을 시작했는지 물었다. 그러자 정민이는 답을 알려주는 대신 익준이가 와 를 물어보면 초기 정수 중 이상 이하인 정수들의 개수를 알려 주겠다고 했다. 익준이는 질문을 총 번 할 것이다.
+ +익준이의 질문에 답을 해주자.
+첫 번째 줄에 정수 이 공백으로 구분되어 주어진다.
+ +두 번째 줄부터 개의 줄에 정수 가 공백으로 구분되어 주어진다.
+개의 줄에 각 질문의 답을 출력한다.
+Python 3 사용자는 PyPy3로 제출할 것을 권장한다.
+50 4 +1 15 +5 6 +20 40 +40 50 ++
5000000 5 +2 10 +2 3 +2 5000000 +3 10000 +5 5 ++
7 +1 +4 +3 ++
4 +2 +348513 +1228 +1 ++
순열을 가지고 놀던 건덕이는 자신이 만든 수열의 아름다운 성질을 찾게 되었다. 그의 순열 는 다음과 같은 특별한 성질을 만족한다.
+ +예를 들어, , 일 경우, 이므로, 두 가지 조건을 모두 만족시킨다.
+ +건덕이는 이런 성질을 만족하는 순열 가 몇 가지나 존재하는지 궁금해졌다. 건덕이를 도와 과 가 주어졌을 때, 위 성질을 만족하는 순열의 개수를 구해주자!
+첫째 줄에 순열의 길이 과 연속으로 더해지는 항의 개수 가 공백으로 구분되어 주어진다.
+길이가 인 순열 중, 위 성질을 만족시키는 순열의 개수를 로 나눈 나머지를 출력한다.
+4 3 ++
12 ++
훈과 찬은 행렬 게임을 하고 있다. 두 사람은 각각 행렬 와 를 가지고 있다. 게임은 개 라운드로 구성되고, 각 라운드에서 훈과 찬은 동시에 각각 숫자 와 를 부른다. 여기서, 와 는 과 사이의 정수이다. 그러면 훈과 찬은 각각 와 의 점수를 얻는다.
+ +전날 밤 꿈에서, 훈은 찬이 게임의 각 라운드에서 부를 개 숫자 를 보았다. 따라서 훈은 Diff 가 최대가 되는 개 숫자 을 선택할 수 있다. 여기서, Diff 는 로 정의하고, 이것은 둘의 각 라운드 점수의 절대값 차이의 총 합이다.
+ +각 라운드에서 찬이 부르는 개 숫자가 주어지면, 훈이 Diff 를 최대화하는 개 숫자들을 선택할때, Diff 의 최대값을 출력하는 프로그램을 작성하시오.
+입력은 표준 입력을 사용한다. 첫 번째 줄에 두 정수 과 (, )이주어진다. 여기서, 은 훈과 찬이 게임에서 가지고 있는 행렬의 크기이고 은 게임의 라운드개수이다. 다음 이어지는 개 줄의 번째 줄에는 훈의 행렬의 번째 행의 값들을 나타내는 개 정수가 주어진다. 다음 이어지는 개 줄의 번째 줄에는 찬의 행렬의 번째 행의 값들을 나타내는 개 정수가 주어진다. 이 행렬들의 값은 과 사이의 정수이다. 다음 줄에는 찬이 각 라운드에서 부르는 과 사이의 개 정수가 주어진다.
+출력은 표준 출력을 사용한다. 훈이 Diff 를 최대화하는 개 숫자를 선택할 때, Diff 의 최대값을 출력한다.
+2 2 +1 2 +0 1 +3 1 +2 1 +2 1 ++
2 3 +5 0 +2 6 +3 3 +3 2 +1 1 2 ++
3 ++
8 ++
길이가 인 수열 , , , 이 주어진다. 이때, 다음 쿼리를 수행하는 프로그램을 작성하시오.
+ +첫째 줄에 수열의 길이 과 쿼리의 개수 가 공백으로 구분되어 주어진다.
+ +둘째 줄에 개의 정수 , , , 이 공백으로 구분되어 주어진다.
+ +셋째 줄부터 개의 줄에 걸쳐 지문에서 설명한 쿼리가 한 줄에 하나씩 주어진다.
+개의 줄마다 각 쿼리에서 구한 최솟값과 최댓값을 공백으로 구분하여 출력한다.
+10 6 +9 55 2 4 26 37 81 16 34 46 +1 +5 +6 +7 +9 +12 ++
0 0 +0 4 +1 4 +2 6 +0 8 +1 10 ++
FPS 게임 실력을 향상시키고 싶은 정우는 과녁 맞추기 훈련을 진행 중이다. 이 훈련에서 컴퓨터 화면을 2차원 좌표 평면으로 정의하여 과녁의 위치를 죄표로 나타낼 수 있다. 화면에서 오른쪽 방향으로 이동할수록 값이 증가하고 위쪽으로 이동할수록 값이 증가한다.
+ +초기 상태에서 마우스 커서는 항상 에 위치하며, 컴퓨터 화면 위에는 개의 과녁이 있다. 마우스 커서를 특정 과녁으로 이동하여 클릭하면 해당 과녁이 사라지고 점수를 얻게 된다. 이때 얻는 점수는 이동하기 전 마우스 커서의 위치에서 특정 과녁의 위치까지의 거리를 제곱한 값이다. 여기서 거리는 유클리드 거리로, 두 점 사이의 직선 거리를 의미한다.
+ +과녁을 하나 없애면 새로운 과녁이 화면에 나타난다. 정우는 각 이동에서 현재 마우스 커서에서 가장 멀리 떨어진 과녁을 맞추는 전략을 사용한다. 이 과정을 번 반복할 때, 정우가 얻는 총 점수를 구하자.
+ +동일한 위치에 과녁이 나타나는 경우는 없으며, 각 이동 전에 마우스 커서에서 가장 먼 과녁은 항상 유일함이 보장된다.
+첫 번째 줄에 과 이 공백으로 구분되어 주어진다.
+ +두 번째 줄부터 개의 줄에 걸쳐 현재 화면에 나타나 있는 과녁의 좌표를 나타내는 두 정수 가 공백으로 구분되어 주어진다.
+ +다음 개의 줄에 걸쳐 다음에 나타날 과녁의 좌표를 나타내는 두 정수 가 차례대로 주어진다.
+정우가 얻는 총 점수를 출력한다.
+2 3 +-1 0 +5 0 +1 2 +1 1 +6 2 ++
69 ++
Alice's friend is a big fan of the Adrenaline Rush racing competition and always strives to attend every race. However, this time, Alice is the one watching the race. To ensure her friend does not miss any important details, Alice decides to take notes on everything that happens on the track.
+ +The first thing Alice notices before the race begins is the numbering of the cars. All the cars line up in front of the starting line in a specific order. The car closest to the line is numbered , the second car is numbered , and so on, up to the last car, which is numbered . How convenient! --- Alice thought.
+ +The race begins with the countdown: "Three! Two! One! Go!". Alice observes that the cars start in their original order. However, as the race progresses, their order changes. She records whenever one car overtakes another, essentially swapping places with it on the track.
+ +During the race, Alice notices something curious: no car overtakes another more than once. In other words, for any two cars and , there are at most two overtakes between them during the race: " overtakes " and/or " overtakes ".
+ +At the end of the race, Alice carefully writes down the final order of the cars , where represents the winner of the race.
+ +Alice's friend, however, is only interested in the final ranking and discards all of Alice's notes except for the final ordering. As Alice is quite curious, she wonders: What is the longest possible sequence of overtakes she could have observed during the race? Your task is to help Alice answer this question.
+The first line of the input contains a single integer --- the number of cars in the race.
+ +The second line contains a permutation --- the final order of the cars.
+The first line of the output should contain a single integer --- the maximum possible number of overtakes that can occur during the race.
+ +Each of the next lines should contain two integers and (, ) representing an overtake event, where car overtakes car . This means that car was directly behind car and overtakes it. The overtakes must be listed in the order they occurred during the race.
+ +After all overtakes have occurred, the cars must arrive at the finish line in the order . Note that any car should not overtake another car more than once.
+ +If there are multiple possible longest sequences of overtakes, output any of them.
+3 +2 3 1 ++
1 +1 ++
2 +1 2 ++
4 +2 1 +3 1 +3 2 +2 3 ++
0 ++
2 +2 1 +1 2 ++
There are teams participating in INC 2023. The team ranked in the th position is team , representing institution . It is known that the top teams in INC 2023 are eligible to participate in The ICPC Asia Jakarta 2023.
+ +Apart from the top teams, Golden Tickets are given to at most top teams for which their institutions are not in the top of INC 2023. However, only at most one Golden Ticket will be given to each institution, and only the team with the highest rank in INC 2023 from each institution qualifies for the Golden Ticket. These Golden Tickets will allow them to participate in The ICPC Asia Jakarta 2023.
+ +Determine the number of teams that will receive the Golden Tickets. Then, output the name of the teams that receive those Golden Tickets, sorted by the rank of the teams.
+The first line consists of three integers ().
+ +Each of the next lines consists of two string () separated by a whitespace. All strings consist of upper case letters. There are no teams with the same name. Formally, for .
+The first line consists of an integer, representing the number of teams that will receive the Golden Tickets. Denote this number as .
+ +Then, output lines, each consisting of the name of the teams that receive those Golden Tickets, sorted by their rank. If , then you do not need to print any names.
+Disclaimer
+ +All team names and institution names in the samples are fictional. Any similarities with actual participants in INC 2023 are purely coincidental.
+3 1 2 +ARUA UOGX +NOIHS UHOLO +IKUBUF UHOLO ++
3 2 1 +ARUA UOGX +NOIHS UHOLO +IKUBUF UHOLO ++
5 1 2 +ARUA UOGX +NOIHS UHOLO +IKUBUF UHOLO +ANUZAN UVSH +LAMLA UNIJI ++
9 3 3 +ARUA UOGX +ANUZAN UVSH +NOIHS UHOLO +IKUBUF UHOLO +LAMLA UNIJI +IKASAS UNIJI +ESUOMNORI UVSH +AIHSUR URIP +AYNEH UVSH ++
1 +NOIHS ++
0 ++
2 +NOIHS +ANUZAN ++
2 +LAMLA +AIHSUR ++
You have a diet plan for the next days (numbered from to ). During day , you need to drink exactly mL of milk. Alternatively, you can consume a biscuit instead, as a replacement for milk on that day.
+ +Currently, you only have mL of milk and biscuits. If there is not enough milk to drink on a day and you run out of biscuits, then your diet plan stops.
+ +Determine the maximum number of days you can maintain your diet plan.
+The first line consists of three integers (; ).
+ +The next line consists of integers ().
+Output a single integer representing the maximum number of days you can maintain your diet plan.
+7 100 2 +70 30 20 40 50 40 10 ++
7 70 1 +70 30 40 20 50 10 60 ++
7 0 100 +100 100 100 100 100 100 100 ++
7 0 0 +1 1 1 1 1 1 1 ++
5 ++
3 ++
7 ++
0 ++
The Department of Computer Engineering at Sharif University of Technology has recently initiated a professional education program known as Micromasters. This program offers a set of courses designed to empower students with specialized knowledge and skills in various domains of computer science and engineering. As an incentive to promote the program, the department has introduced a referral system wherein individuals who refer other students to the Micromasters program receive a discount for each referred student on their own course registrations.
+ +Mina is a talented student who is passionate about spreading the benefits of the Micromasters program. With each referral, Mina’s list of discounts grows, and now the following question arises: given the number of students who are referred by Mina, how many courses can she enroll in for free?
+The input consists of a single line containing a single integer (), which represents the number of students that Mina has referred.
+Print a single line, containing the number of courses Mina can enroll in for free using the discounts.
+5 ++
18 ++
0 ++
1 ++
A triangle tree is an undirected graph in which every cycle contains exactly three edges. Recall that a cycle is a sequence of at least distinct vertices such that there is an edge between and for and there is also an edge between and .
+ +A colouring of a graph is an assignment of colours to the vertices such that the two endpoints of each edge of the graph receive different colours. Given a triangle tree, your task is to find a colouring which uses the smallest possible number of colours.
+ +Figure 1: Illustration of the second sample case. The number written just outside the vertex corresponds to the colour it receives corresponding to the output for that sample case.
+The first line of input contains two integers () and (). The next lines each contain two integers and () indicating that the graph contains an edge between and . It is guaranteed that , all edges are unique, and that the graph is indeed a triangle tree.
+Output integers indicating the colours of vertices in order. If you used colours, the integers should be from the set . If there are multiple valid colourings, you may output any one of them. Recall the goal is to output such a colouring using the fewest colours possible, i.e. minimize .
+3 3 +1 2 +2 3 +3 1 ++
7 8 +1 2 +1 7 +2 7 +3 4 +3 7 +4 7 +5 7 +6 7 ++
5 4 +1 2 +1 3 +2 4 +2 5 ++
2 3 1 ++
3 2 3 2 2 2 1 ++
1 2 2 1 1 ++
수열 와 가 주어진다. 아래 간단한 질문에 답을 해보자.
+ +첫 번째 줄에 수열의 길이 이 주어진다. ()
+ +두 번째 줄에 수열 의 원소 개가 공백으로 구분되어 주어진다. ()
+ +세 번째 줄에 수열 의 원소 개가 공백으로 구분되어 주어진다. ()
+ +입력으로 들어오는 값은 모두 정수이다.
+첫 번째 줄에 비의 최댓값을 출력한다. 기약분수로 나타냈을 때 라면 와 를 공백으로 구분하여 출력한다.
+ +두 번째 줄에 비가 최대가 될 때의 구간 길이의 최댓값을 출력한다.
+계산 과정에 필요한 수의 값이 32비트 정수 범위를 넘을 수 있음을 유의하라.
+5 +4 1 2 3 2 +6 1 3 4 3 ++
3 2 +1 ++
SCON과 SCCC를 바라보던 문성이는 흥미로운 규칙을 발견했다! 바로 두 문자열에서 문자 ‘S’와 ‘C’의 개수를 합하면 항상 짝수가 된다는 것이다. 이를 본 문성이는 문득 알파벳 대문자로 구성된 길이가 인 문자열 중에서 ‘S’와 ‘C’의 개수의 합이 짝수인 문자열이 몇 개나 될지 궁금해졌다.
+ +문성이의 궁금증을 해결해 주자!
+첫째 줄에 문자열의 길이를 의미하는 정수 이 주어진다.
+알파벳 대문자로 구성된 길이가 인 문자열 중 ‘S’, ‘C’의 개수의 합이 짝수인 문자열의 개수를 로 나눈 나머지를 출력하라.
+1 ++
2 ++
1000000 ++
24 ++
580 ++
591820787 ++
중세 SCSC의 연금술사들은 아기가 태어나자마자 외치는 소리를 통해 생명의 기원이 물이라는 것을 발견하였다. 현재까지도 그 발견은 전해져 내려와 SCSC의 전통 인사법으로 자리매김하였다.
+ +SCSC의 훌륭한 일원인 종환이는 이를 더 파헤치기 위해 탐사를 나갔고, 서울대학교 63동 438호 유적지에서 고대의 연금술사들이 사용하던 물질을 발견하였다⋯⋯! 들뜬 종환이가 물질을 SCSC의 최첨단 현미경으로 관찰한 결과 수소(H)와 산소(O)로 이루어져 있다는 사실을 알게 되었다. 하지만, 산소와 수소로 이루어져 있다고 이 물질이 순수한 물이라고 할 수는 없다. 물질은 하나의 문자열로 나타낼 수 있고, 종환이는 다음 기준에 따라 발견한 물질이 순수한 물인지 아닌지 판단하고자 한다.
HOH는 물분자 하나로, 그 자체로 순수한 물이다.HOH를 제거한 문자열이 순수한 물이라면, 원래 문자열도 순수한 물이다.이해를 위해 다음 예시를 살펴보자.
+ +물분자 개로 이루어진 순수한 물은
+ +HOHHOHHHOHOHHOHOHHHHOOHH로 총 가지이다. 편의상 HOHHOH는 (HOH)(HOH), HHOHOH는 (H(HOH)OH), HOHOHH는 (HO(HOH)H)로 나타낼 수 있고, HHOOHH는 모든 원소가 뒤섞인 형태이다.
OHH, HHHOOH와 같은 경우는 순수한 물이 아니다.
종환이가 찾은 물질이 순수한 물인지 올바르게 판단할 수 있도록 도와주자!
+첫째 줄에 물질을 나타내는 문자열 의 길이 이 주어진다.
+ +둘째 줄에 알파벳 대문자 H와 O로만 이루어진 문자열 가 주어진다.
입력으로 주어지는 모든 수는 정수이다.
+첫째 줄에 종환이가 찾은 물질이 순수한 물이면 pure를, 그렇지 않으면 mix를 출력한다.
문자열의 부분 수열이란 주어진 문자열의 일부 문자를 원래 순서대로 나열하여 얻을 수 있는 문자열이다.
+6 +HOHOHH ++
4 +HHOH ++
pure ++
mix ++
벚꽃컵을 준비하던 준혁이는 지속된 문제 유출로 인해 성준이에게 크게 혼나게 되었다. 준혁이는 유출을 막기 위해 A와 B로 이루어진 길이 의 암호 를 만들어 성준이에게 보내려고 한다.
개의 문자를 저장할 수 있는 문자열 가 있다. 처음에 의 모든 문자는 X이다. 준혁이는 에 다음과 같은 연산을 할 수 있다.
A로, 번째 문자를 B로 바꾼다.준혁이가 주어진 연산을 원하는 만큼 해서 를 로 만들 수 있는지 확인해 보자.
+첫째 줄에 이 주어진다.
+ +둘째 줄에 A와 B로만 이루어진 문자열 가 주어진다.
첫째 줄에 를 로 만들 수 있다면 Yes, 아니라면 No를 출력한다.
3 +AAB ++
5 +AABBA ++
Yes ++
No ++
노드가 개인 꽁꽁 얼어붙은 트리 위로 고양이가 걸어 다니려고 한다. 루트 노드는 번 노드이며, 트리를 이루는 모든 간선의 거리는 이다.
+ +마리의 고양이가 번 노드에 멈춰있고, 다른 노드로 걸어 다니기 위해 준비하고 있다. 하지만 이 트리는 꽁꽁 얼어붙어서, 각 고양이가 갖고 있는 고유한 제동지수에 따라 노드를 미끄러지면서 이동해야 한다. 마리 고양이의 제동지수 는 각각 이다.
+ +고양이는 1회 이동 시 부모 방향(루트 방향) 혹은 자식 방향 중 하나를 선택하고, 그 방향으로만 간선을 따라 정확히 제동지수 만큼 미끄러진 후 도착한 노드에 멈춰있을 수 있다. 즉, 이상 미만으로 미끄러졌으나 루트 혹은 리프노드에 도착하도록 이동할 수 없다.
+ +마리의 고양이는 부모 방향 혹은 자식 방향으로 원하는 횟수만큼 이동할 수 있다. 각 고양이가 번 노드를 포함해 멈춰있을 수 있는 노드의 개수를 구했을 때, 이 값들 중 가장 큰 값을 구해주자.
+첫째 줄에 꽁꽁 얼어붙은 트리의 노드 개수 이 주어진다.
+ +둘째 줄에 이 공백으로 구분되어 주어진다. 번째 수는 번 노드의 부모 노드 번호를 의미한다.
+ +입력은 항상 트리임이 보장된다.
+마리 고양이들이 번 노드를 포함해 멈춰있을 수 있는 노드의 개수를 구했을 때, 이 값들 중 가장 큰 값을 하나의 정수로 출력한다.
+루트 노드는 부모 노드가 없는 노드를, 리프 노드는 자식 노드가 없는 노드를 의미한다.
+5 +1 4 1 3 ++
2 +1 ++
2 ++
1 ++
준호는 야구선수다. 준호의 타율은 로 알려져 있다. 여기서 타율은 선수가 타석에 들어섰을 때 안타를 칠 확률로 정의되며, 타석에 들어섰을 때 결과는 안타와 아웃 두 가지뿐이라고 가정하자.
+ +그러나, 야구 경기를 보는 태환이는 준호가 아웃을 당하는 것을 너무 많이 보게 되었고, 준호의 타율이 가 맞는지 의심하게 되었다. 따라서 태환이는 앞으로 준호가 타석에 번 들어가는 것을 볼 것이다. 태환이가 준호의 타율이 가 맞는지 확인하는 과정은 다음과 같이 이루어진다:
+ +태환이가 준호의 타율이 가 맞다고 받아들이기 위해 준호가 타석 동안 쳐야 할 안타 횟수의 최솟값을 구하여라!
+준호의 타율 와 타석에 들어서는 횟수 가 공백으로 구분되어 주어진다. 는 소수점 셋째 자리까지 주어지고, 는 정수이다.
+태환이가 준호의 타율이 라고 받아들이기 위해 준호가 타석 동안 쳐야 할 안타 횟수의 최솟값을 출력한다.
+0.162, 0.412는 KBO 리그에서 나온 규정시즌 최저, 최고 타율이다.
+0.162 300 ++
0.250 3 ++
38 ++
0 ++
(와 )만으로 이루어진 문자열을 괄호 문자열이라 한다. 그 중에서도 올바른 괄호 문자열은 다음과 같이 정의된다.
(와 )로 감싼 문자열 도 올바른 괄호 문자열이다.올바른 괄호 문자열의 예시로는 ()()(), (()), ()(())()()이 있다.
문자열 의 접두사는 의 첫번째 원소를 포함하는 의 부분 문자열을 의미한다. abcd의 접두사로는 a, ab, abc, abcd가 있다. 빈 문자열은 접두사가 될 수 없음에 유의하라.
두 괄호 문자열 , 에 대해, 의 길이 의 접두사를 , 의 길이 의 접두사를 라 할 때 와 를 이어붙인 문자열 가 올바른 괄호 문자열인 순서쌍 를 하이터치☆메모리라고 한다. 하이터치☆메모리의 개수를 구해보자.
+첫째 줄에 괄호 문자열 가 주어진다.
+ +둘째 줄에 괄호 문자열 가 주어진다.
+첫째 줄에 하이터치☆메모리의 개수를 출력한다.
+정답이 32비트 정수 범위를 넘을 수 있으므로, C/C++에서는 long long, Java에서는 long과 같은 자료형을 사용하는 것을 권장한다.
(() +))( ++
()() +()(()) ++
3 ++
4 ++
UCPC 초등학교의 즐거운 체육 시간이 찾아왔다. 오늘은 운동장 바퀴 달리기 수행평가가 있는 날이다.
+ +달리기를 평소에 별로 좋아하지 않던 우경이는 출발 전부터 걱정이 태산이었다. 그런 우경이를 보고 체육 선생님은 따스한 미소로 말했다. "괜찮아, 너무 부담 갖지 마. 천천히 뛰어도 괜찮으니까, 바퀴를 초 이하의 시간에 완주하면 돼."
+ +선생님의 다정한 응원 덕분에 용기를 얻은 우경이는 천천히 힘을 내어 달리기 시작했다. 조금 힘들었지만, 포기하지 않고 한 바퀴씩 꾸준히 달려 어느덧 바퀴를 완주했다.
+ +이제 마지막 바퀴. 땀을 닦으며 잠시 숨을 고른 우경이는 문득 걱정이 들었다. "내가 너무 천천히 뛰었나...? 마지막 한 바퀴만 잘 뛰면 수행평가를 통과할 수 있을까?" 지친 상태라 마지막 바퀴는 분명 초 이상 걸릴 것 같았지만, 우경이는 최선을 다해 딱 초에 맞춰 달리기로 마음먹었다.
+ +지금까지 우경이가 뛴 바퀴의 시간이 초 단위로 각각 주어질 때, 마지막 한 바퀴를 정확히 초에 뛴다면 수행평가를 무사히 통과할 수 있을지 계산해보자.
+개의 줄에 걸쳐 우경이가 각 바퀴를 뛰는 데 걸린 시간 가 초 단위로 한 줄에 하나씩 주어진다. ()
+우경이가 마지막 바퀴를 뛰어서 수행평가를 무사히 통과할 수 있으면 Yes, 불가능하면 No를 출력한다.
375 +375 +375 +375 ++
375 +375 +375 +400 ++
300 +300 +300 +300 ++
Yes ++
No ++
Yes ++
LG ThinQ는 LG전자의 AI 플랫폼으로, 가전제품의 상태를 실시간으로 모니터링하고 사용자에게 맞춤형 서비스를 제공한다.
+ +LG ThinQ AI를 탑재한 로봇 청소기가 정사각형 모양의 방안에 놓여 있다. 이 로봇은 방바닥을 크기의 격자로 나누어 각 칸에 오염물질이 있는지를 판단할 수 있다. 편의상 오염물질이 있는 칸을 오염된 칸이라고 하자. 위에서 번째 가로줄에서 왼쪽에서 번째에 있는 칸의 좌표를 라고 할 때, 이 로봇은 개의 서로 다른 오염된 칸의 위치 정보를 다음의 압축 과정을 거쳐 서버로 전송한다.
+ +두 오염된 칸이 서로 상하좌우로 인접하면 같은 오염 영역에 속한다고 할 때, 서버는 로봇이 보낸 데이터를 받아서 오염 영역의 개수를 추측하여야 한다. 서버가 받은 데이터가 주어질 때, 가능한 오염 영역의 개수의 최솟값과 최댓값을 구하시오.
+첫째 줄에는 오염된 칸의 개수 이 주어진다. ()
+ +다음 줄에 걸쳐, 서버가 받은 오염된 칸들의 좌표를 의미하는 개의 정수 이 한 줄에 하나씩 순서대로 주어진다. ()
+첫째 줄에 오염 영역의 개수의 최솟값을 출력한다.
+ +둘째 줄에 오염 영역의 개수의 최댓값을 출력한다.
+6 +1 +3 +4 +1 +2 +3 ++
1 +6 ++
서로 다른 양의 정수 개로 이루어진 집합 가 주어진다. 의 부분집합과 보다 큰 정수 를 적절히 골라, 부분집합의 모든 원소를 로 나눈 나머지가 서로 같게 하려고 한다.
+ +고를 수 있는 부분집합의 최대 크기를 구하여라.
+첫째 줄에 집합 의 크기 이 주어진다. ()
+ +둘째 줄에 의 원소를 의미하는 개의 정수 이 공백으로 구분되어 주어진다. ()
+ +의 모든 원소는 서로 다르다.
+고를 수 있는 부분집합의 최대 크기를 출력한다.
+5 +5 7 8 10 11 ++
3 ++
준혁이는 번호가 부터 까지 쓰여 있는 금화 주머니 개를 가지고 있다. 번째 금화 주머니에는 번호가 인 금화가 개씩 들어 있다.
+ +어느 날 준혁이는 자신이 가지고 있는 금화 중 번째 주머니에 들어있는 번 금화 개를 제외한 다른 모든 금화들이 가짜 금화라는 소식을 알았다. 진짜 금화의 무게는 이지만, 가짜 금화는 무게가 이다.
+ +준혁이는 진짜 금화를 찾아내기 위해 전자 저울을 빌렸다. 전자 저울을 이용하면 올려놓은 모든 금화의 무게 합을 알 수 있다.
+ +알고리즘 공부를 하느라고 바쁜 준혁이는 전자 저울을 최대 회만 사용하려고 한다. 준혁이를 도와 전자 저울을 적절히 활용하여 진짜 금화가 몇 번 금화인지 찾아내자.
+첫째 줄에 금화 주머니의 수 이 주어진다.
+ +이후 채점 시스템과 프로그램이 상호작용하며 실행된다.
+4 + +9 + +27 + +95 + ++
+ +? 0 0 0 1 + +? 0 1 0 2 + +? 5 0 5 0 + +! 3 ++
길이 의 수열 에 대해 함수 은
+ + + +로 정의된다.
+ +을 만족하는 모든 정수 순서쌍 에 대하여 의 최댓값을 구하여라.
+첫째 줄에 이 주어진다.
+ +둘째 줄에 개의 정수 이 공백으로 구분되어 주어진다.
+첫째 줄에 의 최댓값을 출력한다.
+5 +-1 2 -4 -2 3 ++
6 ++
고창영은 스택을 조금 변형해서 고스택을 만들었다.
+ +고스택은 숫자만을 저장할 수 있고, 다음과 같은 10가지 연산을 수행할 수 있다.
+ +편의상 스택의 가장 위에 저장된 수를 첫 번째 수라고 하고, 그 다음은 차례대로 두 번째 수, 세 번째 수라고 한다.
+ +이항 연산자의 경우에 첫 번째 숫자가 오른쪽에 있는 수이고, 두 번째 숫자가 왼쪽에 있는 수이다. 또, 연산을 수행하기 전에 두 숫자를 모두 스택에서 제거한 뒤, 결과를 다시 스택에 저장하는 것이다.
+ +숫자가 부족해서 연산을 수행할 수 없을 때, 0으로 나눴을 때 (DIV, MOD), 연산 결과의 절댓값이 109를 넘어갈 때는 모두 프로그램 에러이다.
+ +음수 나눗셈에 대한 모호함을 피하기 위해 다음과 같이 계산한다. 나눗셈의 피연산자에 음수가 있을 때는, 그 수를 절댓값을 씌운 뒤 계산한다. 그리고 나서 몫과 나머지의 부호는 다음과 같이 결정한다. 피연산자중 음수가 한 개일때는 몫의 부호가 음수이다. 이 경우를 제외하면 몫의 부호는 항상 양수이다. 나머지의 부호는 피제수의 부호와 같다. 따라서, 13 div -4 = -3, -13 mod 4 = -1, -13 mod -4 = -1이다.
+ +프로그램 에러가 발생했을 경우에는, 현재 프로그램의 수행을 멈추고, 그 다음 어떤 명령도 수행하지 않는다.
+입력은 기계 여러 대의 설명으로 이루어져 있다. 각 기계의 설명은 프로그램과 입력영역으로 나누어져 있다.
+ +프로그램은 명령어로 이루어져 있고, 명령어는 한 줄에 하나씩 있다. 각 명령은 문제 설명에 나와있는 대문자 알파벳 3글자이고, 다른 글자는 주어지지 않는다. NUM의 경우에는 명령어 다음에 숫자가 주어지며, 이 숫자는 0보다 크거나 같고, 109보다 작거나 같은 정수이다. NUM과 숫자는 공백으로 구분되어져 있다. 각 프로그램은 END가 나오면 끝난다.
+ +입력영역은 첫째 줄에 프로그램 수행 횟수 N이 있다. (0 ≤ N ≤ 10,000) 다음 N개의 줄에는 한 줄에 하나씩 입력값 Vi가 있다. (0 ≤ Vi ≤ 109) 각 입력값에 대해서 프로그램을 한 번씩 수행해야 하고, 이 수행은 모두 독립적이다. 매번 프로그램을 수행할 때, 스택에 들어있는 값은 입력값 Vi 하나이다.
+ +각각의 기계 설명은 빈 줄로 구분되어져 있다. QUIT이 나오면 다음 기계 설명이 없다는 뜻이다. 명령어가 100,000개를 넘어가는 경우와 스택이 수행될 때, 1,000개 이상의 숫자를 저장하는 경우는 없다.
+각각의 입력값에 대해서, 해당하는 프로그램을 수행한 뒤, 출력값을 출력하면 된다. 출력값이란 스택에 저장되어 있는 숫자이다.
+ +만약, 프로그램 에러가 발생하거나, 모든 수행이 종료됐을 때 스택에 저장되어 있는 숫자가 1개가 아니라면, "ERROR"를 출력한다.
+ +각 기계에 대한 출력값을 모두 출력한 뒤에는 빈 줄을 하나 출력해야 한다.
+DUP +MUL +NUM 2 +ADD +END +3 +1 +10 +50 + +NUM 1 +NUM 1 +ADD +END +2 +42 +43 + +NUM 600000000 +ADD +END +3 +0 +600000000 +1 + +QUIT ++
3 +102 +2502 + +ERROR +ERROR + +600000000 +ERROR +600000001 ++
Bill is responsible for labeling all the floors on a new skyscraper. He's superstitious, so he wants to skip floor 13 while labeling the floors. This means that the , , and floors should be labeled , , and , respectively. Given the true floor number, can you tell Bill what to label that floor?
+The input is a single positive integer representing the true floor number.
+The output is a single positive integer, which is the label for the corresponding floor in the input.
+12 ++
13 ++
14 ++
12 ++
14 ++
15 ++
As a delivery driver for a food delivery service, you can work in one of three different cities each day: Denver, Ft. Collins, or Colorado Springs.
+ +While working for the past few years, you have collected data on your net profit from working in each city and applied a predictive machine learning model that allows you to know exactly how much net profit you can make from working in each city for the next days.
+ +The model shows that you can make different amounts of money on each day, depending on the location. Naturally, you want to work in the city where you can make the most money each day. However, driving from one city to the next is not without cost, so in some cases it may be better to stay where you are and make slightly less but not have to drive to a different city.
+ +The cost to drive between cities ( and ) is given by , a constant representing how costly it is to drive from to . Note that is always equivalent to .
+ +You want to determine which city to work in on each of the next days such that your total net profit across all of the days is maximized. (Net profit is calculated by taking the total earnings and subtracting both the operating costs for each day as well as any transition costs incurred by driving between cities.)
+ +Consider the following example (which describes the first sample input). You are planning for the next days and have calculated the profit you could make in each of the cities as shown in the table below:
+ +| City | +Day 1 | +Day 2 | +Day 3 | +
|---|---|---|---|
| Denver | +251\ | +398\ | +92\ | +
| Colorado Springs | +148\ | +402$ | +
Further, assuming that \begin{align*} T(\text{Denver}, \text{Ft. Collins}) &= \$20, \\ T(\text{Denver}, \text{Colorado Springs}) &= \34, \end{align*} if you choose to work from Denver on day , Colorado Springs on day and day , then your total net profit would be: \begin{align*} P_\text{total} &= \underbrace{\117}_\text{Denver to Colorado Springs} + \underbrace{\2402}_\text{Day profit} = \123$, then your total net profit would be: \begin{align*} P_\text{total} &= \underbrace{\$251}_\text{Day profit} - \underbrace{\151}_\text{Day profit} - \underbrace{\410}_\text{Day profit} = \3NP$ across all of the days is maximized? Note that you can start and end in any city you wish, and the start and end cities do not have to be the same.
+The first line contains three, space-separated integers representing the values of , , and , respectively.
+ +The next line contains a single integer , the number of days that you have to plan for.
+ +The next lines contain a list of space-separated integers representing the potential profit for the next days in Denver, Ft. Collins, and Colorado Springs, respectively.
+ +All monetary numbers will be integers between and .
+The first and only line of output is the maximum total net profit across all days in dollars.
+20 17 34 +3 +251 78 398 +174 92 410 +148 151 402 ++
5 5 5 +3 +6 1 0 +0 5 7 +0 0 0 ++
2 1 3 +3 +0 2 3 +0 1 0 +10 1 0 ++
787 ++
13 ++
14 ++
이 문제는 Easy 버전과 굵게 표시된 제약 조건을 제외하면 동일합니다.
+ +PAUL 문자열은 P,A,U,L을 각각 하나 이상 포함하는 알파벳 대문자로 이루어진 문자열이다. 모그는 길이 의 PAUL 문자열을 선물받았다. 선물받은 문자열을 가지고 놀던 모그는 "이 문자열의 이웃한 두 문자를 삭제한 뒤 남은 부분을 이어 붙이는 연산을 반복해 정확히 PAUL만 남길 수 있을까?" 하는 궁금증이 생겼다.
머리가 좋지 않은 모그 대신 궁금증을 해결해 주자.
+첫째 줄에 모그가 선물받은 PAUL 문자열의 길이 이 주어진다.
+ +둘째 줄에 모그가 선물받은 길이 의 PAUL 문자열이 주어진다. 이 문자열에서 P,A,U,L은 각각 한 번 이상 등장한다.
정확히 PAUL만 남길 수 있다면 YES, 그렇지 않다면 NO를 출력한다.
18 +PATCHOULIKNOWLEDGE ++
11 +SPECTACULAR ++
YES ++
NO ++
선영이는 C, C++, Java와는 다른 아주 세련된 언어를 만들었다. 선영이는 이 아름답고 예술적인 언어의 이름을 i#으로 정했다.
+ +i#은 기본 변수형과 배열([]), 참조(&), 포인터(*)를 제공한다. 배열, 참조, 포인터는 순서에 상관없이 혼합해서 사용할 수 있다. 즉, int의 참조의 참조의 배열의 포인터도 올바른 타입이다. int&&[]*
i#은 여러 개의 변수를 한 줄에 정의할 수 있다. 공통된 변수형을 제일 먼저 쓰고, 그 다음에 각 변수의 이름과 추가적인 변수형을 쓰면 된다. 예를 들면 아래와 같다.
+ +int& a*[]&, b, c*;
a의 타입은 int&&[]*, b는 int&, c는 int&*이 된다. 변수의 오른편에 있는 변수형은 순서를 뒤집어서 왼편에 붙일 수 있다. 따라서, int*& a는 int a&*와 같다.
변수의 선언이 보기 복잡하고 혼란스럽기 때문에, 앞으로는 한 줄에 변수를 하나씩 선언하려고 한다.
+ +i#의 변수 선언문이 주어진다. 이때, 각각의 변수의 오른편에 있는 변수형을 모두 왼쪽으로 옮기고, 한 줄에 하나씩 선언하는 프로그램을 작성하시오.
+첫째 줄에 i#의 변수 선언문이 주어진다. 이 선언문에는 변수가 여러개 포함되어 있을 수도 있다.
+ +선언문의 가장 처음에는 기본 변수형이 주어진다. 그 다음에는 추가적인 변수형이 주어진다. 추가적인 변수형은 없을 수도 있다. 그 다음 공백 이후에는 변수 선언이 하나씩 주어진다. 변수 선언은 콤마와 공백으로 나누어져 있고, ;로 끝난다. 각 변수의 선언 처음에는 기본 변수명이 주어진다. 그 다음에는 추가적인 변수형이 주어진다. 추가적인 변수형은 없을 수도 있다.
+ +기본 변수형과 변수명은 같지 않으며, 알파벳 소문자와 대문자로만 이루어져 있다. 각 줄의 길이는 120글자를 넘지 않는다.
+입력으로 주어진 변수 선언문을 문제의 조건에 맞게 변형한 뒤, 한 줄에 하나씩 출력한다. 변수형과 변수명 사이에는 공백이 하나 있어야 한다. 출력은 입력으로 주어진 변수 선언문에서 변수가 선언된 순서대로 출력한다.
+int& a*[]&, b, c*; ++
int&&[]* a; +int& b; +int&* c; ++
방정식 f(x) = 0을 푸는 프로그램을 작성하시오. f(x)는 후위표기법으로 쓰여져 있으며, 숫자와 연산자 +, -, *, /, 그리고 변수 x로 이루어져 있다. x는 방정식에서 최대 한 번 등장한다.
+ +예를 들어, 방정식 (4x + 2)/2 = 0에 대한 f(x)는 아래와 같이 쓰여져 있다.
+ +4 X * 2 + 2 /
+ +방정식 f(x) = 0의 해는 x = -1/2 이다.
+첫째 줄에 방정식 f(x)가 주어진다. 변수 x는 X로 주어지며, 연산자 +,-,*,/ 와 숫자 0-9로 이루어져 있다. X는 최대 한 번 등장한다. 최대 30개의 토큰이 주어진다.
+ +0으로 나누지 않고 해를 구할 수 있는 경우만 입력으로 주어진다.
+f(x) = 0의 해가 하나인 경우에는 X = p/q를 출력한다. 이때, p와 q는 서로소이어야 하고, q는 양수이어야 한다. 해가 0인 경우에는 X = 0/1을 출력한다.
+ +f(x) = 0의 해가 없는 경우에는 NONE을 출력한다.
+ +f(x) = 0의 해가 한 개 보다 많은 경우에는 MULTIPLE을 출력한다.
+4 X * 2 + 2 / ++
1 2 / 2 4 / - X * ++
1 1 X 2 + / / ++
X = -1/2 ++
MULTIPLE ++
NONE ++
축구 토너먼트에는 총 n개 팀이 참가한다. 첫 번째 라운드에서 총 n/2개의 경기가 열리게 된다. 매 라운드가 끝난 다음에, 승리한 팀은 다음 라운드에 진출한다. 두 번째 라운드에는 총 n/4개의 경기가 열리게 된다. 마지막에는 두 팀이 결승전에 올라오게 된다. 결승전의 승자는 토너먼트의 승자가 된다.
+ +선영이는 한 축구 팀의 구단주이다. 이 팀은 세계에서 가장 축구를 잘하는 팀은 아니지만, 꽤 잘하는 팀이다. 선영이네 축구팀은 토너먼트에 참가한 팀중 적어도 절반은 쉽게 이길 수 있다. 또, 선영이네 팀이 이기지 못하는 모든 팀 t에 대해서, 그 팀을 이길 수 있으면서 선영이네 팀에게 지는 팀 t'가 항상 존재한다.
+ +선영이네 팀이 토너먼트에 우승할 수 있게 토너먼트 스케줄을 작성하는 프로그램을 작성하시오.
+입력은 여러 개의 테스트 케이스로 이루어져 있다.
+ +각 테스트 케이스의 첫째 줄에는 토너먼트에 참가하는 팀의 수 n이 주어진다. (2 ≤ n ≤ 1024, n은 2의 제곱꼴) 팀은 1번부터 n번까지 번호가 매겨져 있으며, 선영이네 팀의 번호는 1이다.
+ +다음 n개 줄에는 n자리 바이너리 스트링이 주어진다. j번째 줄의 k번째 숫자가 1인 경우에는 팀 j가 팀 k를 이길 수 있는 것이고, 다른 경우는 모두 0이다. (토너먼트 경기이기 때문에, 비기는 경우는 존재하지 않는다)
+ +팀은 자기 자신과 경기를 할 수 없기 때문에, j번째 줄의 j번째 숫자는 항상 0이다. j와 k가 다른 경우에, j번째 줄의 k번째 숫자와 k번째 줄의 j번째 숫자는 다르다.
+각 테스트 케이스에 대해서, 선영이네 팀이 승리할 수 있는 토너먼트 스케줄 n-1개 줄을 출력한다.
+ +첫 n/2개 줄은 토너먼트의 첫 번째 라운드, 다음 n/4개 줄은 두 번째 라운드, ... 마지막 줄은 결승전이다.
+ +각 줄은 두 정수 x와 y로 이루어져 있어야 한다. 이 뜻은 팀 x와 팀 y가 경기를 한다는 뜻이다.
+ +만약, 팀1이 우승할 수 있는 스케줄이 여러 가지인 경우 아무거나 출력한다.
+4 +0110 +0011 +0000 +1010 +8 +00111010 +10101111 +00010010 +01000101 +00110010 +10101011 +00010000 +10101010 ++
1 3 +2 4 +1 2 +1 5 +3 7 +4 8 +2 6 +1 3 +4 2 +1 4 ++
올해 ACM-ICPC 대전 인터넷 예선에는 총 n개의 팀이 참가했다. 팀은 1번부터 n번까지 번호가 매겨져 있다. 놀랍게도 올해 참가하는 팀은 작년에 참가했던 팀과 동일하다.
+ +올해는 인터넷 예선 본부에서는 최종 순위를 발표하지 않기로 했다. 그 대신에 작년에 비해서 상대적인 순위가 바뀐 팀의 목록만 발표하려고 한다. (작년에는 순위를 발표했다) 예를 들어, 작년에 팀 13이 팀 6 보다 순위가 높았는데, 올해 팀 6이 팀 13보다 순위가 높다면, (6, 13)을 발표할 것이다.
+ +창영이는 이 정보만을 가지고 올해 최종 순위를 만들어보려고 한다. 작년 순위와 상대적인 순위가 바뀐 모든 팀의 목록이 주어졌을 때, 올해 순위를 만드는 프로그램을 작성하시오. 하지만, 본부에서 발표한 정보를 가지고 확실한 올해 순위를 만들 수 없는 경우가 있을 수도 있고, 일관성이 없는 잘못된 정보일 수도 있다. 이 두 경우도 모두 찾아내야 한다.
+첫째 줄에는 테스트 케이스의 개수가 주어진다. 테스트 케이스는 100개를 넘지 않는다. 각 테스트 케이스는 다음과 같이 이루어져 있다.
+ +각 테스트 케이스에 대해서 다음을 출력한다.
+ +3 +5 +5 4 3 2 1 +2 +2 4 +3 4 +3 +2 3 1 +0 +4 +1 2 3 4 +3 +1 2 +3 4 +2 3 ++
5 3 2 4 1 +2 3 1 +IMPOSSIBLE ++
Bill is fond of computer games. He likes to analyze games and to provide efficient solutions. Now, he is studying the following game. The game starts with a n x n matrix filled with positive integers. When it is her/his turn, a player can delete the last row or the last column of the matrix, if the sum of the numbers in that row/column is even. If a player cannot delete the last row or the last column on his turn, then he loses the game. Bill thinks that this game can be classified as first player wins (W) or first player loses (L). First player wins means that the first player has a strategy to win, no matter how the second player plays the game. First player loses means that no matter what the first player does the second player has a strategy to win.
+ +Bill is also a skilled programmer. He wants to write a program to classify the game quickly. Can you help him?
+The program input is from a text file. Each data set in the file stands for a particular game. A data set starts with the number n (n ≤ 1000), the matrix dimension, followed by the positive integers in the matrix. The program has to print W if the first player wins the game, or L if the first player loses the game.
+ +White spaces can occur freely in the input. The input data are correct and terminate with an end of file.
+For each set of data the program prints the result to the standard output from the beginning of the line.
+2 +2 4 +6 8 +3 +5 4 2 +1 5 9 +7 3 8 ++
L +W ++
Cookie Monster likes chocolate chip cookies. He especially likes ones with lots of chocolate chips. Sometimes he likes to experiment with new, unusual cookies. The other day, he tried baking cookies in the shape of rectangles, and using rectangular chocolate chips. Unfortunately, since this was his first time attempting to make rectangular cookies, a few things went wrong. He used way too many chocolate chips. He also turned the oven on too high, and all the chocolate melted and leaked out, leaving only the cookie with holes where the chocolate chips used to be. When the chocolate chips melted, the cookie became disconnected into many cookie crumbs. Cookie Monster needs your help to count the crumbs to make sure he has not lost any in the oven.
+The first line of input contains four integers x1, y1, x2, y2, each between -1000000000 and 1000000000, giving the x- and y-coordinates of two opposite corners of the cookie. The sides of the cookie are parallel to the x and y coordinate axes. The second line contains an integer 0 <= n <= 100, the number of chocolate chips in the cookie. The following n lines each describe one of the chocolate chips using four integers x1, y1, x2, y2, each between -1000000000 and 1000000000, the x- and y-coordinates of two opposite corners of the chocolate chip. The sides of each chocolate chip are parallel to the x and y coordinate axes. Chocolate chips can overlap, and they can be partially or completely outside the cookie. The cookie and each chocolate chip will have a non-zero area. A chocolate chip is considered to include the points on its perimeter; therefore, crumbs that would meet only at their corners are considered distinct crumbs.
+Output a single integer, the number of crumbs (disconnected components) that the cookie splits into after the chocolate chips have melted away.
+0 0 100 100 +2 +0 0 50 50 +50 50 100 100 ++
2 ++
과거 이집트인들은 각 변들의 길이가 3, 4, 5인 삼각형이 직각 삼각형인것을 알아냈다. 주어진 세변의 길이로 삼각형이 직각인지 아닌지 구분하시오.
+ 입력은 여러개의 테스트케이스로 주어지며 마지막줄에는 0 0 0이 입력된다. 각 테스트케이스는 모두 30,000보다 작은 양의 정수로 주어지며, 각 입력은 변의 길이를 의미한다. +
+각 입력에 대해 직각 삼각형이 맞다면 "right", 아니라면 "wrong"을 출력한다.
+6 8 10 +25 52 60 +5 12 13 +0 0 0 ++
right +wrong +right ++
대학생 새내기들의 90%는 자신이 반에서 평균은 넘는다고 생각한다. 당신은 그들에게 슬픈 진실을 알려줘야 한다.
+첫째 줄에는 테스트 케이스의 개수 C가 주어진다.
+ +둘째 줄부터 각 테스트 케이스마다 학생의 수 N(1 ≤ N ≤ 1000, N은 정수)이 첫 수로 주어지고, 이어서 N명의 점수가 주어진다. 점수는 0보다 크거나 같고, 100보다 작거나 같은 정수이다.
+각 케이스마다 한 줄씩 평균을 넘는 학생들의 비율을 반올림하여 소수점 셋째 자리까지 출력한다. 정답과 출력값의 절대/상대 오차는 10-3이하이면 정답이다.
+5 +5 50 50 70 80 100 +7 100 95 90 80 70 60 50 +3 70 90 80 +3 70 90 81 +9 100 99 98 97 96 95 94 93 91 ++
40.000% +57.143% +33.333% +66.667% +55.556% ++
You have bought a car in order to drive from Waterloo to a big city. The odometer on their car is broken, so you cannot measure distance. But the speedometer and cruise control both work, so the car can maintain a constant speed which can be adjusted from time to time in response to speed limits, traffic jams, and border queues. You have a stopwatch and note the elapsed time every time the speed changes. From time to time you wonder, "how far have I come?". To solve this problem you must write a program to run on your laptop computer in the passenger seat.
+Standard input contains several lines of input: Each speed change is indicated by a line specifying the elapsed time since the beginning of the trip (hh:mm:ss), followed by the new speed in km/h. Each query is indicated by a line containing the elapsed time. At the outset of the trip the car is stationary. Elapsed times are given in non-decreasing order and there is at most one speed change at any given time.
+For each query in standard input, you should print a line giving the time and the distance travelled, in the format below.
+00:00:01 100 +00:15:01 +00:30:01 +01:00:01 50 +03:00:01 +03:00:05 140 ++
00:15:01 25.00 km +00:30:01 50.00 km +03:00:01 200.00 km ++
도현이는 우주의 신이다. 이제 도현이는 아무렇게나 널브러져 있는 n개의 별들을 이어서 별자리를 하나 만들 것이다. 별자리의 조건은 다음과 같다.
+ +별들이 2차원 평면 위에 놓여 있다. 선을 하나 이을 때마다 두 별 사이의 거리만큼의 비용이 든다고 할 때, 별자리를 만드는 최소 비용을 구하시오.
+첫째 줄에 별의 개수 n이 주어진다. (1 ≤ n ≤ 100)
+ +둘째 줄부터 n개의 줄에 걸쳐 각 별의 x, y좌표가 실수 형태로 주어지며, 최대 소수점 둘째자리까지 주어진다. 좌표는 1000을 넘지 않는 양의 실수이다.
+첫째 줄에 정답을 출력한다. 절대/상대 오차는 10-2까지 허용한다.
+3 +1.0 1.0 +2.0 2.0 +2.0 4.0 ++
3.41 ++
A mad scientist performed a series of experiments, each having n phases. During each phase, a measurement was taken, resulting in a positive integer of magnitude at most k. The scientist knew that an individual experiment was designed in a way such that its measurements were monotonically increasing, that is, each measurement would be at least as big as all that precede it. For example, here is a sequence of measurements for one such experiment with n=13 and k=6:
+ ++1, 1, 2, 2, 2, 2, 2, 4, 5, 5, 5, 5, 6+ +
It was also the case that n was to be larger than k, and so there were typically many repeated values in the measurement sequence. Being mad, the scientist chose a somewhat unusual way to record the data. Rather than record each of n measurements, the scientist recorded a sequence P of k values defined as follows. For 1 ≤ j ≤ k, P(j) denoted the number of phases having a measurement of j or less. For example, the original measurements from the above experiment were recorded as the P-sequence:
+ ++2, 7, 7, 8, 12, 13+ +
as there were two measurements less than or equal to 1, seven measurements less than or equal to 2, seven measurement less than or equal to 3, and so on.
+ +Unfortunately, the scientist eventually went insane, leaving behind a notebook of these P-sequences for a series of experiments. Your job is to write a program that recovers the original measurements for the experiments.
+The input contains a series of P-sequences, one per line. Each line starts with the integer k, which is the length of the P-sequence. Following that are the k values of the P-sequence. The end of the input will be designated with a line containing the number 0. All of the original experiments were designed with 1 ≤ k < n ≤ 26.
+For each P-sequence, you are to output one line containing the original experiment measurements separated by spaces.
+6 2 7 7 8 12 13 +1 4 +3 4 4 5 +3 0 4 5 +5 2 2 4 7 7 +0 ++
1 1 2 2 2 2 2 4 5 5 5 5 6 +1 1 1 1 +1 1 1 1 3 +2 2 2 2 3 +1 1 3 3 4 4 4 ++
As the owner of a computer forensics company, you have just been given the following note by a new client:
+ +I, Albert Charles Montgomery, have just discovered the most amazing cypher for encrypting messages. Let me tell you about it.
+ +To begin, you will need to decide on a set of symbols, call it S, perhaps with the letters RATE. The size of this set must be a power of 2 and the order of the symbols in S is important. You must note that R is at position 0, A at 1, T at 2, and E at 3. You will also need one permutation P of all those symbols, say TEAR. Finally you will need an integer, call it x. Together, these make up the key. Given a key, you are now ready to convert a plaintext message M of length n (M[0], M[1]... M[n-1]), that has some but not necessarily all of the symbols in S, into a cyphertext string C, also of length n (C[0], C[1],...C[n-1]), that has some but not necessarily all of the symbols in S.
+The encrypting algorithm computes C as follows:
For example, consider this scenario where S=RATE, P=TEAR, x=102, M=TEETER, and n=6. To compute d, first calculate 61.5 + 102 = 116.696938, then take the remainder after dividing by 6. So d = 116 % 6 = 2. The following table shows the steps in filling in the cyphertext C. Note that the order of the steps is not important.
+ +| + | 0 | +1 | +2 | +3 | +4 | +5 | ++ |
| S = | +R | +A | +T | +E | ++ | + | + |
| P = | +T | +E | +A | +R | ++ | + | + |
| M = | +T | +E | +E | +T | +E | +R | ++ |
| + | + | + | + | + | + | + | + |
| C = | +E | ++ | + | + | + | + | M[0] is T, T is at P[0]. M[1] is E, E is at S[3]. C[0] = S[0 xor 3] = S[3] | +
| + | E | +T | ++ | + | + | + | M[1] is E, E is at P[1]. M[2] is E, E is at S[3]. C[1] = S[1 xor 3] = S[2] | +
| + | E | +T | +A | ++ | + | + | 2 is d. M[2] is E, E is at P[1], so C[2] = S[1] | +
| + | E | +T | +A | +E | ++ | + | M[3] is T, T is at P[0]. M[4] is E, E is at S[3]. C[3] = S[0 xor 3] = S[3] | +
| + | E | +T | +A | +E | +A | ++ | M[4] is E, E is at P[1]. M[5] is R, R is at S[0]. C[4] = S[1 xor 0] = S[1] | +
| + | E | +T | +A | +E | +A | +A | +M[5] is R, R is at P[3]. M[0] is T, T is at S[2]. C[5] = S[3 xor 2] = S[1] | +
I have included additional examples of encrypted messages at the end of this note for you to experiment with. However, first, I need to tell you about the decryption algorithm.
+ +Unfortunately, the next page of the note, with the decrypting algorithm, is completely unreadable because it is covered with huge, overlapping, messy ink blots. Given your considerable skill in unravelling puzzles, your task is to write the decoder based on your knowledge of the encoding algorithm.
+The input for the decoder consists of one or more sets of {key, encrypted message} pairs. The key is on 3 separate lines. The first line contains the single integer x, 0 < x < 10,000; the second line contains the string S; and the third line contains the string P, which will be a permutation of S. The length of S (and therefore P) will always be one of the following powers of two: 2, 4, 8, 16, or 32. Following the key is a line containing the encrypted message string C, which will contain at least one and at most sixty characters. The strings S, P, and C will not contain whitespace, but may contain printable characters other than letters and digits. The end of the input is a line which contains the single integer 0.
+For each input set print the decrypted string on a single line, as shown in the sample output.
+102 +RATE +TEAR +ETAEAA +32 +ABCDEFGHIJKLMNOPQRSTUVWXYZ._!?,; +;ABCDEFGHIJKLMNOPQRSTUVWXYZ._!?, +MOMCUKZ,ZPD +1956 +ACEHINT_ +ACTN_IHE +CIANCTNAAIECIA_TAI +0 ++
TEETER +HELLO_WORLD +THE_CAT_IN_THE_HAT ++
삼각형 게임은 시작할때 여섯개의삼각형을 부여받는데, 각 변에는 숫자가 쓰여있다(그림 참고). 이 삼각형들을 돌리고 움직여서 육각형을 만들어야 하는데, 반드시같은 숫자가 쓰여있는 변끼리만 닿아 있어야 한다. 삼각형을 뒤집을 순 없다. 완성된 육각형은 다음과 같다.
+ +점수를 계산하는 기준은 육각형의 각 변에 쓰인 숫자들의 합이다.
+ +당신은 어떤 삼각형 세트를 부여받았을때 그 세트에서 나올 수 있는 최고점수를 계산하는 것이다.
+입력은 여러개의 세트로 이루어져 있다.
+ +각 세트는 1이상 100이하의 정수 세개로 이루어진 수열 6개로 이루어져 있다.
+ +수열 안의 수는 삼각형 변에 쓰여 있는 수를 시계방향으로 왼쪽부터 입력한 것이다.
+ +세트는 별표(*) 하나를 포함하고 있는 줄로 구분된다.
+ +마지막 세트는 달러($)기호로 종결한다.
+각 세트 순서에 맞추어, 육각형 형성이 가능하다면 육각형의 최고점수를, 불가능하다면 none을 출력한다.
+1 4 20 +3 1 5 +50 2 3 +5 2 7 +7 5 20 +4 7 50 +* +10 1 20 +20 2 30 +30 3 40 +40 4 50 +50 5 60 +60 6 10 +* +10 1 20 +20 2 30 +30 3 40 +40 4 50 +50 5 60 +10 6 60 +$ ++
152 +21 +none ++
4x4 tic-tac-toe is played on a board with four rows (numbered 0 to 3 from top to bottom) and four columns (numbered 0 to 3 from left to right). There are two players, x and o, who move alternately with x always going first. The game is won by the first player to get four of his or her pieces on the same row, column, or diagonal. If the board is full and neither player has won then the game is a draw.
+ +Assuming that it is x's turn to move, x is said to have a forced win if x can make a move such that no matter what moves o makes for the rest of the game, x can win. This does not necessarily mean that x will win on the very next move, although that is a possibility. It means that x has a winning strategy that will guarantee an eventual victory regardless of what o does.
+ +Your job is to write a program that, given a partially-completed game with x to move next, will determine whether x has a forced win. You can assume that each player has made at least two moves, that the game has not already been won by either player, and that the board is not full.
+The input file contains one or more test cases, followed by a line beginning with a dollar sign that signals the end of the file. Each test case begins with a line containing a question mark and is followed by four lines representing the board; formatting is exactly as shown in the example. The characters used in a board description are the period (representing an empty space), lowercase x, and lowercase o.
+For each test case, output a line containing the (row, column) position of the first forced win for x, or '#####' if there is no forced win. Format the output exactly as shown in the example.
+For this problem, the first forced win is determined by board position, not the number of moves required for victory. Search for a forced win by examining positions (0, 0), (0, 1), (0, 2), (0, 3), (1, 0), (1, 1), ..., (3, 2), (3, 3), in that order, and output the first forced win you find. In the second test case below, note that x could win immediately by playing at (0, 3) or (2, 0), but playing at (0, 1) will still ensure victory (although it unnecessarily delays it), and position (0, 1) comes first.
+? +.... +.xo. +.ox. +.... +? +o... +.ox. +.xxx +xooo +$ ++
##### +(0,1) ++
셀프 넘버는 1949년 인도 수학자 D.R. Kaprekar가 이름 붙였다. 양의 정수 n에 대해서 d(n)을 n과 n의 각 자리수를 더하는 함수라고 정의하자. 예를 들어, d(75) = 75+7+5 = 87이다.
+ +양의 정수 n이 주어졌을 때, 이 수를 시작해서 n, d(n), d(d(n)), d(d(d(n))), ...과 같은 무한 수열을 만들 수 있다.
+ +예를 들어, 33으로 시작한다면 다음 수는 33 + 3 + 3 = 39이고, 그 다음 수는 39 + 3 + 9 = 51, 다음 수는 51 + 5 + 1 = 57이다. 이런식으로 다음과 같은 수열을 만들 수 있다.
+ +33, 39, 51, 57, 69, 84, 96, 111, 114, 120, 123, 129, 141, ...
+ +n을 d(n)의 생성자라고 한다. 위의 수열에서 33은 39의 생성자이고, 39는 51의 생성자, 51은 57의 생성자이다. 생성자가 한 개보다 많은 경우도 있다. 예를 들어, 101은 생성자가 2개(91과 100) 있다.
+ +생성자가 없는 숫자를 셀프 넘버라고 한다. 100보다 작은 셀프 넘버는 총 13개가 있다. 1, 3, 5, 7, 9, 20, 31, 42, 53, 64, 75, 86, 97
+ +10000보다 작거나 같은 셀프 넘버를 한 줄에 하나씩 출력하는 프로그램을 작성하시오.
+입력은 없다.
+10,000보다 작거나 같은 셀프 넘버를 한 줄에 하나씩 증가하는 순서로 출력한다.
+1 +3 +5 +7 +9 +20 +31 +42 +53 +64 + | + | <-- a lot more numbers + | +9903 +9914 +9925 +9927 +9938 +9949 +9960 +9971 +9982 +9993 ++
Cryptography deals with methods of secret communication that transform a message (the plaintext) into a disguised form (the ciphertext) so that no one seeing the ciphertext will be able to figure out the plaintext except the intended recipient. Transforming the plaintext to the ciphertext is encryption; transforming the ciphertext to the plaintext is decryption. Twisting is a simple encryption method that requires that the sender and recipient both agree on a secret key k, which is a positive integer.
+ +The twisting method uses four arrays: plaintext and ciphertext are arrays of characters, and plaincode and ciphercode are arrays of integers. All arrays are of length n, where n is the length of the message to be encrypted. Arrays are origin zero, so the elements are numbered from 0 to n - 1. For this problem all messages will contain only lowercase letters, the period, and the underscore (representing a space).
+ +The message to be encrypted is stored in plaintext. Given a key k, the encryption method works as follows. First convert the letters in plaintext to integer codes in plaincode according to the following rule: '_' = 0, 'a' = 1, 'b' = 2, ..., 'z' = 26, and '.' = 27. Next, convert each code in plaincode to an encrypted code in ciphercode according to the following formula: for all i from 0 to n - 1,
+ +++ +ciphercode[i] = (plaincode[ki mod n] - i) mod 28.
+
(Here x mod y is the positive remainder when x is divided by y. For example, 3 mod 7 = 3, 22 mod 8 = 6, and -1 mod 28 = 27. You can use the C '%' operator or Pascal 'mod' operator to compute this as long as you add y if the result is negative.) Finally, convert the codes in ciphercode back to letters in ciphertext according to the rule listed above. The final twisted message is in ciphertext. Twisting the message cat using the key 5 yields the following:
+ +| Array | +0 | +1 | +2 | +
| plaintext | +'c' | +'a' | +'t' | +
| plaincode | +3 | +1 | +20 | +
| ciphercode | +3 | +19 | +27 | +
| ciphertext | +'c' | +'s' | +'.' | +
Your task is to write a program that can untwist messages, i.e., convert the ciphertext back to the original plaintext given the key k. For example, given the key 5 and ciphertext 'cs.', your program must output the plaintext 'cat'.
+The input file contains one or more test cases, followed by a line containing only the number 0 that signals the end of the file. Each test case is on a line by itself and consists of the key k, a space, and then a twisted message containing at least one and at most 70 characters. The key k will be a positive integer not greater than 300.
+ +Note: you can assume that untwisting a message always yields a unique result. (For those of you with some knowledge of basic number theory or abstract algebra, this will be the case provided that the greatest common divisor of the key k and length n is 1, which it will be for all test cases.)
+For each test case, output the untwisted message on a line by itself.
+5 cs. +101 thqqxw.lui.qswer +3 b_ylxmhzjsys.virpbkr +0 ++
cat +this_is_a_secret +beware._dogs_barking ++
+ 칸토어 집합은 0과 1사이의 실수로 이루어진 집합으로, 구간 [0, 1]에서 시작해서 각 구간을 3등분하여 가운데 구간을 반복적으로 제외하는 방식으로 만든다.
+ ++ 전체 집합이 유한이라고 가정하고, 다음과 같은 과정을 통해서 칸토어 집합의 근사를 만들어보자.
+ ++ 1. -가 3N개 있는 문자열에서 시작한다.
+ ++ 2. 문자열을 3등분 한 뒤, 가운데 문자열을 공백으로 바꾼다. 이렇게 하면, 선(문자열) 2개가 남는다.
+ ++ 3. 이제 각 선(문자열)을 3등분 하고, 가운데 문자열을 공백으로 바꾼다. 이 과정은 모든 선의 길이가 1일때 까지 계속 한다.
+ ++ 예를 들어, N=3인 경우, 길이가 27인 문자열로 시작한다.
+ ++---------------------------+ +
+ 여기서 가운데 문자열을 공백으로 바꾼다.
+ ++--------- ---------+ +
+ 남은 두 선의 가운데 문자열을 공백으로 바꾼다.
+ ++--- --- --- ---+ +
+ 한번 더
+ ++- - - - - - - -+ +
+ 모든 선의 길이가 1이면 멈춘다. N이 주어졌을 때, 마지막 과정이 끝난 후 결과를 출력하는 프로그램을 작성하시오.
++ 입력을 여러 줄로 이루어져 있다. 각 줄에 N이 주어진다. 파일의 끝에서 입력을 멈춘다. N은 0보다 크거나 같고, 12보다 작거나 같은 정수이다.
++ 입력으로 주어진 N에 대해서, 해당하는 칸토어 집합의 근사를 출력한다.
+0 +1 +3 +2 ++
- +- - +- - - - - - - - +- - - - ++
양의 정수를 하나 고른 뒤, 각 자리수의 제곱의 합을 구한다. 이것을 계속 반복하면, 흥미로운 특징을 가지는 무한 수열을 얻을 수 있다.
+ +가장 처음에 5로 시작했을 때, 다음과 같은 수열을 얻을 수 있다.
+ +5, 25, 29, 85, 89, 145, 42, 20, 4, 16, 37, 58, ...
+ +여기서 가장 흥미로운 특징은 58다음에 나타난다. 52 + 82 = 89로 이 숫자는 이미 수열에 나왔단 수이다. 즉, 58 다음부터 수열은 다음과 같은 구간이 반복해서 나온다. 89, 145, 42, 20, 4, 16, 37, 58
+ +위의 사이클은 다른 숫자로 시작해도 나타나는 사이클이다. (3, 18, 36, 64, 등등등)
+ +어떤 숫자는 1로 반복되는 사이클이 나타나기도 한다. 예를 들어 19로 시작했을 때를 살펴보자.
+ +19, 82, 68, 100, 1, ...
+ +두 숫자가 주어졌을 때, 같은 수가 나올 때 까지 필요한 수열의 길이의 합의 최솟값을 구하는 프로그램을 작성하시오.
+ +예를 들어, 61과 29로 시작하면, (61, 37, 58, 89)와 (29, 85, 89)에서 같은 수를 만들 수 있다. 19와 100으로 시작하는 경우에는 (19, 82, 68, 100), (100)으로 같은 수를 만들 수 있다.
+입력을 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있고, A와 B가 주어진다. (0 < A, B < 109)
+ +마지막 줄에는 0이 두 개 주어진다.
+각 테스트 케이스에 대해서, A와 B를 출력하고, 두 수열의 길이의 합의 최솟값을 출력한다. 만약, 두 수열에서 같은 수가 나타나지 않는다면, 0을 출력한다.
+89, 145, 42, 20, 4, 16, 37, 58 사이클
+ +1 사이클
+ +89 89 +19 100 +61 19 +0 0 ++
89 89 2 +19 100 5 +61 19 0 ++
베르트랑 공준은 임의의 자연수 n에 대하여, n보다 크고, 2n보다 작거나 같은 소수는 적어도 하나 존재한다는 내용을 담고 있다.
+ +이 명제는 조제프 베르트랑이 1845년에 추측했고, 파프누티 체비쇼프가 1850년에 증명했다.
+ +예를 들어, 10보다 크고, 20보다 작거나 같은 소수는 4개가 있다. (11, 13, 17, 19) 또, 14보다 크고, 28보다 작거나 같은 소수는 3개가 있다. (17,19, 23)
+ +자연수 n이 주어졌을 때, n보다 크고, 2n보다 작거나 같은 소수의 개수를 구하는 프로그램을 작성하시오.
+입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 케이스는 n을 포함하는 한 줄로 이루어져 있다.
+ +입력의 마지막에는 0이 주어진다.
+각 테스트 케이스에 대해서, n보다 크고, 2n보다 작거나 같은 소수의 개수를 출력한다.
+1 +10 +13 +100 +1000 +10000 +100000 +0 ++
1 +4 +3 +21 +135 +1033 +8392 ++
세계는 균형이 잘 잡혀있어야 한다. 양과 음, 빛과 어둠 그리고 왼쪽 괄호와 오른쪽 괄호처럼 말이다.
+ +정민이의 임무는 어떤 문자열이 주어졌을 때, 괄호들의 균형이 잘 맞춰져 있는지 판단하는 프로그램을 짜는 것이다.
+ +문자열에 포함되는 괄호는 소괄호("()") 와 대괄호("[]")로 2종류이고, 문자열이 균형을 이루는 조건은 아래와 같다.
+ +정민이를 도와 문자열이 주어졌을 때 균형잡힌 문자열인지 아닌지를 판단해보자.
+각 문자열은 마지막 글자를 제외하고 영문 알파벳, 공백, 소괄호("( )"), 대괄호("[ ]")로 이루어져 있으며, 온점(".")으로 끝나고, 길이는 100글자보다 작거나 같다.
+ +각 줄마다 해당 문자열이 균형을 이루고 있으면 "yes"를, 아니면 "no"를 출력한다.
+7번째의 " ."와 같이 괄호가 하나도 없는 경우도 균형잡힌 문자열로 간주할 수 있다.
+So when I die (the [first] I will see in (heaven) is a score list). +[ first in ] ( first out ). +Half Moon tonight (At least it is better than no Moon at all]. +A rope may form )( a trail in a maze. +Help( I[m being held prisoner in a fortune cookie factory)]. +([ (([( [ ] ) ( ) (( ))] )) ]). + . +. ++
yes +yes +no +no +no +yes +yes ++
People are going to the movies in groups (or alone), but normally only care to socialize within that group. Being Scandinavian, each group of people would like to sit at least one space apart from any other group of people to ensure their privacy, unless of course they sit at the end of a row. The number of seats per row in the cinema starts at X and decreases with one seat per row (down to a number of 1 seat per row). The number of groups of varying sizes is given as a vector (N1, . . . , Nn), where N1 is the number of people going alone, N2 is the number of people going as a pair etc. Calculate the seat-width, X, of the widest row, which will create a solution that seats all (groups of) visitors using as few rows of seats as possible. The cinema also has a limited capacity, so the widest row may not exceed 12 seats.
The first line of input contains a single integer n (1 ≤ n ≤ 12), giving the size of the largest group in the test case.
+ +Then follows a line with n integers, the i-th integer (1-indexed) denoting the number of groups of i persons who need to be seated.
+A single number; the size of the smallest widest row that will accommodate all the guests. If this number is greater than 12, output impossible instead.
+3 +0 1 1 ++
3 +2 1 1 ++
3 ++
4 ++
전화번호 목록이 주어진다. 이때, 이 목록이 일관성이 있는지 없는지를 구하는 프로그램을 작성하시오.
+ +전화번호 목록이 일관성을 유지하려면, 한 번호가 다른 번호의 접두어인 경우가 없어야 한다.
+ +예를 들어, 전화번호 목록이 아래와 같은 경우를 생각해보자
+ +이 경우에 선영이에게 전화를 걸 수 있는 방법이 없다. 전화기를 들고 선영이 번호의 처음 세 자리를 누르는 순간 바로 긴급전화가 걸리기 때문이다. 따라서, 이 목록은 일관성이 없는 목록이다.
+첫째 줄에 테스트 케이스의 개수 t가 주어진다. (1 ≤ t ≤ 50) 각 테스트 케이스의 첫째 줄에는 전화번호의 수 n이 주어진다. (1 ≤ n ≤ 10000) 다음 n개의 줄에는 목록에 포함되어 있는 전화번호가 하나씩 주어진다. 전화번호의 길이는 길어야 10자리이며, 목록에 있는 두 전화번호가 같은 경우는 없다.
+각 테스트 케이스에 대해서, 일관성 있는 목록인 경우에는 YES, 아닌 경우에는 NO를 출력한다.
+2 +3 +911 +97625999 +91125426 +5 +113 +12340 +123440 +12345 +98346 ++
NO +YES ++
삼각형의 세 변의 길이가 주어질 때 변의 길이에 따라 다음과 같이 정의한다.
+ +단 주어진 세 변의 길이가 삼각형의 조건을 만족하지 못하는 경우에는 "Invalid" 를 출력한다. 예를 들어 6, 3, 2가 이 경우에 해당한다. 가장 긴 변의 길이보다 나머지 두 변의 길이의 합이 길지 않으면 삼각형의 조건을 만족하지 못한다.
+ +세 변의 길이가 주어질 때 위 정의에 따른 결과를 출력하시오.
+각 줄에는 1,000을 넘지 않는 양의 정수 3개가 입력된다. 마지막 줄은 0 0 0이며 이 줄은 계산하지 않는다.
+각 입력에 맞는 결과 (Equilateral, Isosceles, Scalene, Invalid) 를 출력하시오.
+7 7 7 +6 5 4 +3 2 5 +6 2 6 +0 0 0 ++
Equilateral +Scalene +Invalid +Isosceles ++
4 × 3 = 12이다.
+ +이 식을 통해 다음과 같은 사실을 알 수 있다.
+ +3은 12의 약수이고, 12는 3의 배수이다.
+ +4도 12의 약수이고, 12는 4의 배수이다.
+ +두 수가 주어졌을 때, 다음 3가지 중 어떤 관계인지 구하는 프로그램을 작성하시오.
+ +입력은 여러 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 10,000이 넘지않는 두 자연수로 이루어져 있다. 마지막 줄에는 0이 2개 주어진다. 두 수가 같은 경우는 없다.
+각 테스트 케이스마다 첫 번째 숫자가 두 번째 숫자의 약수라면 factor를, 배수라면 multiple을, 둘 다 아니라면 neither를 출력한다.
+8 16 +32 4 +17 5 +0 0 ++
factor +multiple +neither ++
대회가 끝이 나면 대부분의 참가자들은 어디서 꼬였는지에 대한 원망과 함께 좌절하게 된다.
+ +심사위원들 또한 좌절한다. 제출 기록에 따라 각 참가자에게 점수를 매기고 순위를 산정해야 하기 때문이다.
+ +비록 대회는 끝이 났지만 아직 코딩할 여력이 있다면, 심사위원들을 도울 순위 산정 프로그램을 만들어보자.
+첫 줄에 테스트 케이스의 수 K가 주어진다.
+ +각 테스트 케이스의 첫 줄엔 세 개의 정수 M, N, P가 주어진다.
+ +M은 대회에 사용된 문제의 개수이며 (1 ≤ M ≤ 10), N은 총 제출 수 (1 ≤ N ≤ 5000),
+ +P는 참가자의 수 (1 ≤ P ≤ 500) 이다.
+ +각 문제는 A, B, ... 로 이름붙여져 있으며, 참가자들은 1부터 P까지의 아이디를 갖는다.
+ +이어 N개의 줄에 걸쳐 제출 기록의 내용이 주어진다.
+ +제출 기록은 p m t j의 형식이며, p는 제출한 참가자(1, 2, ...) , m은 문제 번호(A, B, ..), t는 제출한 시각, j는 정답 여부이다.
+ +j=0이라면 오답이며, j=1일 경우엔 정답이다.
+ +제출 기록은 제출 시각이 감소하지 않는 순으로 주어진다.
+ +문제를 맞힐 경우, 맞힌 사람은 총점에 문제를 맞힌 시각 + 그 문제를 틀린 횟수*20만큼을 더하게 된다.
+ +만일 동일한 문제를 두 번 이상 맞히더라도 처음 맞힌 것만 인정된다.
+각 테스트 케이스마다 Data Set K: 를 출력한 뒤, 참가자들의 아이디, 푼 문제 수, 총점을 P줄에 걸쳐 1위부터 차례대로 출력한다.
+ +순위는 푼 문제 수가 다르다면 푼 문제 수가 많은 사람이 높으며,
+ +푼 문제 수가 같다면 총점이 낮은 사람이 순위가 높다.
+ +어떤 테스트 케이스에서도 동점자가 나오는 경우는 없다.
+ +각 테스트 케이스의 사이엔 빈 줄을 하나 출력한다.
+2 +4 6 3 +2 C 11 0 +1 B 24 1 +2 C 25 1 +1 C 40 0 +3 D 55 1 +2 B 55 1 +2 8 2 +1 A 8 0 +2 B 11 1 +1 A 11 0 +1 A 14 0 +1 A 20 0 +2 B 22 1 +2 A 23 0 +1 A 24 1 ++
Data Set 1: +2 2 100 +1 1 24 +3 1 55 + +Data Set 2: +2 1 11 +1 1 104 ++
Plot a path through the asteroid field. Given a starting location, final destination, and a description of the asteroid fields plot a shortest path that takes you from the starting location to the final destination without running into any asteroids. The asteroid field is described using a mxm grid of characters with
+ +Here is an example of a 4x4 grid.
+ ++s*-* +-*-* +---- +*-*d+ +
Your ship can move up, down, left, and right (not diagonally). Each position in a mxm grid will be assigned an integer between 0 and m2-1 as follows.
+ +The first line will have a positive integer n representing the number of data sets. The first line of each data set will contain an integer m, followed by m lines, and each line will contain m characters. The character s will always be in the top left corner and d will always be in the bottom right corner.
+For each data set print the minimal number of moves needed to reach the destination or -1 if there is no solution.
+2 +4 +s*-* +-*-* +--*- +*-*d +6 +s*---* +-*-*-- +---**- +***--- +--*-** +*-*--d ++
-1 +18 ++
상근이는 빈 공간과 벽으로 이루어진 건물에 갇혀있다. 건물의 일부에는 불이 났고, 상근이는 출구를 향해 뛰고 있다.
+ +매 초마다, 불은 동서남북 방향으로 인접한 빈 공간으로 퍼져나간다. 벽에는 불이 붙지 않는다. 상근이는 동서남북 인접한 칸으로 이동할 수 있으며, 1초가 걸린다. 상근이는 벽을 통과할 수 없고, 불이 옮겨진 칸 또는 이제 불이 붙으려는 칸으로 이동할 수 없다. 상근이가 있는 칸에 불이 옮겨옴과 동시에 다른 칸으로 이동할 수 있다.
+ +빌딩의 지도가 주어졌을 때, 얼마나 빨리 빌딩을 탈출할 수 있는지 구하는 프로그램을 작성하시오.
+첫째 줄에 테스트 케이스의 개수가 주어진다. 테스트 케이스는 최대 100개이다.
+ +각 테스트 케이스의 첫째 줄에는 빌딩 지도의 너비와 높이 w와 h가 주어진다. (1 ≤ w,h ≤ 1000)
+ +다음 h개 줄에는 w개의 문자, 빌딩의 지도가 주어진다.
+ +각 지도에 @의 개수는 하나이다.
+각 테스트 케이스마다 빌딩을 탈출하는데 가장 빠른 시간을 출력한다. 빌딩을 탈출할 수 없는 경우에는 "IMPOSSIBLE"을 출력한다.
+5 +4 3 +#### +#*@. +#### +7 6 +###.### +#*#.#*# +#.....# +#.....# +#..@..# +####### +7 4 +###.### +#....*# +#@....# +.###### +5 5 +..... +.***. +.*@*. +.***. +..... +3 3 +### +#@# +### ++
2 +5 +IMPOSSIBLE +IMPOSSIBLE +IMPOSSIBLE ++
상근날드에서 가장 잘 팔리는 메뉴는 세트 메뉴이다. 주문할 때, 자신이 원하는 햄버거와 음료를 하나씩 골라, 세트로 구매하면, 가격의 합계에서 50원을 뺀 가격이 세트 메뉴의 가격이 된다.
+ +햄버거는 총 3종류 상덕버거, 중덕버거, 하덕버거가 있고, 음료는 콜라와 사이다 두 종류가 있다.
+ +햄버거와 음료의 가격이 주어졌을 때, 가장 싼 세트 메뉴의 가격을 출력하는 프로그램을 작성하시오.
+입력은 총 다섯 줄이다. 첫째 줄에는 상덕버거, 둘째 줄에는 중덕버거, 셋째 줄에는 하덕버거의 가격이 주어진다. 넷째 줄에는 콜라의 가격, 다섯째 줄에는 사이다의 가격이 주어진다. 모든 가격은 100원 이상, 2000원 이하이다.
+첫째 줄에 가장 싼 세트 메뉴의 가격을 출력한다.
+800 +700 +900 +198 +330 ++
1999 +1999 +100 +189 +100 ++
848 ++
150 ++
두 문자열이 주어졌을 때, 두 문자열에 모두 포함된 가장 긴 공통 부분 문자열을 찾는 프로그램을 작성하시오.
+ +어떤 문자열 s의 부분 문자열 t란, s에 t가 연속으로 나타나는 것을 말한다. 예를 들어, 문자열 ABRACADABRA의 부분 문자열은 ABRA, RAC, D, ACADABRA, ABRACADABRA, 빈 문자열 등이다. 하지만, ABRC, RAA, BA, K는 부분 문자열이 아니다.
두 문자열 ABRACADABRA와 ECADADABRBCRDARA의 공통 부분 문자열은 CA, CADA, ADABR, 빈 문자열 등이 있다. 이 중에서 가장 긴 공통 부분 문자열은 ADABR이며, 길이는 5이다. 또, 두 문자열이 UPWJCIRUCAXIIRGL와 SBQNYBSBZDFNEV인 경우에는 가장 긴 공통 부분 문자열은 빈 문자열이다.
첫째 줄과 둘째 줄에 문자열이 주어진다. 문자열은 대문자로 구성되어 있으며, 길이는 1 이상 4000 이하이다.
+첫째 줄에 두 문자열에 모두 포함 된 부분 문자열 중 가장 긴 것의 길이를 출력한다.
+ABRACADABRA +ECADADABRBCRDARA ++
UPWJCIRUCAXIIRGL +SBQNYBSBZDFNEV ++
5 ++
0 ++
情報オリンピックの宣伝のために,長方形のベニヤ板にペンキを塗り看板を制作 したい.ベニヤ板には色を塗りたくないところにあらかじめ何枚かの長方形のマス キングテープが貼られている.そこでマスキングテープで区切られた領域ごとに別々 の色を使いペンキを塗ることにした.例えば,図 5-1 の場合は 5 色のペンキを使う.
+ +図 5-1 看板の例
+ +入力としてマスキングテープを貼る位置が与えられた時,使うペンキの色の数を 求めるプログラムを作成せよ.ただし,ベニヤ板全体がマスキングテープで覆われる ことはなく,全てのマスキングテープの辺はベニヤ板のいずれかの辺に平行である.
+1 行目にはベニヤ板の幅 w (1 ≤ w ≤ 1000000 となる整数) と高さ h (1 ≤ h ≤ 1000000 となる整数) がこの順に空白区切りで書かれている.
+ +2 行目にはマスキングテープの数 n (1 ≤ n ≤ 1000 となる整数) が書かれている. 続く 3 行目以降の 2 + i 行目 (1 ≤ i ≤ n) には,i 番目に貼るマスキングテープの左 下の座標 (x1, y1) と,右上の座標 (x2, y2) が x1, y1, x2, y2 (0 ≤ x1 < x2 ≤ w, 0 ≤ y1 < y2 ≤ h となる整数) の順に空白区切りで書かれている.
+ +ただし,ベニヤ板の左下の角の座標は (0, 0) で右上の角の座標は (w, h) である.
+1 行だけからなり,その 1 行は使うペンキの色数だけを含む.
+図 5-2 図 5-1 の看板の入力例
+15 6 +10 +1 4 5 6 +2 1 4 5 +1 0 5 1 +6 1 7 5 +7 5 9 6 +7 0 9 2 +9 1 10 5 +11 0 14 1 +12 1 13 5 +11 5 14 6 ++
5 ++
X대학 M교수님은 프로그래밍 수업을 맡고 있다. 교실엔 학생이 30명이 있는데, 학생 명부엔 각 학생별로 1번부터 30번까지 출석번호가 붙어 있다.
+ +교수님이 내준 특별과제를 28명이 제출했는데, 그 중에서 제출 안 한 학생 2명의 출석번호를 구하는 프로그램을 작성하시오.
+입력은 총 28줄로 각 제출자(학생)의 출석번호 n(1 ≤ n ≤ 30)가 한 줄에 하나씩 주어진다. 출석번호에 중복은 없다.
+출력은 2줄이다. 1번째 줄엔 제출하지 않은 학생의 출석번호 중 가장 작은 것을 출력하고, 2번째 줄에선 그 다음 출석번호를 출력한다.
+3 +1 +4 +5 +7 +9 +6 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 ++
9 +30 +6 +12 +10 +20 +21 +11 +7 +5 +28 +4 +18 +29 +17 +19 +27 +13 +16 +26 +14 +23 +22 +15 +3 +1 +24 +25 ++
2 +8 ++
2 +8 ++
상근이의 할머니는 아래 그림과 같이 오래된 다이얼 전화기를 사용한다.
+ +전화를 걸고 싶은 번호가 있다면, 숫자를 하나를 누른 다음에 금속 핀이 있는 곳 까지 시계방향으로 돌려야 한다. 숫자를 하나 누르면 다이얼이 처음 위치로 돌아가고, 다음 숫자를 누르려면 다이얼을 처음 위치에서 다시 돌려야 한다.
+ +숫자 1을 걸려면 총 2초가 필요하다. 1보다 큰 수를 거는데 걸리는 시간은 이보다 더 걸리며, 한 칸 옆에 있는 숫자를 걸기 위해선 1초씩 더 걸린다.
+ +상근이의 할머니는 전화 번호를 각 숫자에 해당하는 문자로 외운다. 즉, 어떤 단어를 걸 때, 각 알파벳에 해당하는 숫자를 걸면 된다. 예를 들어, UNUCIC는 868242와 같다.
+ +할머니가 외운 단어가 주어졌을 때, 이 전화를 걸기 위해서 필요한 최소 시간을 구하는 프로그램을 작성하시오.
+첫째 줄에 알파벳 대문자로 이루어진 단어가 주어진다. 단어의 길이는 2보다 크거나 같고, 15보다 작거나 같다.
+첫째 줄에 다이얼을 걸기 위해서 필요한 최소 시간을 출력한다.
+WA ++
UNUCIC ++
13 ++
36 ++
천방지축 베시(소, 1세)는 외양간을 탈출해서 풀로 뒤덮인 산등성이에 숨었다. 농부인 존씨는 베시를 다시 잡기위해 온 풀숲을 샅샅히 뒤졌지만 찾지 못하였다. 안타깝게도 그는 베시를 찾는데 어려워하고 있다. 존에게 그 풀밭은 N개의 소괄호로 이루어진 문자열처럼 보였기 때문이다. 예를 들면, 아래와 같다.
+ +)((()())())
+ +존은 베시의 뒷다리가 왼쪽 소괄호 두 개가 붙어있는 것 (( 과 똑같이 생긴 것을 알고있다. 또한 베시의 앞다리는 오른쪽 소괄호 두 개가 붙어있는 것 )) 과 똑같이 생겼다. 베시의 위치는 뒷다리의 위치가 x이고 앞다리의 위치가 y라고 할때 x < y가 되는 쌍으로 표현될 수 있다.
+ +이때, 베시가 서있는 위치가 될 수 있는 서로 다른 순서쌍들의 개수를 구하여 존을 도와보자.
+첫 째줄에 N개의 소괄호로 이루어진 문자열이 주어진다. (1 ≤ N ≤ 50,000)
+첫 째줄에 베시가 서있을 수 있는 위치의 개수를 출력한다. (즉, 가 나타나는 곳의 인덱스 x와 가 나타나는 곳의 인덱스 y에서 x<y가 되는 서로 다른 순서쌍들의 개수를 출력한다.)
+예제에서 베시가 있을 수 있는 곳은 아래의 네가지이다.
+ +)((()())()) ++
4 ++
The cows are in a particularly mischievous mood today! All Farmer John wants to do is take a photograph of the cows standing in a line, but they keep moving right before he has a chance to snap the picture.
Specifically, FJ's N (1 <= N <= 20,000) cows are tagged with ID numbers 1...N. FJ wants to take a picture of the cows standing in a line in a very specific ordering, represented by the contents of an array A[1...N], where A[j] gives the ID number of the jth cow in the ordering. He arranges the cows in this order, but just before he can press the button on his camera to snap the picture, up to one cow moves to a new position in the lineup. More precisely, either no cows move, or one cow vacates her current position in the lineup and then re-inserts herself at a new position in the lineup. Frustrated but not deterred, FJ again arranges his cows according to the ordering in A, but again, right before he can snap a picture, up to one cow (different from the first) moves to a new position in the lineup.
The process above repeats for a total of five photographs before FJ gives up. Given the contents of each photograph, see if you can reconstruct the original intended ordering A. Each photograph shows an ordering of the cows in which up to one cow has moved to a new location, starting from the initial ordering in A. Moreover, if a cow opts to move herself to a new location in one of the photographs, then she does not actively move in any of the other photographs (although she can end up at a different position due to other cows moving, of course).
+There are 5 cows, with IDs 1, 2, 3, 4, and 5. In each of the 5 photos, a different cow moves to the front of the line (although the cows could have moved anywhere else, if they wanted).
The correct original ordering A[1..5] is 1,2,3,4,5.
+5 +1 +2 +3 +4 +5 +2 +1 +3 +4 +5 +3 +1 +2 +4 +5 +4 +1 +2 +3 +5 +5 +1 +2 +3 +4 ++
1 +2 +3 +4 +5 ++
Bessie is on a diet where she can eat no more than C (10 <= C <= 35,000) calories per day. Farmer John is teasing her by putting out B (1 <= B <= 21) buckets of feed, each with some (potentially non-unique) number of calories (range: 1..35,000). Bessie has no self-control: once she starts on a feed bucket, she consumes all of it.
+ +Bessie is not so good at combinatorics. Determine the optimal combination of feed buckets that gives Bessie as many calories without exceeding the limit C.
+ +As an example, consider a limit of 40 calories and 6 buckets with 7, 13, 17, 19, 29, and 31 calories. Bessie could eat 7 + 31 = 38 calories but could eat even more by consuming three buckets: 7 + 13 + 19 = 39 calories. She can find no better combination.
++
40 6 +7 13 17 19 29 31 ++
39 ++
FJ has installed a beautiful pond for his cows' esthetic enjoyment and exercise. The rectangular pond has been partitioned into square cells of M rows and N columns (1 <= M <= 30; 1 <= N <= 30). Some of the cells have astonishingly sturdy lilypads; others have rocks; the remainder are just beautiful, cool, blue water.
+ +Bessie is practicing her ballet moves by jumping from one lilypad to another and is currently located at one of the lilypads. She wants to travel to another lilypad in the pond by jumping from one lilypad to another.
+ +Surprising only to the uninitiated, Bessie's jumps between lilypads always appear as a chess-knight's move: one move in one direction and then two more in the orthogonal direction (or perhaps two in one direction and then one in the orthogonal direction).
+ +Farmer John is observing Bessie's ballet drill and realizes that sometimes she might not be able to jump to her destination lilypad because intermediary lilypads are missing.
+ +Ever thrifty, he wants to place a minimum of additional lilypads so she can complete her quest (perhaps quickly; perhaps by using a large number of intermediate lilypads). Of course, lilypads cannot be placed where rocks are present.
+ +Help Farmer John determine the minimum number of additional lilypads he has to place. Also determine the minimum number of jumps required to reach the destination when placing that minimum number of additional lilypads in some optimal location. Finally, determine the total number of unique ways Bessie can jump from the start to the end in the minimum number of jumps (after the smallest number of lily pads is placed in locations as needed, of course). The final number includes jumps using any of the possible ways the new lilypads are placed!
++
+
Two lilypads are required as shown by the x's in each of the two instances below:
+ ++ 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 + 0 x 0 0 0 2 0 1 0 0 0 0 0 2 0 1 + 0 0 0 0 x 4 0 0 0 0 x 0 x 4 0 0 + 3 0 0 0 0 0 1 0 3 0 0 0 0 0 1 0+ +
Bessie must make at least 6 jumps to reach destination and there are two different paths of 6 jumps as shown below.
+ ++ 0 0 0 C 0 0 0 0 0 0 0 C 0 0 0 0 + 0 B 0 0 0 2 0 F 0 0 0 0 0 2 0 F + 0 0 0 0 D G 0 0 0 0 B 0 D G 0 0 + A 0 0 0 0 0 E 0 A 0 0 0 0 0 E 0+
4 8 +0 0 0 1 0 0 0 0 +0 0 0 0 0 2 0 1 +0 0 0 0 0 4 0 0 +3 0 0 0 0 0 1 0 ++
2 +6 +2 ++
A data stream is a real-time, continuous, ordered sequence of items. Some examples include sensor data, Internet traffic, financial tickers, on-line auctions, and transaction logs such as Web usage logs and telephone call records. Likewise, queries over streams run continuously over a period of time and incrementally return new results as new data arrives. For example, a temperature detection system of a factory warehouse may run queries like the following.
+ +We have developed a Data Stream Management System called Argus, which processes the queries over the data streams. Users can register queries to the Argus. Argus will keep the queries running over the changing data and return the results to the corresponding user with the desired frequency.
+ +For the Argus, we use the following instruction to register a query:
+ +Q_num (0 < Q_num <= 3000) is query ID-number, and Period (0 < Period <= 3000) is the interval between two consecutive returns of the result. After Period seconds of register, the result will be returned for the first time, and after that, the result will be returned every Period seconds.
+ +Here we have several different queries registered in Argus at once. It is confirmed that all the queries have different Q_num. Your task is to tell the first K queries to return the results. If two or more queries are to return the results at the same time, they will return the results one by one in the ascending order of Q_num.
+The first part of the input are the register instructions to Argus, one instruction per line. You can assume the number of the instructions will not exceed 1000, and all these instructions are executed at the same time. This part is ended with a line of "#".
+ +The second part is your task. This part contains only one line, which is one positive integer K (<= 10000).
+You should output the Q_num of the first K queries to return the results, one number per line.
+ ++
Register 2004 200 +Register 2005 300 +# +5 ++
2004 +2005 +2004 +2004 +2005 ++
대혁이는 교사이다. 하지만 대혁이의 수업은 무척이나 지루하다. 그래서 학생들은 수업도중에 빙고를 하기 시작하였다. 하지만 대혁이는 눈치가 빨라서 이미 모든걸 알고 있었다. 대혁이는 학생들을 혼내기 전에 한 번의 게임에 필요한 평균적인 단어수를 구하려고 한다.
+ +학생들은 영어를 무척이나 잘해서 모든 단어는 알파벳으로 되어있는 단어만 말하고 알파벳은 소문자와 대문자 둘 다 가능하다. 학생들은 대혁이를 혼란시키기 위해 알파벳 시작 중간 끝에 알파벳이 아닌 다른 문자를 넣기로 하였다.
+ +하지만 몇몇의 어리석은 학생들이 빙고가 되면 "BULLSHIT"이라고 외쳤고 대혁이는 이 단어를 통해 게임이 끝났다는 것을 알아냈다. 또한 이 학생들은 같은 단어를 말하기도 하였는데, 이는 당연히 하나로 간주한다. 또한, Bingo와 bingo는 같은 단어로 간주한다. 즉, 대소문자는 구별하지 않는다.
+ +대혁이는 수업을 하려하기 때문에 당신이 프로그램을 만들어 학생들이 얼마나 게임을 하고 얼마나 단어를 불렀는지 알아내도록 하자.
+입력은 여러 문장이 입력되며 중간중간 "BULLSHIT"이 섞여 있다.
+ +"BULLSHIT"은 한 게임이 끝났음을 알려주고 있다.
+ +또한 다음과 같은 규칙을 따른다.
+ +출력은 한 번의 게임이 종료될때 몇번의 단어가 불려지는지 평균을 구하려고 한다. 답은 소수가 아닌 분수로 표기하며 분모와 분자의 공통 약수는 1만 존재한다. 즉, 게임이 10번 진행되고 단어가 55번 진행되었다면 출력은 "11 / 2"가 되어야 한다.
+Programming languages can be classified BULLSHIT into following types: +- imperative and BULLSHIT procedural languages +- functional languages +- logical BULLSHIT programming languages +- object-oriented BULLSHIT languages ++
9 / 2 ++
히스토그램은 직사각형 여러 개가 아래쪽으로 정렬되어 있는 도형이다. 각 직사각형은 같은 너비를 가지고 있지만, 높이는 서로 다를 수도 있다. 예를 들어, 왼쪽 그림은 높이가 2, 1, 4, 5, 1, 3, 3이고 너비가 1인 직사각형으로 이루어진 히스토그램이다.
+ +히스토그램에서 가장 넓이가 큰 직사각형을 구하는 프로그램을 작성하시오.
+입력은 테스트 케이스 여러 개로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있고, 직사각형의 수 n이 가장 처음으로 주어진다. (1 ≤ n ≤ 100,000) 그 다음 n개의 정수 h1, ..., hn (0 ≤ hi ≤ 1,000,000,000)가 주어진다. 이 숫자들은 히스토그램에 있는 직사각형의 높이이며, 왼쪽부터 오른쪽까지 순서대로 주어진다. 모든 직사각형의 너비는 1이고, 입력의 마지막 줄에는 0이 하나 주어진다.
+각 테스트 케이스에 대해서, 히스토그램에서 가장 넓이가 큰 직사각형의 넓이를 출력한다.
+7 2 1 4 5 1 3 3 +4 1000 1000 1000 1000 +0 ++
8 +4000 ++
피보나치 수의 정의는 다음과 같다.
+ +두 수 a와 b가 주어졌을 때, 구간 [a, b]에 포함되는 피보나치 수의 개수를 구하는 프로그램을 작성하시오.
+입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 음이 아닌 두 정수 a와 b로 이루어져 있다. 입력의 마지막 줄에는 0이 두 개 주어진다. (a ≤ b ≤ 10100) 두 수 a와 b는 불필요한 0으로 시작하지 않는다.
+각 테스트 케이스에 대해서, a ≤ fi ≤ b 인 피보나치 수 fi의 개수를 출력한다.
+10 100 +1234567890 9876543210 +0 0 ++
5 +4 ++
1742년, 독일의 아마추어 수학가 크리스티안 골드바흐는 레온하르트 오일러에게 다음과 같은 추측을 제안하는 편지를 보냈다.
+ +4보다 큰 모든 짝수는 두 홀수 소수의 합으로 나타낼 수 있다.+ +
예를 들어 8은 3 + 5로 나타낼 수 있고, 3과 5는 모두 홀수인 소수이다. 또, 20 = 3 + 17 = 7 + 13, 42 = 5 + 37 = 11 + 31 = 13 + 29 = 19 + 23 이다.
+ +이 추측은 아직도 해결되지 않은 문제이다.
+ +백만 이하의 모든 짝수에 대해서, 이 추측을 검증하는 프로그램을 작성하시오.
+입력은 하나 또는 그 이상의 테스트 케이스로 이루어져 있다. 테스트 케이스의 개수는 100,000개를 넘지 않는다.
+ +각 테스트 케이스는 짝수 정수 n 하나로 이루어져 있다. (6 ≤ n ≤ 1000000)
+ +입력의 마지막 줄에는 0이 하나 주어진다.
+각 테스트 케이스에 대해서, n = a + b 형태로 출력한다. 이때, a와 b는 홀수 소수이다. 숫자와 연산자는 공백 하나로 구분되어져 있다. 만약, n을 만들 수 있는 방법이 여러 가지라면, b-a가 가장 큰 것을 출력한다. 또, 두 홀수 소수의 합으로 n을 나타낼 수 없는 경우에는 "Goldbach's conjecture is wrong."을 출력한다.
+8 +20 +42 +0 ++
8 = 3 + 5 +20 = 3 + 17 +42 = 5 + 37 ++
An artist wants to construct a sign whose letters will rotate freely in the breeze. In order to do this, she must only use letters that are not changed by rotation of 180 degrees: I, O, S, H, Z, X, and N.
+ +Write a program that reads a word and determines whether the word can be used on the sign.
+The input will consist of one word, all in uppercase letters, with no spaces. The maximum length of the word will be 30 letters, and the word will have at least one letter in it.
+Output YES if the input word can be used on the sign; otherwise, output NO
+SHINS ++
YES ++
A simple poem consists of one or more four-line verses. Each line consists of one or more words consisting of upper or lowercase letters, or a combination of both upper and lowercase letters. Adjacent words on a line are separated by a single space.
+ +We define the last syllable of a word to be the sequence of letters from the last vowel (a, e, i, o, or u, but not y) to the end of the word. If a word has no vowel, then the last syllable is the word itself. We say that two lines rhyme if their last syllables are the same, ignoring case.
You are to classify the form of rhyme in each verse. The form of rhyme can be perfect, even, cross, shell, or free:
+ +The first line of the input file contains an integer , the number of verses in the poem, . The following lines of the input file contain the lines of the poem. Each line contains at most letters of the alphabet and spaces as described above.
+ +The output should have lines. For each verse of the poem there should be a single line containing one of the words perfect, even, cross, shell, or free describing the form of rhyme in that verse.
1 +One plus one is small +one hundred plus one is not +you might be very tall +but summer is not ++
2 +I say to you boo +You say boohoo +I cry too +It is too much foo +Your teacher has to mark +and mark and mark and teach +To do well on this contest you have to reach +for everything with a lark ++
2 +It seems though +that without some dough +creating such a bash +is a weighty in terms of cash +But how I see +the problem so fair +is to write subtle verse +with hardly a rhyme ++
cross ++
perfect +shell ++
even +free ++
오늘날 세상에는 많은 프로그래밍 대회가 있다. 대회에 사용할 좋은 프로그래밍 문제를 만드는 일은 매우 어렵다. 그 중 가장 어려운 일은 테스트 데이터를 만드는 일이다. 좋은 테스트 데이터는 문제의 의도에 맞게 짠 코드와 그렇지 않은 코드를 구별해 낼 수 있어야 한다. 또, 대부분의 경우에 올바른 결과를 내지만, 특별한 케이스에서는 틀리는 소스를 찾아낼 수도 있어야 한다.
+ +이 문제는 지금까지 풀어왔던 문제와는 다르게 문제를 푸는 소스를 제출하는 문제가 아니다. 바로 테스트 케이스를 만드는 문제이다.
+ +지금 상근이는 그래프 문제의 데이터 하나를 만들어야 한다. 이때, 상근이가 만들 데이터 X는 코드 A와 코드 B에 대해서 다음 조건을 만족해야 한다.
+ +또, 데이터는 작을 수록 좋기 때문에, 최대 T개의 정수로 이루어져 있어야 한다.
+ +위의 조건을 만족하는 입력 데이터를 만드는 프로그램을 작성하시오.
+이 문제는 입력이 없다.
+ +상근이가 데이터를 만들 문제는 7612번 SSSP이고, 사용할 코드 A는 ModifiedDijkstra, B는 FloydWarshall이다. (소스는 아래 힌트에 있다)
+ +코드를 보면 counter 변수가 있다. 이 변수 값이 1,000,000을 넘으면 TLE이다.
+ +또, T는 107이다.
+입력 데이터를 출력하면 된다.
+Young cryptoanalyst Georgie is investigating different schemes of generating random integer numbers ranging from to . He thinks that standard random number generators are not good enough, so he has invented his own scheme that is intended to bring more randomness into the generated numbers.
+ +First, Georgie chooses and generates random integer numbers ranging from to . Let the numbers generated be . After that Georgie calculates the sums of all pairs of adjacent numbers, and replaces the initial array with the array of sums, thus getting numbers:~. Then he applies the same procedure to the new array, getting numbers. The procedure is repeated until only one number is left. This number is then taken modulo . That gives the result of the generating procedure.
+ +Georgie has proudly presented this scheme to his computer science teacher, but was pointed out that the scheme has many drawbacks. One important drawback is the fact that the result of the procedure sometimes does not even depend on some of the initially generated numbers. For example, if and , then the result does not depend on .
+ +Now Georgie wants to investigate this phenomenon. He calls the -th element of the initial array irrelevant if the result of the generating procedure does not depend on . He considers various and and wonders which elements are irrelevant for these parameters. Help him to find it out.
+Input file contains and (, ).
+On the first line of the output file print the number of irrelevant elements of the initial array for given and . On the second line print all such that -th element is irrelevant. Numbers on the second line must be printed in the ascending order and must be separated by spaces.
+3 2 ++
1 +2 ++
정수로 이루어진 크기가 같은 배열 A, B, C, D가 있다.
+ +A[a], B[b], C[c], D[d]의 합이 0인 (a, b, c, d) 쌍의 개수를 구하는 프로그램을 작성하시오.
+첫째 줄에 배열의 크기 n (1 ≤ n ≤ 4000)이 주어진다. 다음 n개 줄에는 A, B, C, D에 포함되는 정수가 공백으로 구분되어져서 주어진다. 배열에 들어있는 정수의 절댓값은 최대 228이다.
+합이 0이 되는 쌍의 개수를 출력한다.
+6 +-45 22 42 -16 +-41 -27 56 30 +-36 53 -37 77 +-36 30 -75 -46 +26 -38 -10 62 +-32 -54 -6 45 ++
5 ++
숫자 m개가 주어지며, 각 숫자를 ni라고 한다. (1 ≤ i ≤ m)
+ +이때, 모든 i에 대해서, 연속하는 소수 ni개의 합으로 나타낼 수 있는 가장 작은 소수를 찾는 프로그램을 작성하시오.
+ +예를 들어, m = 2, n1 = 3, n2 = 5인 경우에 정답은 83이다. (83 = 23 + 29 + 31 = 11 + 13 + 17 + 19 + 23)
+첫째 줄에 테스트 케이스의 개수가 주어진다. 각 테스트 케이스의 첫째 줄에는 1 ≤ m ≤ 10 이 주어진다. 둘째 줄에는 ni가 주어진다. (1 ≤ ni ≤ 104)
+ +항상 정답은 107보다 작다.
+각 테스트 케이스마다 "Scenario i:"를 출력하고, 둘째 줄에 정답을 출력한다.
+2 +2 +3 5 +3 +3 5 7 ++
Scenario 1: +83 + +Scenario 2: +311 ++
At DUT, the Dreamland University of Technology, all students have personal id, numbers with six or seven digits. But they’re not just any numbers. Only those that have a checksum with a zero as last digit can be valid ids.
+ +Here’s how to compute the checksum of an id number. Multiply the digits from back to front (!) with repeating factors 9, 3, 7. Then simply add the products. Example:
+ ++id number : 1 3 9 0 2 7 2 +factors : 9 7 3 9 7 3 9 +products : 9 21 27 0 14 21 18+ +
Here the checksum is 9+21+27+0+14+21+18 = 110. The last digit is zero, so the id is valid. Sometimes students have very bad handwriting and the teaching assistents have a hard time identifying the id’s. You’re asked to help in special cases, where exactly one digit is unreadable. In that case, the missing digit can be computed (there’s always exactly one correct digit, thanks to 9, 3 and 7 being relatively prime to 10). Note that the students always begin concentrated and thus the first digit will always be readable (and not zero).
+The first line contains the number of scenarios. Each scenario is a single line that contains an id number with one digit replaced by a question mark and with six or seven digits length.
+The output for every scenario begins with a line containing “Scenario #i:”, where i is the number of the scenario starting at 1. Then print a single line containing the correct id number. Terminate the output for the scenario with a blank line.
+4 +13?0272 +3?5678 +345?78 +314?592 ++
Scenario #1: +1390272 + +Scenario #2: +335678 + +Scenario #3: +345778 + +Scenario #4: +3146592 ++
우리는 사람의 덩치를 키와 몸무게, 이 두 개의 값으로 표현하여 그 등수를 매겨보려고 한다. 어떤 사람의 몸무게가 x kg이고 키가 y cm라면 이 사람의 덩치는 (x, y)로 표시된다. 두 사람 A 와 B의 덩치가 각각 (x, y), (p, q)라고 할 때 x > p 그리고 y > q 이라면 우리는 A의 덩치가 B의 덩치보다 "더 크다"고 말한다. 예를 들어 어떤 A, B 두 사람의 덩치가 각각 (56, 177), (45, 165) 라고 한다면 A의 덩치가 B보다 큰 셈이 된다. 그런데 서로 다른 덩치끼리 크기를 정할 수 없는 경우도 있다. 예를 들어 두 사람 C와 D의 덩치가 각각 (45, 181), (55, 173)이라면 몸무게는 D가 C보다 더 무겁고, 키는 C가 더 크므로, "덩치"로만 볼 때 C와 D는 누구도 상대방보다 더 크다고 말할 수 없다.
+ +N명의 집단에서 각 사람의 덩치 등수는 자신보다 더 "큰 덩치"의 사람의 수로 정해진다. 만일 자신보다 더 큰 덩치의 사람이 k명이라면 그 사람의 덩치 등수는 k+1이 된다. 이렇게 등수를 결정하면 같은 덩치 등수를 가진 사람은 여러 명도 가능하다. 아래는 5명으로 이루어진 집단에서 각 사람의 덩치와 그 등수가 표시된 표이다.
+ +| 이름 | +(몸무게, 키) | +덩치 등수 | +
|---|---|---|
| A | +(55, 185) | +2 | +
| B | +(58, 183) | +2 | +
| C | +(88, 186) | +1 | +
| D | +(60, 175) | +2 | +
| E | +(46, 155) | +5 | +
위 표에서 C보다 더 큰 덩치의 사람이 없으므로 C는 1등이 된다. 그리고 A, B, D 각각의 덩치보다 큰 사람은 C뿐이므로 이들은 모두 2등이 된다. 그리고 E보다 큰 덩치는 A, B, C, D 이렇게 4명이므로 E의 덩치는 5등이 된다. 위 경우에 3등과 4등은 존재하지 않는다. 여러분은 학생 N명의 몸무게와 키가 담긴 입력을 읽어서 각 사람의 덩치 등수를 계산하여 출력해야 한다.
+첫 줄에는 전체 사람의 수 N이 주어진다. 그리고 이어지는 N개의 줄에는 각 사람의 몸무게와 키를 나타내는 양의 정수 x와 y가 하나의 공백을 두고 각각 나타난다.
+여러분은 입력에 나열된 사람의 덩치 등수를 구해서 그 순서대로 첫 줄에 출력해야 한다. 단, 각 덩치 등수는 공백문자로 분리되어야 한다.
+5 +55 185 +58 183 +88 186 +60 175 +46 155 ++
2 2 1 2 5 ++
철수의 토마토 농장에서는 토마토를 보관하는 큰 창고를 가지고 있다. 토마토는 아래의 그림과 같이 격자모양 상자의 칸에 하나씩 넣은 다음, 상자들을 수직으로 쌓아 올려서 창고에 보관한다.
+ +창고에 보관되는 토마토들 중에는 잘 익은 것도 있지만, 아직 익지 않은 토마토들도 있을 수 있다. 보관 후 하루가 지나면, 익은 토마토들의 인접한 곳에 있는 익지 않은 토마토들은 익은 토마토의 영향을 받아 익게 된다. 하나의 토마토에 인접한 곳은 위, 아래, 왼쪽, 오른쪽, 앞, 뒤 여섯 방향에 있는 토마토를 의미한다. 대각선 방향에 있는 토마토들에게는 영향을 주지 못하며, 토마토가 혼자 저절로 익는 경우는 없다고 가정한다. 철수는 창고에 보관된 토마토들이 며칠이 지나면 다 익게 되는지 그 최소 일수를 알고 싶어 한다.
+ +토마토를 창고에 보관하는 격자모양의 상자들의 크기와 익은 토마토들과 익지 않은 토마토들의 정보가 주어졌을 때, 며칠이 지나면 토마토들이 모두 익는지, 그 최소 일수를 구하는 프로그램을 작성하라. 단, 상자의 일부 칸에는 토마토가 들어있지 않을 수도 있다.
+첫 줄에는 상자의 크기를 나타내는 두 정수 M,N과 쌓아올려지는 상자의 수를 나타내는 H가 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M ≤ 100, 2 ≤ N ≤ 100, 1 ≤ H ≤ 100 이다. 둘째 줄부터는 가장 밑의 상자부터 가장 위의 상자까지에 저장된 토마토들의 정보가 주어진다. 즉, 둘째 줄부터 N개의 줄에는 하나의 상자에 담긴 토마토의 정보가 주어진다. 각 줄에는 상자 가로줄에 들어있는 토마토들의 상태가 M개의 정수로 주어진다. 정수 1은 익은 토마토, 정수 0 은 익지 않은 토마토, 정수 -1은 토마토가 들어있지 않은 칸을 나타낸다. 이러한 N개의 줄이 H번 반복하여 주어진다.
+ +토마토가 하나 이상 있는 경우만 입력으로 주어진다.
+여러분은 토마토가 모두 익을 때까지 최소 며칠이 걸리는지를 계산해서 출력해야 한다. 만약, 저장될 때부터 모든 토마토가 익어있는 상태이면 0을 출력해야 하고, 토마토가 모두 익지는 못하는 상황이면 -1을 출력해야 한다.
+5 3 1 +0 -1 0 0 0 +-1 -1 0 1 1 +0 0 0 1 1 ++
5 3 2 +0 0 0 0 0 +0 0 0 0 0 +0 0 0 0 0 +0 0 0 0 0 +0 0 1 0 0 +0 0 0 0 0 ++
4 3 2 +1 1 1 1 +1 1 1 1 +1 1 1 1 +1 1 1 1 +-1 -1 -1 -1 +1 1 1 -1 ++
-1 ++
4 ++
0 ++
철수의 토마토 농장에서는 토마토를 보관하는 큰 창고를 가지고 있다. 토마토는 아래의 그림과 같이 격자 모양 상자의 칸에 하나씩 넣어서 창고에 보관한다.
+ +창고에 보관되는 토마토들 중에는 잘 익은 것도 있지만, 아직 익지 않은 토마토들도 있을 수 있다. 보관 후 하루가 지나면, 익은 토마토들의 인접한 곳에 있는 익지 않은 토마토들은 익은 토마토의 영향을 받아 익게 된다. 하나의 토마토의 인접한 곳은 왼쪽, 오른쪽, 앞, 뒤 네 방향에 있는 토마토를 의미한다. 대각선 방향에 있는 토마토들에게는 영향을 주지 못하며, 토마토가 혼자 저절로 익는 경우는 없다고 가정한다. 철수는 창고에 보관된 토마토들이 며칠이 지나면 다 익게 되는지, 그 최소 일수를 알고 싶어 한다.
+ +토마토를 창고에 보관하는 격자모양의 상자들의 크기와 익은 토마토들과 익지 않은 토마토들의 정보가 주어졌을 때, 며칠이 지나면 토마토들이 모두 익는지, 그 최소 일수를 구하는 프로그램을 작성하라. 단, 상자의 일부 칸에는 토마토가 들어있지 않을 수도 있다.
+첫 줄에는 상자의 크기를 나타내는 두 정수 M,N이 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M,N ≤ 1,000 이다. 둘째 줄부터는 하나의 상자에 저장된 토마토들의 정보가 주어진다. 즉, 둘째 줄부터 N개의 줄에는 상자에 담긴 토마토의 정보가 주어진다. 하나의 줄에는 상자 가로줄에 들어있는 토마토의 상태가 M개의 정수로 주어진다. 정수 1은 익은 토마토, 정수 0은 익지 않은 토마토, 정수 -1은 토마토가 들어있지 않은 칸을 나타낸다.
+ +토마토가 하나 이상 있는 경우만 입력으로 주어진다.
+여러분은 토마토가 모두 익을 때까지의 최소 날짜를 출력해야 한다. 만약, 저장될 때부터 모든 토마토가 익어있는 상태이면 0을 출력해야 하고, 토마토가 모두 익지는 못하는 상황이면 -1을 출력해야 한다.
+6 4 +0 0 0 0 0 0 +0 0 0 0 0 0 +0 0 0 0 0 0 +0 0 0 0 0 1 ++
6 4 +0 -1 0 0 0 0 +-1 0 0 0 0 0 +0 0 0 0 0 0 +0 0 0 0 0 1 ++
6 4 +1 -1 0 0 0 0 +0 -1 0 0 0 0 +0 0 0 0 -1 0 +0 0 0 0 -1 1 ++
5 5 +-1 1 0 0 0 +0 -1 -1 -1 0 +0 -1 -1 -1 0 +0 -1 -1 -1 0 +0 0 0 0 0 ++
2 2 +1 -1 +-1 1 ++
8 ++
-1 ++
6 ++
14 ++
0 ++
우리는 스마트폰을 사용하면서 여러 가지 앱(App)을 실행하게 된다. 대개의 경우 화면에 보이는 ‘실행 중’인 앱은 하나뿐이지만 보이지 않는 상태로 많은 앱이 '활성화'되어 있다. 앱들이 활성화 되어 있다는 것은 화면에 보이지 않더라도 메인 메모리에 직전의 상태가 기록되어 있는 것을 말한다. 현재 실행 중이 아니더라도 이렇게 메모리에 남겨두는 이유는 사용자가 이전에 실행하던 앱을 다시 불러올 때에 직전의 상태를 메인 메모리로부터 읽어 들여 실행 준비를 빠르게 마치기 위해서이다.
+ +하지만 스마트폰의 메모리는 제한적이기 때문에 한번이라도 실행했던 모든 앱을 활성화된 채로 메인 메모리에 남겨두다 보면 메모리 부족 상태가 오기 쉽다. 새로운 앱을 실행시키기 위해 필요한 메모리가 부족해지면 스마트폰의 운영체제는 활성화 되어 있는 앱들 중 몇 개를 선택하여 메모리로부터 삭제하는 수밖에 없다. 이러한 과정을 앱의 ‘비활성화’라고 한다.
+ +메모리 부족 상황에서 활성화 되어 있는 앱들을 무작위로 필요한 메모리만큼 비활성화 하는 것은 좋은 방법이 아니다. 비활성화된 앱들을 재실행할 경우 그만큼 시간이 더 필요하기 때문이다. 여러분은 이러한 앱의 비활성화 문제를 스마트하게 해결하기 위한 프로그램을 작성해야 한다
+ +현재 N개의 앱, A1, ..., AN이 활성화 되어 있다고 가정하자. 이들 앱 Ai는 각각 mi 바이트만큼의 메모리를 사용하고 있다. 또한, 앱 Ai를 비활성화한 후에 다시 실행하고자 할 경우, 추가적으로 들어가는 비용(시간 등)을 수치화 한 것을 ci 라고 하자. 이러한 상황에서 사용자가 새로운 앱 B를 실행하고자 하여, 추가로 M 바이트의 메모리가 필요하다고 하자. 즉, 현재 활성화 되어 있는 앱 A1, ..., AN 중에서 몇 개를 비활성화 하여 M 바이트 이상의 메모리를 추가로 확보해야 하는 것이다. 여러분은 그 중에서 비활성화 했을 경우의 비용 ci의 합을 최소화하여 필요한 메모리 M 바이트를 확보하는 방법을 찾아야 한다.
+입력은 3줄로 이루어져 있다. 첫 줄에는 정수 N과 M이 공백문자로 구분되어 주어지며, 둘째 줄과 셋째 줄에는 각각 N개의 정수가 공백문자로 구분되어 주어진다. 둘째 줄의 N개의 정수는 현재 활성화 되어 있는 앱 A1, ..., AN이 사용 중인 메모리의 바이트 수인 m1, ..., mN을 의미하며, 셋째 줄의 정수는 각 앱을 비활성화 했을 경우의 비용 c1, ..., cN을 의미한다
+ +단, 1 ≤ N ≤ 100, 1 ≤ M ≤ 10,000,000이며, 1 ≤ m1, ..., mN ≤ 10,000,000을 만족한다. 또한, 0 ≤ c1, ..., cN ≤ 100이고, M ≤ m1 + m2 + ... + mN이다.
+필요한 메모리 M 바이트를 확보하기 위한 앱 비활성화의 최소의 비용을 계산하여 한 줄에 출력해야 한다.
+5 60 +30 10 20 35 40 +3 0 3 5 4 ++
6 ++
It is very easy to produce the various traversals of a binary tree, however this problem requires you to produce the tree from the traversals. Specifically, given the pre-order and in-order traversals of a binary tree (not necessarily a binary search tree), reconstruct, if possible, the original tree.
+ +For instance, the following tree will produce the traversals shown
+ ++ E + / \ + D F + / \ + B G + / \ \ +A C I + / \ + H K + / + J + +Preorder : EDBACFGIHKJ +Inorder : ABCDEFGHIJK + +Postorder: ACBDHJKIGFE+
Input will consist of representations of several trees, each on a single line, and terminated by a #. Each line will consist of two strings of up to 26 unique uppercase letters in the form
+ +<pre-order> <space> <in-order>.
+ +You can assume that the two strings will be permutations of each other.
+Output will consist of the post-order traversal of the reconstructed tree if possible, otherwise the words 'Invalid tree'.
+EDBACFGIHKJ ABCDEFGHIJK +# ++
ACBDHJKIGFE ++
Far outside of our universum, kids of a hyperspace creatures play the following game. They have a ”boomerang” toy that they can program and throw. Naturally, they want it to come back to the same location. To program it, they have a bunch of modules that they can install into it. Each module gives it power along a specific direction. For each module they install, they enter a non-zero distance that the toy will move along that direction (obviously, they do not have to install all of them in one game). Distance can be both positive and negative, where negative distance means that it travels in the opposite direction. After programming, they throw the boomerang. It travels thorugh the space in a funny way (it moves using modules simultaneously, until they are all out of power). Of course, they repeat the game many times.
+ +Modules can be reused. They would like to maximize their fun by using different modules. However, some of them might be useless, because it not possible to use them and make boomerang coming back to the same location. Please, help the kids to find such modules!
+The first line of the input contains two integers M and N separated by a space character (1 ≤ M ≤ 3000, 1 ≤ N ≤ 300). M is the number of modules, and N is the number of dimensions of the hyperspace. Each of the next M lines contain N real numbers separated by a space character that represent coordinates of a direction in N-dimenional space for the coresponding module. Modules are indexed by numbers 1 through M, in the order given in the input. Each coordinate is given with at most two decimal digits, and its absolute value is not grater than 105.
+In the first line of the output write one integer K, which is the number of ”useless” modules. In the next K lines write indices of those modules, one per line, in the same order as they appear in the input. Terminate each line with a newline character.
+4 3 +0 0 1 +1 0 2 +0 1 0 +1 0 1 ++
1 +3 ++
We give the following inductive definition of a “regular brackets” sequence:
+ +For instance, all of the following character sequences are regular brackets sequences:
+ ++(), [], (()), ()[], ()[()]+ +
while the following character sequences are not:
+ ++(, ], )(, ([)], ([(]+ +
Given a brackets sequence of characters a1a2...an, your goal is to find the length of the longest regular brackets sequence that is a subsequence of s. That is, you wish to find the largest m such that for indices i1, i2, . . . , im where 1 ≤ i1 < i2 < . . . < im ≤ n, ai1 ai2 . . . aim is a regular brackets sequence.
+The input test file will contain multiple test cases. Each input test case consists of a single line containing only the characters (, ), [, and ]; each input test will have length between 1 and 100, inclusive. The end-of-file is marked by a line containing the word “end” and should not be processed.
+For each input case, the program should print the length of the longest possible regular brackets subsequence on a single line.
+Given the initial sequence ([([]])], the longest regular brackets subsequence is [([])].
+((())) +()()() +([]]) +)[)( +([][][) +end ++
6 +6 +4 +0 +6 ++
상근이는 세계적인 소프트웨어 회사 기글에서 일한다. 이 회사의 가장 큰 특징은 자유로운 출퇴근 시간이다. 따라서, 직원들은 반드시 9시부터 6시까지 회사에 있지 않아도 된다.
+ +각 직원은 자기가 원할 때 출근할 수 있고, 아무때나 퇴근할 수 있다.
+ +상근이는 모든 사람의 출입카드 시스템의 로그를 가지고 있다. 이 로그는 어떤 사람이 회사에 들어왔는지, 나갔는지가 기록되어져 있다. 로그가 주어졌을 때, 현재 회사에 있는 모든 사람을 구하는 프로그램을 작성하시오.
+첫째 줄에 로그에 기록된 출입 기록의 수 n이 주어진다. (2 ≤ n ≤ 106) 다음 n개의 줄에는 출입 기록이 순서대로 주어지며, 각 사람의 이름이 주어지고 "enter"나 "leave"가 주어진다. "enter"인 경우는 출근, "leave"인 경우는 퇴근이다.
+ +회사에는 동명이인이 없으며, 대소문자가 다른 경우에는 다른 이름이다. 사람들의 이름은 알파벳 대소문자로 구성된 5글자 이하의 문자열이다.
+현재 회사에 있는 사람의 이름을 사전 순의 역순으로 한 줄에 한 명씩 출력한다.
+4 +Baha enter +Askar enter +Baha leave +Artem enter ++
Askar +Artem ++
회의가 끝났고, 이제 악수를 하는 시간이다. 모든 사람은 직사각형 탁자 하나의 한 면에 앉아있다.
+ +자리를 벗어나지 않고 악수를 하는 방법의 수는 총 몇 가지일까?
+ +각 사람들은 자신의 왼쪽이나 오른쪽에 있는 사람들과 악수를 할 수 있다. (안 할 수도 있다)
+첫째 줄에 회의에 참석한 사람의 수 n (1 ≤ n ≤ 10,000,000)이 주어진다.
+첫째 줄에 악수를 하는 방법의 수를 출력한다. 수가 매우 커질 수 있기 때문에, 마지막 자리만 출력한다.
+n=4인 경우에는 5가지 방법이 있다.
+4 ++
5 ++
Kiedy Hektor zajmował się realizacją projektu HektorJudge, jego kolega Wiktor uznał, że życie nie powinno składać się wyłącznie z siedzenia przy komputerze i wybrał się na wycieczkę w góry. Kiedy wieczorem dotarł do schroniska ze zdziwieniem odkrył, że nie tylko on wpadł na pomysł spędzenia weekendu w górach - schronisko było pełne turystów!
+ +W tej kryzysowej sytuacji kierownik schroniska był zmuszony zorganizować turystom nocleg na podłodze w głównej sali schroniska. Sala ma postać prostokąta złożonego z W*K kwadratowych pól ułożonych w prostokąt o wymiarach W wierszy na K kolumn. Każdy turysta zajmuje dokładnie dwa sąsiednie (albo w pionie albo w poziomie) pola. Ile turystów można maksymalnie ułożyć w sali o zadanych wymiarach tak, aby każde pole było zajęte maksymalnie przez jednego turystę? Wiktor, jako matematyk-informatyk natychmiast obliczył prawidłowy wynik.
+W pierwszej linii znajduje się liczba naturalna Z ( 1 <= Z <= 10 ) oznaczająca liczbę zestawów testowych. Następnie opisywane są kolejne zestawy.
+ +Opis pojedynczego zestawu testowego składa się z jednej linii zawierającej dwie oddzielone pojedynczą spacją dodatnie całkowite W i K (1 <= W, K <= 1000).
+Dla każdego zestawu testowego należy w osobnej linii wypisać maksymalną liczbę turystów którzy mogą jednocześnie przenocować w sali schroniska. Kolejność wypisywanych odpowiedzi musi odpowiadać kolejności zestawów na wejściu.
+3 +1 1 +2 2 +2 3 ++
0 +2 +3 ++
2차원 평면의 제 1사분면에 점이 무한개 찍혀있다. 점의 x, y좌표는 모두 양의 정수이다. 오른쪽 그림과 같이 대각선 순서로 점에 자연수를 할당할 수 있다.
각 점에 할당된 숫자는 점 숫자라고 부른다. (x,y)의 점 숫자는 #(x,y)로 나타낸다. 예를 들어, #(1,1) = 1, #(2,1) = 3, #(2,2) = 5, #(4,4) = 25 이다.
+ +두 점을 더하면, 각 좌표를 더한 값이 좌표인 점이된다. 즉, (a,b) + (c,d) = (a+c,b+d)이다. 모든 점 숫자는 점을 유일하게 결정하기 때문에, 두 점 숫자의 덧셈으로도 점 덧셈을 나타낼 수 있다. 예를 들어, (1,1)과 (2,2)를 더하는 것은 1+5로 나타낼 수 있다. (#(1,1)=1, #(2,2) = 5) 또, 그 결과는 13 (#(3,3) = 13)이 된다.
+ +점 숫자로 나타낸 두 점이 입력으로 주어졌을 때, 두 점을 더해, 결과를 점 숫자로 출력하는 프로그램을 작성하시오.
+첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 두 점 숫자가 주어진다. 점 숫자는 0보다 크고, 10,000보다 작다.
+각 테스트 케이스마다 입력으로 주어진 두 점 숫자의 합을 출력한다. 결과는 10,000보다 클 수도 있다.
+2 +1 5 +3 9 ++
13 +26 ++
KOI 사냥터에는 N 마리의 동물들이 각각 특정한 위치에 살고 있다. 사냥터에 온 사냥꾼은 일직선 상에 위치한 M 개의 사대(총을 쏘는 장소)에서만 사격이 가능하다. 편의상, 일직선을 x-축이라 가정하고, 사대의 위치 x1, x2, ..., xM은 x-좌표 값이라고 하자. 각 동물이 사는 위치는 (a1, b1), (a2, b2), ..., (aN, bN)과 같이 x,y-좌표 값으로 표시하자. 동물의 위치를 나타내는 모든 좌표 값은 양의 정수이다.
+ +사냥꾼이 가지고 있는 총의 사정거리가 L이라고 하면, 사냥꾼은 한 사대에서 거리가 L 보다 작거나 같은 위치의 동물들을 잡을 수 있다고 한다. 단, 사대의 위치 xi와 동물의 위치 (aj, bj) 간의 거리는 |xi-aj| + bj로 계산한다.
+ +예를 들어, 아래의 그림과 같은 사냥터를 생각해 보자. (사대는 작은 사각형으로, 동물의 위치는 작은 원으로 표시되어 있다.) 사정거리 L이 4라고 하면, 점선으로 표시된 영역은 왼쪽에서 세 번째 사대에서 사냥이 가능한 영역이다.
+ +사대의 위치와 동물들의 위치가 주어졌을 때, 잡을 수 있는 동물의 수를 출력하는 프로그램을 작성하시오.
+입력의 첫 줄에는 사대의 수 M (1 ≤ M ≤ 100,000), 동물의 수 N (1 ≤ N ≤ 100,000), 사정거리 L (1 ≤ L ≤ 1,000,000,000)이 빈칸을 사이에 두고 주어진다. 두 번째 줄에는 사대의 위치를 나타내는 M개의 x-좌표 값이 빈칸을 사이에 두고 양의 정수로 주어진다. 이후 N개의 각 줄에는 각 동물의 사는 위치를 나타내는 좌표 값이 x-좌표 값, y-좌표 값의 순서로 빈칸을 사이에 두고 양의 정수로 주어진다. 사대의 위치가 겹치는 경우는 없으며, 동물들의 위치가 겹치는 경우도 없다. 모든 좌표 값은 1,000,000,000보다 작거나 같은 양의 정수이다.
+출력은 단 한 줄이며, 잡을 수 있는 동물의 수를 음수가 아닌 정수로 출력한다.
+4 8 4 +6 1 4 9 +7 2 +3 3 +4 5 +5 1 +2 2 +1 4 +8 4 +9 4 ++
1 5 3 +3 +2 2 +1 1 +5 1 +4 2 +3 3 ++
6 ++
5 ++
괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고 부른다. 한 쌍의 괄호 기호로 된 “( )” 문자열은 기본 VPS 이라고 부른다. 만일 x 가 VPS 라면 이것을 하나의 괄호에 넣은 새로운 문자열 “(x)”도 VPS 가 된다. 그리고 두 VPS x 와 y를 접합(concatenation)시킨 새로운 문자열 xy도 VPS 가 된다. 예를 들어 “(())()”와 “((()))” 는 VPS 이지만 “(()(”, “(())()))” , 그리고 “(()” 는 모두 VPS 가 아닌 문자열이다.
+ +여러분은 입력으로 주어진 괄호 문자열이 VPS 인지 아닌지를 판단해서 그 결과를 YES 와 NO 로 나타내어야 한다.
+입력 데이터는 표준 입력을 사용한다. 입력은 T개의 테스트 데이터로 주어진다. 입력의 첫 번째 줄에는 입력 데이터의 수를 나타내는 정수 T가 주어진다. 각 테스트 데이터의 첫째 줄에는 괄호 문자열이 한 줄에 주어진다. 하나의 괄호 문자열의 길이는 2 이상 50 이하이다.
+출력은 표준 출력을 사용한다. 만일 입력 괄호 문자열이 올바른 괄호 문자열(VPS)이면 “YES”, 아니면 “NO”를 한 줄에 하나씩 차례대로 출력해야 한다.
+6 +(())()) +(((()())() +(()())((())) +((()()(()))(((())))() +()()()()(()()())() +(()((())()( ++
3 +(( +)) +())(() ++
NO +NO +YES +NO +YES +NO ++
NO +NO +NO ++
크로스 컨트리 달리기는 주자들이 자연적인 야외의 지형에 만들어진 코스를 달리는 운동 경기이다. 경주 코스는 일반적으로 4에서 12 킬로미터이며, 숲이나 넓은 땅을 통과하는 풀과 흙으로 된 지면과 언덕과 평평한 지형을 포함한다. 이 경기는 주자들의 개인성적을 매기고, 이를 가지고 팀의 점수를 계산한다.
+ +한 팀은 여섯 명의 선수로 구성되며, 팀 점수는 상위 네 명의 주자의 점수를 합하여 계산한다. 점수는 자격을 갖춘 팀의 주자들에게만 주어지며, 결승점을 통과한 순서대로 점수를 받는다. 이 점수를 더하여 가장 낮은 점수를 얻는 팀이 우승을 하게 된다. 여섯 명의 주자가 참가하지 못한 팀은 점수 계산에서 제외된다. 동점의 경우에는 다섯 번째 주자가 가장 빨리 들어온 팀이 우승하게 된다.
+ +예를 들어, 다음의 표를 살펴보자.
+ +| 등수 | +1 | +2 | +3 | +4 | +5 | +6 | +7 | +8 | +9 | +10 | +11 | +12 | +13 | +14 | +15 | +
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 팀 | +A | +B | +C | +C | +A | +C | +B | +D | +A | +A | +C | +A | +C | +C | +A | +
| 점수 | +1 | +n/a | +2 | +3 | +4 | +5 | +n/a | +n/a | +6 | +7 | +8 | +9 | +10 | +11 | +12 | +
팀 B 와 D 는 선수의 수가 여섯이 아니므로, 점수를 받을 수 없다. 팀 A 의 점수는 18 (1+4+6+7)이고, 팀 C 의 점수는 18 (2+3+5+8)이다. 이 경우 두 팀의 점수가 같으므로 다섯 번째로 결승점을 통과한 선수를 고려한다, A 팀의 다섯 번째 선수의 점수가 C 팀의 다섯 번째 선수의 점수보다 적으므로 A 팀이 우승팀이 된다.
+ +모든 선수들의 등수가 주어질 때, 우승팀을 구하는 프로그램을 작성하라. 각 팀의 참가 선수가 여섯보다 작으면 그 팀은 점수 계산에서 제외됨을 주의하라. 여섯 명 보다 많은 선수가 참가하는 팀은 없고, 적어도 한 팀은 참가 선수가 여섯이며, 모든 선수는 끝까지 완주를 한다고 가정한다.
+입력 데이터는 표준입력을 사용한다. 입력은 T 개의 테스트 케이스로 주어진다. 입력 파일의 첫 번째 줄에 테스트 케이스의 수를 나타내는 정수 T 가 주어진다. 두 번째 줄부터는 두 줄에 하나의 테스트 케이스에 해당하는 데이터가 주어진다. 각 테스트 케이스의 첫 번째 줄에는 하나의 정수 N (6 ≤ N ≤ 1,000)이 주어진다. 두 번째 줄에는 팀 번호를 나타내는 N 개의 정수 t1, t2, …, tN 이 공백을 사이에 두고 주어진다. 각 팀은 1 과 M(1 ≤ M ≤ 200)사이의 정수로 표현된다.
+출력은 표준출력을 사용한다. 하나의 테스트 케이스에 대한 우승팀의 번호를 한 줄에 출력한다.
+2 +15 +1 2 3 3 1 3 2 4 1 1 3 1 3 3 1 +18 +1 2 3 1 2 3 1 2 3 3 3 3 2 2 2 1 1 1 ++
1 +3 ++
1보다 큰 자연수 중에서 1과 자기 자신을 제외한 약수가 없는 자연수를 소수라고 한다. 예를 들어, 5는 1과 5를 제외한 약수가 없기 때문에 소수이다. 하지만, 6은 6 = 2 × 3 이기 때문에 소수가 아니다.
+ +골드바흐의 추측은 유명한 정수론의 미해결 문제로, 2보다 큰 모든 짝수는 두 소수의 합으로 나타낼 수 있다는 것이다. 이러한 수를 골드바흐 수라고 한다. 또, 짝수를 두 소수의 합으로 나타내는 표현을 그 수의 골드바흐 파티션이라고 한다. 예를 들면, 4 = 2 + 2, 6 = 3 + 3, 8 = 3 + 5, 10 = 5 + 5, 12 = 5 + 7, 14 = 3 + 11, 14 = 7 + 7이다. 10000보다 작거나 같은 모든 짝수 n에 대한 골드바흐 파티션은 존재한다.
+ +2보다 큰 짝수 n이 주어졌을 때, n의 골드바흐 파티션을 출력하는 프로그램을 작성하시오. 만약 가능한 n의 골드바흐 파티션이 여러 가지인 경우에는 두 소수의 차이가 가장 작은 것을 출력한다.
+첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고 짝수 n이 주어진다.
+각 테스트 케이스에 대해서 주어진 n의 골드바흐 파티션을 출력한다. 출력하는 소수는 작은 것부터 먼저 출력하며, 공백으로 구분한다.
+3 +8 +10 +16 ++
3 5 +5 5 +5 11 ++
임씨는 1950 년 한국전쟁으로 많은 손해를 본 사람들 중 하나다. 전쟁 통에 손해보지 않은 사람이 어디 있을까 만은 그는 6.25 가 일어나기 전만 해도 충청도 지방에 넓은 대지를 소유한 큰 부자였다. 전쟁이 나자 임씨는 땅문서와 값 나가는 것들만 챙겨서 일본으로 피난을 가지만 피난 중에 그만 땅문서를 잃어버리고 만다. 전쟁이 끝난 후에 임씨의 땅은 이미 다른 사람들의 논밭이 되어 있었고, 임씨는 땅을 되찾으려 했지만 문서가 없으니 생떼 쓰는 것과 다를 바 없었다. 이러다가 임씨는 길바닥에 나앉게 생겼다.
+ +이때, 임씨에게 좋은 생각이 떠올랐으니 바로 자신이 습관처럼 땅 깊숙이 뭔가 표식을 해놓았던 사실이다. 임씨는 한적할 때마다 자신의 논밭을 거닐다가 땅속 깊은 곳에 자신의 이름이 씌어진 옥구슬을 묻어놓았던 것이다. 즉, 어떤 지점에서 그의 이름이 적힌 옥구슬이 나온다면 그 지점은 예전에 임씨의 땅이었다는 것을 증명하는 것이다.
+ +임씨는 즉시 민사소송을 통해 자신의 땅을 찾고자 했고 논리적인 근거를 들어 옥구슬이 나오는 지점이 원래 자신의 땅의 한 지점이었다는 것을 주장하여 결국 담당판사를 설득하는 데에 성공하였다. 담당판사는 다음과 같은 판결을 내렸다. “ 6.25 이전의 개인소유 대지들은 99%가 남북, 동서 방향으로 평행한 직사각형 모양이었으므로, 임씨의 이름이 새겨진 옥구슬이 나오는 모든 지점을 포함하는 가장 작은 남북, 동서 방향으로 평행한 변을 갖는 직사각형의 대지를 임씨의 소유로 인정한다.” 임씨는 많은 손해를 보는 셈이지만 더 이상을 요구할 만한 근거가 없었기 때문에 이 판결을 따르기로 했다.
+ +임씨의 이름이 새겨진 옥구슬의 위치 N 개가 주어질 때에, 임씨에게 돌아갈 대지의 넓이를 계산하는 프로그램을 작성하시오. 단, 옥구슬의 위치는 2 차원 정수 좌표로 주어지고 옥구슬은 같은 위치에 여러 개가 발견될 수도 있으며, x 축의 양의방향을 동쪽, y 축의 양의방향을 북쪽이라고 가정한다.
+ +예를 들어 위와 같이 (2, 1), (3, 2), (5, 2), (3, 4) 네 점에서 옥구슬을 발견하였다면, 임씨에게 돌아갈 대지는 (2, 1), (5, 1), (2, 4), (5, 4)를 네 꼭짓점으로 하는 직사각형이며, 넓이는 (5 - 2) × (4 - 1) = 9 가 된다.
+첫째 줄에는 점의 개수 N (1 ≤ N ≤ 100,000) 이 주어진다. 이어지는 N 줄에는 각 점의 좌표가 두 개의 정수로 한 줄에 하나씩 주어진다. 각각의 좌표는 -10,000 이상 10,000 이하의 정수이다.
+첫째 줄에 N 개의 점을 둘러싸는 최소 크기의 직사각형의 넓이를 출력하시오.
+3 +20 24 +40 21 +10 12 ++
1 +15 13 ++
4 +2 1 +3 2 +5 2 +3 4 ++
360 ++
0 ++
9 ++
문자열을 입력으로 주면 문자열의 첫 글자와 마지막 글자를 출력하는 프로그램을 작성하시오.
+입력의 첫 줄에는 테스트 케이스의 개수 T(1 ≤ T ≤ 10)가 주어진다. 각 테스트 케이스는 한 줄에 하나의 문자열이 주어진다. 문자열은 알파벳 A~Z 대문자로 이루어지며 알파벳 사이에 공백은 없으며 문자열의 길이는 1000보다 작다.
+각 테스트 케이스에 대해서 주어진 문자열의 첫 글자와 마지막 글자를 연속하여 출력한다.
+3 +ACDKJFOWIEGHE +O +AB ++
AE +OO +AB ++
재귀 호출만 생각하면 신이 난다! 아닌가요?
+ +다음과 같은 재귀함수 w(a, b, c)가 있다.
+ ++if a <= 0 or b <= 0 or c <= 0, then w(a, b, c) returns: + 1 + +if a > 20 or b > 20 or c > 20, then w(a, b, c) returns: + w(20, 20, 20) + +if a < b and b < c, then w(a, b, c) returns: + w(a, b, c-1) + w(a, b-1, c-1) - w(a, b-1, c) + +otherwise it returns: + w(a-1, b, c) + w(a-1, b-1, c) + w(a-1, b, c-1) - w(a-1, b-1, c-1) ++ +
위의 함수를 구현하는 것은 매우 쉽다. 하지만, 그대로 구현하면 값을 구하는데 매우 오랜 시간이 걸린다. (예를 들면, a=15, b=15, c=15)
+ +a, b, c가 주어졌을 때, w(a, b, c)를 출력하는 프로그램을 작성하시오.
+입력은 세 정수 a, b, c로 이루어져 있으며, 한 줄에 하나씩 주어진다. 입력의 마지막은 -1 -1 -1로 나타내며, 세 정수가 모두 -1인 경우는 입력의 마지막을 제외하면 없다.
+입력으로 주어진 각각의 a, b, c에 대해서, w(a, b, c)를 출력한다.
+1 1 1 +2 2 2 +10 4 6 +50 50 50 +-1 7 18 +-1 -1 -1 ++
w(1, 1, 1) = 2 +w(2, 2, 2) = 4 +w(10, 4, 6) = 523 +w(50, 50, 50) = 1048576 +w(-1, 7, 18) = 1 ++
LCS(Longest Common Subsequence, 최장 공통 부분 수열)문제는 두 수열이 주어졌을 때, 모두의 부분 수열이 되는 수열 중 가장 긴 것을 찾는 문제이다.
+ +예를 들어, ACAYKP와 CAPCAK의 LCS는 ACAK가 된다.
+첫째 줄과 둘째 줄에 두 문자열이 주어진다. 문자열은 알파벳 대문자로만 이루어져 있으며, 최대 1000글자로 이루어져 있다.
+첫째 줄에 입력으로 주어진 두 문자열의 LCS의 길이를 출력한다.
+ACAYKP +CAPCAK ++
4 ++
LCS(Longest Common Subsequence, 최장 공통 부분 수열)문제는 두 수열이 주어졌을 때, 모두의 부분 수열이 되는 수열 중 가장 긴 것을 찾는 문제이다.
+ +예를 들어, ACAYKP와 CAPCAK의 LCS는 ACAK가 된다.
+첫째 줄과 둘째 줄에 두 문자열이 주어진다. 문자열은 알파벳 대문자로만 이루어져 있으며, 최대 1000글자로 이루어져 있다.
+첫째 줄에 입력으로 주어진 두 문자열의 LCS의 길이를, 둘째 줄에 LCS를 출력한다.
+ +LCS가 여러 가지인 경우에는 아무거나 출력하고, LCS의 길이가 0인 경우에는 둘째 줄을 출력하지 않는다.
+ACAYKP +CAPCAK ++
4 +ACAK ++
해빈이는 패션에 매우 민감해서 한번 입었던 옷들의 조합을 절대 다시 입지 않는다. 예를 들어 오늘 해빈이가 안경, 코트, 상의, 신발을 입었다면, 다음날은 바지를 추가로 입거나 안경대신 렌즈를 착용하거나 해야한다. 해빈이가 가진 의상들이 주어졌을때 과연 해빈이는 알몸이 아닌 상태로 며칠동안 밖에 돌아다닐 수 있을까?
+첫째 줄에 테스트 케이스가 주어진다. 테스트 케이스는 최대 100이다.
+ +모든 문자열은 1이상 20이하의 알파벳 소문자로 이루어져있으며 같은 이름을 가진 의상은 존재하지 않는다.
+각 테스트 케이스에 대해 해빈이가 알몸이 아닌 상태로 의상을 입을 수 있는 경우를 출력하시오.
+첫 번째 테스트 케이스는 headgear에 해당하는 의상이 hat, turban이며 eyewear에 해당하는 의상이 sunglasses이므로 (hat), (turban), (sunglasses), (hat,sunglasses), (turban,sunglasses)로 총 5가지 이다.
+2 +3 +hat headgear +sunglasses eyewear +turban headgear +3 +mask face +sunglasses face +makeup face ++
5 +3 ++
상근이는 어렸을 때부터 항상 프로그래밍 캠프를 개최하고 싶어했다. 캠프를 개최할 때 가장 필요한 것은 장소이다. 지금까지 많은 사람들이 장소의 벽에 가로막혀 캠프를 주최할 수가 없었다.
+ +상근이는 프로그래밍 캠프 전용 부지를 구입해 모든 사람의 장소 문제를 해결하려고 한다. 서울의 땅값은 매년 기하급수적으로 비싸진다. 예를 들어, 땅 i의 현재 땅값이 Li인 경우, t년이 지난 후 땅값은 2×(Li)t가 된다. 모든 땅값은 서로 다르다. 상근이는 일년에 땅 하나만 구입할 수 있다.
+ +상근이가 구입하려고 하는 땅의 현재 가격이 주어졌을 때, 모든 땅을 구입하는데 드는 비용의 최솟값을 구하는 프로그램을 작성하시오. 상근이는 돈을 5×106 억원 가지고 있고, 1년이 지난 후부터 땅을 구입하기 시작한다. (누가 돈을 훔쳐가거나, 다른데에 돈을 쓰거나, 돈을 벌거나 하는 상황은 발생하지 않는다)
+ +예를 들어, 땅의 가격이 7억, 2억, 10억일 때, 각 땅을 연속한 해에 구입하는데 필요한 금액은 다음과 같다.
+ +(2×7) + (2×22) + (2×103) = 2022억
+첫째 줄에 테스트 케이스의 개수 T (1 ≤ T ≤ 10)가 주어진다. 각 테스트 케이스는 땅값 Li가 한 줄에 하나씩 주어지며, 0은 테스트 케이스의 마지막을 나타낸다. 각 테스트 케이스마다 상근이가 구매하려는 땅의 개수는 40개를 넘지 않는다. 모든 단위는 억단위이다.
+각 테스트 케이스마다 모든 땅을 구입하는데 필요한 최소 금액을 출력한다. 만약, 돈이 부족해서 땅을 모두 구입하지 못하는 경우에는 "Too expensive"를 출력한다. (단위: 억)
+3 +7 +2 +10 +0 +20 +29 +31 +0 +42 +41 +40 +37 +20 +0 ++
134 +17744 +Too expensive ++
꿍은 수능에 응시하고 있었는데 어느덧 4교시 탐구영역 시간이 되었다. 그런데 탐구영역은 다른 영역과 다르게 자기가 응시할 과목만 고르고 응시하지 않는 과목은 바닥에 버리도록 되어있다. 꿍이 응시하지 않는 과목을 골라 뽑아내던 중 문득 궁금한게 생겼다. 만약 탐구영역 시험지가 아래와 같이 전체 12쪽으로 되어 있었다고 하자.
+ +그렇다면 1쪽과 12쪽은 한 면에, 2쪽과 11쪽이 한면에, ... 6쪽과 7쪽이 한면에 인쇄되어 있고 1,2,11,12쪽이 한 장, 3,4,9,10쪽이 한 장, 5,6,7,8이 한 장 이다. 그래서 만약 꿍이 2쪽이 인쇄된 종이 한 장을 바닥에 버렸을 때, 그 종이에 인쇄된 나머지 쪽, 즉 사라진 페이지들은 1,11,12쪽이다.
+ +꿍이 탐구영역을 응시할 동안 여러분들은 한 쪽의 페이지만으로 사라진 나머지의 페이지들을 찾아주어라.
+각 테스트 케이스에 대해 두가지 정수 N,P가 주어진다. 4의 배수인 N(4 ≤ N ≤ 1000)은 탐구영역의 전체 페이지 수이며, P(1 ≤ P ≤ N)는 선택된 한 페이지다. 입력의 마지막은 하나의 0만 주어진다.
+각 테스트 케이스에 대해 사라진 페이지들을 오름차순으로 출력한다.
+12 2 +12 9 +8 3 +0 ++
1 11 12 +3 4 10 +4 5 6 ++
오른쪽 그림과 같이 삼각형이 나선 모양으로 놓여져 있다. 첫 삼각형은 정삼각형으로 변의 길이는 1이다. 그 다음에는 다음과 같은 과정으로 정삼각형을 계속 추가한다. 나선에서 가장 긴 변의 길이를 k라 했을 때, 그 변에 길이가 k인 정삼각형을 추가한다.
파도반 수열 P(N)은 나선에 있는 정삼각형의 변의 길이이다. P(1)부터 P(10)까지 첫 10개 숫자는 1, 1, 1, 2, 2, 3, 4, 5, 7, 9이다.
+ +N이 주어졌을 때, P(N)을 구하는 프로그램을 작성하시오.
+첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, N이 주어진다. (1 ≤ N ≤ 100)
+각 테스트 케이스마다 P(N)을 출력한다.
+2 +6 +12 ++
3 +16 ++
어떤 숫자 n이 자신을 제외한 모든 약수들의 합과 같으면, 그 수를 완전수라고 한다.
+ +예를 들어 6은 6 = 1 + 2 + 3 으로 완전수이다.
+ +n이 완전수인지 아닌지 판단해주는 프로그램을 작성하라.
+입력은 테스트 케이스마다 한 줄 간격으로 n이 주어진다. (2 < n < 100,000)
+ +입력의 마지막엔 -1이 주어진다.
+테스트케이스 마다 한줄에 하나씩 출력해야 한다.
+ +n이 완전수라면, n을 n이 아닌 약수들의 합으로 나타내어 출력한다(예제 출력 참고).
+ +이때, 약수들은 오름차순으로 나열해야 한다.
+ +n이 완전수가 아니라면 n is NOT perfect. 를 출력한다.
+6 +12 +28 +-1 ++
6 = 1 + 2 + 3 +12 is NOT perfect. +28 = 1 + 2 + 4 + 7 + 14 ++
두 자연수 A, B가 주어졌을 때, A ≤ x ≤ B를 만족하는 모든 x에 대해 x를 이진수로 표현했을 때 1의 개수의 합을 구하는 프로그램을 작성하시오.
+ +즉, f(x) = x를 이진수로 표현 했을 때 1의 개수라고 정의하고, 아래 식의 결과를 구하자.
+ +\[\sum_{x=A}^{B}{f(x)}\]
+첫 줄에 두 자연수 A, B가 주어진다. (1 ≤ A ≤ B ≤ 1016)
+1의 개수를 세어 출력한다.
+2 12 ++
21 ++
돌 게임은 두 명이서 즐기는 재밌는 게임이다.
+ +탁자 위에 돌 N개가 있다. 상근이와 창영이는 턴을 번갈아가면서 돌을 가져가며, 돌은 1개 또는 3개 가져갈 수 있다. 마지막 돌을 가져가는 사람이 게임을 이기게 된다.
+ +두 사람이 완벽하게 게임을 했을 때, 이기는 사람을 구하는 프로그램을 작성하시오. 게임은 상근이가 먼저 시작한다.
+첫째 줄에 N이 주어진다. (1 ≤ N ≤ 1000)
+상근이가 게임을 이기면 SK를, 창영이가 게임을 이기면 CY을 출력한다.
+5 ++
SK ++
N-Queen 문제는 크기가 N × N인 체스판 위에 퀸 N개를 서로 공격할 수 없게 놓는 문제이다.
+ +N이 주어졌을 때, 퀸을 놓는 방법의 수를 구하는 프로그램을 작성하시오.
+첫째 줄에 N이 주어진다. (1 ≤ N < 15)
+첫째 줄에 퀸 N개를 서로 공격할 수 없게 놓는 경우의 수를 출력한다.
+8 ++
92 ++
A permutation of a set is a sequence in which every element of the set occurs exactly once. For example, the sequence 3201 is a permutation of the set {0, 1, 2, 3}, where the number 3 appears first, the number 2 appears second, the number 0 appears third and the number 1 appears last in the sequence. We can order the permutations of a set in a “lexicon” by looking at the first position where the permutations are different. For example, the permutation 3201 appears before 3210 in the lexicon, because at the first position where the permutations are different, the first permutation has a 0 whereas the second permutation has a bigger number, namely 1.
+ +Given an integer n (1 ≤ n ≤ 13) and a permutation of the set { 0, 1, 2, …, n – 1 }, determine the position of the permutation in the lexicon.
+ +Example: For n = 4, the lexicon has 24 entries and looks like this:
+ +0123, 0132, 0213, 0231, 0312, 0321, 1023, 1032, 1203, … , 3201, 3210.
+ +The permutation 3 2 0 1 appears at position 23.
+ +The task is to determine at which position a given permutation appears in the lexicon.
+ +Hint: If n is close to 13, it will be too slow to construct the entire lexicon, because the size of the lexicon is 1 × 2 × 3 × ... × n.
+The input consists of the following two lines:
+ +The output contains a single integer value, which is the position of the permutation in the lexicon.
+4 +3 2 0 1 ++
5 +0 1 2 4 3 ++
9 +8 7 5 6 4 0 3 1 2 ++
13 +4 0 6 7 2 12 11 8 10 3 1 9 5 ++
23 ++
2 ++
362141 ++
1932053504 ++
상근이는 문자열에 폭발 문자열을 심어 놓았다. 폭발 문자열이 폭발하면 그 문자는 문자열에서 사라지며, 남은 문자열은 합쳐지게 된다.
+ +폭발은 다음과 같은 과정으로 진행된다.
+ +상근이는 모든 폭발이 끝난 후에 어떤 문자열이 남는지 구해보려고 한다. 남아있는 문자가 없는 경우가 있다. 이때는 "FRULA"를 출력한다.
+ +폭발 문자열은 같은 문자를 두 개 이상 포함하지 않는다.
+첫째 줄에 문자열이 주어진다. 문자열의 길이는 1보다 크거나 같고, 1,000,000보다 작거나 같다.
+ +둘째 줄에 폭발 문자열이 주어진다. 길이는 1보다 크거나 같고, 36보다 작거나 같다.
+ +두 문자열은 모두 알파벳 소문자와 대문자, 숫자 0, 1, ..., 9로만 이루어져 있다.
+첫째 줄에 모든 폭발이 끝난 후 남은 문자열을 출력한다.
+mirkovC4nizCC44 +C4 ++
12ab112ab2ab +12ab ++
mirkovniz ++
FRULA ++