본문 바로가기

반응형

전체 글

(168)
[모의 SW 역량테스트] 1952. 수영장 [모의 SW 역량테스트] 수영장 1. 이해하기 수영장에서 판매하고 있는 이용권은 4 종류이다. 1일 이용권, 1달 이용권, 3달 이용권, 1년 이용권 이용권의 요금과 각 달의 이용 계획이 주어질 때, 이용 가능한 가장 적은 비용을 찾는 문제. 완전탐색 문제. 2. 구현하기 해당 달이 되었을 때, 각 이용권을 이용할 때의 비용을 각각 구해본다. 그리고 이 때의 최소값을 구한다. int solve(int index, int sum) { if(index >= 12) return sum; int ret = MAX; ret = min(ret,solve(index+1,sum+fee[0]*plan[index])); ret = min(ret,solve(index+1,sum+fee[1])); ret = min(ret,s..
[모의 SW 역량테스트] 1949. 등산로 조성 [모의 SW 역량테스트] 등산로 조성 1. 이해하기 등산로를 만드는 규칙은 다음과 같다. 등산로는 가장 높은 봉우리에서 시작해야 한다. 등산로는 높은 지형에서 낮은 지형으로 가로 또는 세로 방향으로 연결이 되어야 한다. 긴 등산로를 만들기 위해 딱 한 곳을 정해서 최대 K깊이만큼 지형을 깎는 공사를 할 수 있다. 가장 긴 등산로를 찾아 그 길이를 출력. 시뮬레이션 문제. 2. 구현하기 등산로의 가장 높은 봉우리를 구한다. 여러개가 있을 수 있기 때문에 배열로 구한다. 이때, K만큼 깎는 공사를 한다고 하더라도 시작하는 위치는 바뀌지 않는다. vector get_max_hill() { vector ret; int max_value = 0; for(int i = 0; i < N; i++) { for(int ..
[백준] 17142번 연구소 3 17142번 연구소 3 1. 이해하기 현재 비활성인 바이러스 중 M개를 선택해서 활성 상태로 바꾼다. 바이러스는 상하좌우로 인접한 빈 칸으로 동시에 복제가 된다. 연구소는 빈 칸, 벽, 바이러스로 이뤄져있다. 바이러스는 벽을 통과하지 못한다. 활성 바이러스가 비활성 바이러스가 있는 칸으로 가면 비활성 바이러스가 활성으로 변한다. 연구소의 모든 빈 칸에 바이러스를 퍼뜨리는 최소 시간을 구하는 문제. 모든 바이러스에 대해 구해보는 완전탐색 문제. 2. 구현하기 활성화 시킨 M개의 바이러스에 대해 퍼지는 시간을 구한다. void bfs(vector live_virus) { memset(virus_time,-1,sizeof(virus_time)); queue q; int size = live_virus.size..
[백준] 17140번 이차원 배열과 연산 17140번 이차원 배열과 연산 1. 이해하기 처음은 크기가 3x3인 배열로 시작한다. 1초가 지날때마다 배열에 연산이 적용된다. R 연산: 배열의 모든 행에 대해서 정렬을 수행한다. 행의 개수 >= 열의 개수인 경우에 적용된다. C 연산: 배열의 모든 열에 대해서 정렬을 수행한다. 행의 개수 < 열의 개수인 경우에 적용된다. 정렬하는 방법은 다음과 같다. 각각의 수가 몇 번 나왔는지 센다. 수의 등장 횟수가 커지는 순으로, 이것이 여러가지면 수가 커지는 순으로 정렬한다. 배열에 정렬된 결과를 다시 넣어준다. 넣어줄때 수와 등장 횟수를 모두 넣으며, 순서는 수가 먼저이다. 행 또는 열의 크기가 100을 넘어가는 경우에는 처음 100개를 제외한 나머지는 버린다. (r,c)에 들어있는 값이 k가 되기 위한 ..
[백준] 17143번 낚시왕 17143번 낚시왕 1. 이해하기 격자판의 각 칸에는 상어가 최대 한 마리 들어있을 수 있다. 1초 동안 일어나는 일은 다음과 같다. 낚시왕이 오른쪽으로 한 칸 이동한다. 낚시왕이 있는 열에 있는 상어 중에서 땅과 제일 가까운 상어를 잡는다. 상어를 잡으면 격자판에서 잡은 상어가 사라진다. 상어가 이동한다. 상어가 이동하려고 하는 칸이 격자판의 경계인 경우에는 방향을 반대로 바꿔서 이동한다. 상어가 이동을 마친 후에 한 칸에 상어가 두 마리 이상 있을 때, 크기가 가장 큰 상어가 나머지 상어를 모두 잡아먹는다. 2. 구현하기 이 문제의 핵심 포인트는 상어의 움직임이다. 상어가 움직여서 원래 있던 자리까지 오는데의 거리는 가로 방향으로 움직였다면 2(R-1), 세로 방향으로 움직였다면 2*(C-1)이다. ..
[백준] 17144번 미세먼지 안녕! 17144번 미세먼지 안녕! 1. 이해하기 공기청정기는 항상 왼쪽 열에 설치되어 있고, 크기는 두 행을 차지한다. 공기청정기가 설치되어 있지 않은 칸에 미세먼지가 있다. 이때 1초 동안 일어나는 일 미세먼지가 확산된다. 확산은 미세먼지가 있는 모든 칸에서 동시에 일어난다. 미세먼지는 인접한 네 방향으로 확산된다. 인접한 방향에 공기청정기가 있거나, 칸이 없으면 그 방향으로는 확산이 일어나지 않는다. 확산되는 양은 (미세먼지 양)/5이고 소수점은 버린다. 그 자리에 남은 미세먼지 양은 (미세먼지 양)-(미세먼지 양/5)*(확산된 방향의 개수) 이다. 공기청정기가 작동한다. 공기청정기에서는 바람이 나온다. 위쪽 공기청정기의 바람은 반시계방향으로 순환하고, 아래쪽 공기청정기의 바람은 시계방향으로 순환한다. 바..
[백준] 16236번 아기 상어 16236번 아기 상어 1. 이해하기 가장 처음에 아기 상어의 크기는 2이고, 1초에 상하좌우로 인접한 한 칸씩 이동할 수 있다. 아기 상어는 자산의 크기보다 큰 물고기가 있는 칸은 지나갈 수 없다. 아기 상어는 자신의 크기보다 작은 물고기만 먹을 수 있다. 크기가 같은 물고기는 먹을 수 없지만 지나갈 수는 있다. 아기 상어가 어디로 이동할지 결정하는 방법 더 이상 먹을 수 있는 물고기가 없을 때 아기 상어는 엄마 상어에게 도움을 요청한다. 먹을 수 있는 물고기가 1마리라면, 그 물고기를 먹으러 간다. 먹을 수 있는 물고기가 1마리보다 많다면, 거리가 가장 가까운 물고기를 먹으러 간다. 거리는 아기 상어가 있는 칸에서 물고기가 있는 칸으로 이동할 때, 지나야 하는 칸의 개수의 최솟값이다. 거리가 가까운 ..
[백준] 16235번 나무 재테크 16235번 나무 재테크 1. 이해하기 처음에 모든 칸에는 5만큼의 양분이 들어있다. 사계절마다 일어나는 일이 다르다. 봄에는 나무가 자신의 나이만큼 양분을 먹고, 나이가 1 증가한다. 이때 나무는 심어져있는 칸의 양분만 먹을 수 있다. 칸에 여러 개의 나무가 있다면, 나이가 어린 나무부터 양분을 먹는다. 땅에 양분이 자신의 나이만큼 이상이 없다면 나무는 죽는다. 여름에는 봄에 죽은 나무가 양분으로 변한다. 죽은 나무마다 나이를 2로 나눈 값이 나무가 있던 칸에 양분으로 추가된다. 소수점 아래는 버린다. 가을에는 나무가 번식한다. 번식하는 나무는 나이가 5의 배수이어야 한다. 번식은 인접한 8개의 칸에 나이가 1인 나무로 번식된다. 겨울에는 S2D2가 땅을 돌아다니면서 땅에 양분을 추가한다. 2. 구현하..