본문 바로가기

전체 글

(87)
나무 재테크 [백준 16235번] 문제 https://www.acmicpc.net/problem/16235 16235번: 나무 재테크 부동산 투자로 억대의 돈을 번 상도는 최근 N×N 크기의 땅을 구매했다. 상도는 손쉬운 땅 관리를 위해 땅을 1×1 크기의 칸으로 나누어 놓았다. 각각의 칸은 (r, c)로 나타내며, r은 가장 위에서부터 www.acmicpc.net 내 풀이 문제에서 하라는 대로 구현하면 된다. 그러나 여기서 중요하게 여겨야 할 것은 봄과 여름을 묶어서 구현하고, 가을과 겨울을 묶어서 구현하는 것이다. 봄과 여름을 묶은 이유는, 봄을 구현하고 여름을 구현해도 여름은 죽은 나무가 원래 자신이 있던 칸에 양분으로 추가되기 때문에 다른 칸에 영향을 전혀 미치지 않기 때문이다. 그러나 가을은 나무가 번식하여 다른 칸에 영향을 주..
경사로 [백준 14890번] 문제 https://www.acmicpc.net/problem/14890 14890번: 경사로 첫째 줄에 N (2 ≤ N ≤ 100)과 L (1 ≤ L ≤ N)이 주어진다. 둘째 줄부터 N개의 줄에 지도가 주어진다. 각 칸의 높이는 10보다 작거나 같은 자연수이다. www.acmicpc.net 내 풀이 [3, 2, 1, 1, 1,]처럼 생긴 도로가 있다고 해보자. 이 도로를 [[3], [2], [1, 1, 1]]와 같이 생긴 temp로 만들었다. temp를 돌면서 temp[i-1]과 temp[i] 안의 숫자가 몇 차이 나는지 확인하였다. 1 차이가 나면 check를 사용하여 방문 체크를 해주었다. 방문 체크를 하는 이유는 경사로가 이미 있는 곳에 또 경사로를 놓지 않게 하기 위함이다. check[i] <..
연구소 3 [백준 17142번] 문제 https://www.acmicpc.net/problem/17142 17142번: 연구소 3 인체에 치명적인 바이러스를 연구하던 연구소에 승원이가 침입했고, 바이러스를 유출하려고 한다. 바이러스는 활성 상태와 비활성 상태가 있다. 가장 처음에 모든 바이러스는 비활성 상태이고 www.acmicpc.net 내 풀이 삼성 시험에서는 itertools를 쓸 수 없다고 해서 dfs로 순열을 구현하였다. dfs로 활성 바이러스가 될 수 있는 애들 M개를 골랐다. M개를 골랐으면, 그 애들을 활성 바이러스로 하여 bfs로 빈칸에 활성 바이러스가 얼마나 퍼지는지 구하였다. 바이러스가 퍼질 때 중요한 것은 비활성 바이러스의 존재이다. 비활성 바이러스는 활성 바이러스와 만나면 활성 바이러스가 되어 빈칸에 바이러스를 ..
마법사 상어와 파이어볼 [백준 20056번] 문제 https://www.acmicpc.net/problem/20056 20056번: 마법사 상어와 파이어볼 첫째 줄에 N, M, K가 주어진다. 둘째 줄부터 M개의 줄에 파이어볼의 정보가 한 줄에 하나씩 주어진다. 파이어볼의 정보는 다섯 정수 ri, ci, mi, si, di로 이루어져 있다. 서로 다른 두 파이어볼의 위치 www.acmicpc.net 내 풀이 grid를 []로 구성된 2차원 배열로 선언하였다. (따지고 보면 모양이 독특한 3차원 배열이다. 길이가 가변적인 3차원 배열..?) 먼저 파이어볼을 이동시키는 것을 구현하였다. 하나의 좌표에 여러 개의 파이어볼이 있을 수 있으므로, 여러 개의 파이어볼이 있는지 파악하고 전부 이동시켜주는 것이 중요하다. 이동시킨 후, 2개 이상의 파이어볼이 있..
이차원 배열과 연산 [백준 17140번] 문제 https://www.acmicpc.net/problem/17140 17140번: 이차원 배열과 연산 첫째 줄에 r, c, k가 주어진다. (1 ≤ r, c, k ≤ 100) 둘째 줄부터 3개의 줄에 배열 A에 들어있는 수가 주어진다. 배열 A에 들어있는 수는 100보다 작거나 같은 자연수이다. www.acmicpc.net 내 풀이 원래 C 연산을 따로 구현하였으나, list(zip(*arr))을 사용하면 전치가 된다는 것을 배우고, R 연산만으로 해결하였다. R을 열심히 구현하였다. 배열의 한 행씩 받아서 각 숫자가 몇 개 있는지 구한 후 튜플을 사용하여 저장하였다. 그리고 sort로 정렬하였다. 만약 한 행의 길이가 100보다 길면 잘라내었고, max_len도 100으로 갱신하였다. 그렇게 새로..
미세먼지 안녕! [백준 17144번] 문제 https://www.acmicpc.net/problem/17144 17144번: 미세먼지 안녕! 미세먼지를 제거하기 위해 구사과는 공기청정기를 설치하려고 한다. 공기청정기의 성능을 테스트하기 위해 구사과는 집을 크기가 R×C인 격자판으로 나타냈고, 1×1 크기의 칸으로 나눴다. 구사 www.acmicpc.net 내 풀이 문제에서 말하는 순서대로 구현하였다. 미세먼지를 먼저 확산시키고 -> 공기청정기를 작동시켰다. 풀 때 가장 중요한 것은, 중간중간 코드가 맞는지 결과를 프린트해보는 것이다. 공기청정기를 구현할 때에는 좀 더 머리를 써볼까 생각도 했지만, 짧은 시간 안에 빨리 푸는 연습을 하느라 그냥 생각나는 대로 풀었다. 공기청정기가 닿는 미세먼지들의 좌표를 배열에 다 담고, 그 배열에서 한 칸씩..
드래곤 커브 [백준 15685번] 문제 https://www.acmicpc.net/problem/15685 15685번: 드래곤 커브 첫째 줄에 드래곤 커브의 개수 N(1 ≤ N ≤ 20)이 주어진다. 둘째 줄부터 N개의 줄에는 드래곤 커브의 정보가 주어진다. 드래곤 커브의 정보는 네 정수 x, y, d, g로 이루어져 있다. x와 y는 드래곤 커 www.acmicpc.net 내 풀이 전형적인 규칙 찾기 문제이다. 드래곤 커브가 만들어질 때 방향을 구해보면 규칙을 찾을 수 있다. 문제에 나온 예시로 규칙을 찾아보자. 0세대 : 0 1세대 : 0 1 2세대 : 0 1 2 1 3세대 : 0 1 2 1 2 3 2 1 4세대 : 0 1 2 1 2 3 2 1 2 3 0 3 2 3 2 1 k세대에 새로 만들어지는 방향은 k-1세대의 방향들을 뒤집은..
감시 [백준 15683번] 문제 https://www.acmicpc.net/problem/15683 15683번: 감시 스타트링크의 사무실은 1×1크기의 정사각형으로 나누어져 있는 N×M 크기의 직사각형으로 나타낼 수 있다. 사무실에는 총 K개의 CCTV가 설치되어져 있는데, CCTV는 5가지 종류가 있다. 각 CCTV가 감 www.acmicpc.net 내 풀이 문제를 딱 봤을 때 모든 경우의 수를 구해야 하기 때문에 dfs를 사용해야 할 것 같았다. 그래서 먼저 CCTV의 번호와 위치를 cctv 리스트에 저장하였다. CCTV는 번호에 따라서 감시하는 방향과 방향의 수가 다르다. 그래서 각 CCTV가 감시할 수 있는 모든 방향을 딕셔너리에 저장하였다. 그래고 dfs를 사용하여 모든 경우의 수를 구해주었다. 여기서 중요한 것은 tm..