본문 바로가기

알고리즘/구름톤 챌린지

(20)
[구름톤 챌린지] 3주차 12일차 발전기 문제 구름 심시티를 하고 있는 플레이어는 한 변의 길이가 $N$인 정사각형 모양의 마을 $M$을 만들고 있다. $r$번째 행, $c$번째 열에 해당하는 칸에는 숫자 $M_{r, c}$가 적혀 있다. $M_{r, c}$는 $0$또는 $1$ 중 하나이며, 각 숫자가 의미하는 바는 아래와 같다. $0$이면 아무것도 없는 칸이다. $1$이면 집이 있는 칸이다. 마을에 있는 집에 전력을 공급하기 위해선 그 집에 발전기를 설치하거나, 상하좌우로 인접한 집 중 하나가 전력을 공급받고 있으면 된다. 플레이어가 모든 집에 전력을 공급하기 위해서 설치해야 할 발전기의 최소 개수를 구해보자. 입력 첫째 줄에 마을의 크기 $N$이 주어진다. 다음 $N$개의 줄에는 마을의 상태를 나타내는 $N$개의 숫자가 공백을 두고 주어진다..
[구름톤 챌린지] 3주차 11일차 통증 (2) 문제 구름-그라운드 게임에는 통증이라는 시스템이 있다. 통증 수치가 높다면 게임에서 승리하기 어려워지므로, 아이템을 적절히 사용해 통증 수치를 $0$으로 유지하는 것이 중요하다. 게임 안에는 통증 수치를 감소시켜 주는 아이템이 $2$종류가 있다. 아이템의 이름은 $A, B$이고, 각 아이템을 사용 시 각각 $A_p, B_p$만큼 통증 수치를 감소시켜 준다. 각 아이템은 원하는 만큼 획득할 수 있다. 플레이어는 적과의 전투에서 피해를 입어 현재 $N$의 통증 수치를 가지고 있다. 플레이어가 통증 수치를 $0$으로 줄이기 위해 필요한 아이템의 최소 개수를 구해보자. 단, 사용했을 때 통증 수치가 $0$보다 작아지는 아이템은 사용할 수 없음에 유의하시오. 입력 첫째 줄에 플레이어의 통증 수치를 나타내는 정수 ..
[구름톤 챌린지] 2주차 10일차 GameJam 문제 플레이어는 GameJam에 참가했다. GameJam은 현장에서 즉석으로 팀을 꾸려 게임의 규칙을 만든 뒤, 생각한 규칙을 코드로 옮겨서 게임을 만들어내는 대회이다. 플레이어가 속한 팀은 보드로 즐길 수 있는 간단한 보드게임을 만들었다. 게임의 진행 방법과 규칙은 다음과 같다. 게임은 한 변의 길이가 $N$인 격자 보드 위에서 진행한다. 보드는 한 변의 길이가 $1$인 $N^2$개의 칸으로 나누어져 있다. 각 칸에는 에 해당하는 방향으로 칸만큼 한 칸씩 이동하라는 지시가 적혀있다. 플레이하는 사람은 처음에 보드의 칸 중 하나에 말을 올려놓는다. 각 칸에 적힌 지시대로 말을 이동한다. 만약 이동 중에 보드 밖으로 나가게 된다면 반대쪽의 첫 번째 칸으로 이동한다. 예를 들어 맨 오른쪽 칸에서 오른쪽으로 ..
[구름톤 챌린지] 2주차 9일차 폭탄 구현하기 (2) 문제 $N \times N$ 크기의 정사각형 모양의 땅이 있다. 땅을 $1 \times 1$ 크기의 작은 땅으로 나누었을 때, 위에서 $y$번째, 왼쪽에서 $x$번째에 위치한 땅의 좌표를 $(y, x)$로 나타낸다. 추가로 모든 땅에는 폭탄 값이라고 하는 값이 있다. 모든 폭탄 값의 초기 값은 $0$이다. $K$개의 폭탄을 이 땅 위에 떨어트리려고 한다. 어떤 $1 \times 1$ 크기의 땅 위에 폭탄을 떨어트리게 되면 폭탄이 떨어진 땅과, 그 땅에 상하좌우로 인접한 칸의 폭탄 값에 영향을 끼친다. 폭탄 값이 변하는 정도는 땅의 상태에 따라 다르다. $N \times N$ 크기의 영역 밖이거나, 땅의 상태가 # 이라면 폭탄 값은 변하지 않는다. 땅의 상태가 0 이라면 폭탄 값은 $1$ 증가한다. 땅의 ..
[구름톤 챌린지] 2주차 8일차 통증 문제 구름-그라운드 게임에는 통증이라는 시스템이 있다. 통증 수치가 높다면 게임에서 승리하기 어려워지므로, 아이템을 적절히 사용해 통증 수치를 $0$으로 유지하는 것이 중요하다. 게임 안에는 통증 수치를 감소시켜 주는 아이템이 $3$종류가 있다. 아이템의 이름은 bandage, medicine, painkiller 이고, 각 아이템을 사용 시 $1, 7, 14$만큼 통증 수치를 감소시켜 준다. 각 아이템은 원하는 만큼 획득할 수 있다. 플레이어는 적과의 전투에서 피해를 입어 현재 $N$의 통증 수치를 가지고 있다. 플레이어가 통증 수치를 $0$으로 줄이기 위해 필요한 아이템의 최소 개수를 구해보자. 단, 사용했을 때 통증 수치가 $0$보다 작아지는 아이템은 사용할 수 없음에 유의하시오. 입력 첫째 줄에 ..
[구름톤 챌린지] 2주차 7일차 구름 찾기 깃발 문제 구름 찾기 게임은 한 변의 길이가 $N$인 격자 모양의 게임판 $M$에서 진행하는 게임이다. 게임판의 일부 칸에는 구름이 숨겨져 있고, 게임판에 숨겨진 모든 구름의 위치를 찾으면 게임에서 승리할 수 있다. 구름 찾기 게임의 제작자인 플레이어는 조금 더 쉽게 구름을 찾을 수 있도록 도와주는 깃발을 게임판 위에 설치하려고 한다. 깃발은 구름이 없는 칸이면서, 상하좌우와 대각선으로 인접한 여덟 칸 중 구름이 하나 이상 있는 칸에만 설치할 수 있다. 이렇게 설치한 깃발에는 인접한 여덟 칸 중 구름이 있는 칸의 개수에 해당하는 값이 적힌다. 플레이어는 깃발을 세울 수 있는 모든 칸에 깃발을 세워두었다. 문득, 플레이어는 깃발 중 값이 $K$인 깃발이 몇 개나 있는지가 궁금해졌다. 여러분이 플레이어를 대신해 ..
[구름톤 챌린지] 2주차 6일차 문자열 나누기 문제 길이가 $N$인 문자열 $S$가 주어진다. 플레이어는 문자열 $S$를 서로 겹치지 않는 $3$개의 부분문자열로 나누려고 한다. 부분문자열은 모두 길이가 $1$ 이상이어야 하며, 원래 문자열에서 연속해야 한다. 문자열을 나누는 방법에 따라 플레이어는 점수를 얻을 수 있다. 점수는 다음 과정에 따라 계산된다. 문자열 $S$를 위 조건에 따라 나눴을 때, 등장하는 모든 부분문자열을 중복 제거하고 사전순으로 정렬한 결과를 $P$라고 한다. 나누어진 $3$개의 문자열이 각각 $P$에서 $i, j, k$번째로 등장하는 문자열이라면, 얻을 수 있는 점수는 $i+j+k$이다. 예를 들어, abcd 라는 문자열을 $3$개의 부분문자열로 나누는 방법은 {a, b, cd}, {a, bc, d}, {ab, c, d} 의..
[구름톤 챌린지] 1주차 5일차 이진수 정렬 문제 $N$개의 10진수 정수가 주어진다. 플레이어에게 정수를 그냥 정렬하는 것은 너무 쉽기 때문에, 아래 기준에 따라 정수를 정렬하기로 한다. 10진수 정수를 2진수로 나타냈을 때, 2진수에 포함된 $1$의 개수를 기준으로 내림차순 정렬한다. $1$의 개수가 같다면, 원래 10진수를 기준으로 내림차순 정렬한다. 플레이어가 정수를 잘 정렬했을 때, 앞에서 $K$번째에 위치한 수는 어떤 수가 될 지 구해보자. 입력 첫째 줄에 주어지는 정수의 수 $N$과 플레이어가 찾으려는 정수의 위치 $K$가 공백을 두고 주어진다. 둘째 줄에 정수 $a_1, a_2, \cdots, a_N$이 공백을 두고 주어진다. $1 \leq N \leq 500\ 000$ $1 \leq K \leq N$ $1 \leq a_i \leq ..