본문 바로가기

알고리즘/백준56

[백준 16509] 장군 (C++) A. 문제설명 www.acmicpc.net/problem/16509 16509번: 장군 오랜만에 휴가를 나온 호근이는 문득 동아리방에 있는 장기가 하고 싶어졌다. 하지만 장기를 오랫동안 하지 않은 탓인지 예전에는 잘 쓰던 상을 제대로 쓰는 것이 너무 힘들었다. 호근이를 위해 www.acmicpc.net 문제에 대한 자세한 설명은 링크 참조 1. 10*9 크기의 장기판이 존재 2. 장기게임에서의 상의 이동은 아래와 같이 8방향으로 가능함 3. 물론, 실제 장기게임 규칙과 같이 해당 이동동선에 말이 존재하면 이동할 수 없음 4. 왕과 상의 위치가 각각 주어졌을 때, 상이 최소이동으로 왕을 잡는 경우를 구하라 B. 접근법 BFS 장기말의 이동의 최단동선 중 왕을 잡는 경우를 찾기 위해 BFS로 구현하였다. 일.. 2020. 10. 12.
[백준 1938] 통나무 옮기기 (C++) A. 문제설명 www.acmicpc.net/problem/1938 1938번: 통나무 옮기기 첫째 줄에 주어진 평지의 한 변의 길이 N이 주어진다. (4 2020. 10. 10.
[백준 2151] 거울 설치 (C++) A. 문제설명 www.acmicpc.net/problem/2151 2151번: 거울 설치 첫째 줄에 집의 크기 N (2 ≤ N ≤ 50)이 주어진다. 다음 N개의 줄에는 N개의 문자로 집에 대한 정보가 주어진다. ‘#’는 문이 설치된 곳으로 항상 두 곳이며, ‘.’은 아무 것도 없는 것으로 빛은 �� www.acmicpc.net 문제에 대한 자세한 설명은 링크 참조 1. N*N 크기의 땅이 존재 2. 각 배열의 엔트리에는 '.', '!', '#', '*'가 주어짐 3. '*'는 벽으로 빛이 이동하지 못하고, '.'은 아무것도 없는 공간으로 빛이 이동가능하며 '#'은 문으로 빛이 들어오는 지점임 4. 여기서 '!'는 거울이 있는 지점인데 거울을 45도 비스듬하게 놓아 빛의 이동경로를 바꿔줌 5. 주어진 배.. 2020. 10. 9.
[백준 16946] 벽 부수고 이동하기 4 (C++) A. 문제설명 www.acmicpc.net/problem/16946 16946번: 벽 부수고 이동하기 4 N×M의 행렬로 표현되는 맵이 있다. 맵에서 0은 이동할 수 있는 곳을 나타내고, 1은 이동할 수 없는 벽이 있는 곳을 나타낸다. 한 칸에서 다른 칸으로 이동하려면, 두 칸이 인접해야 한다. 두 칸이 � www.acmicpc.net 문제에 대한 자세한 설명은 링크 참조 1. N*M크기의 배열이 존재 2. 해당 배열 안에는 1:벽, 또는 0:빈칸이 입력으로 주어짐 3. 각 벽이 있는 공간에서 인접한 공간으로 벽을 부수고 이동하려고 함 4. 여기서 벽은 맨 처음 하나만 부술 수 있고, 이동가능한 공간은 빈 공간만 5. 이렇게 해서 각각의 벽인 공간에 총 이동할 수 있는 거리를 구할 것 B. 접근법 Has.. 2020. 10. 8.
[백준 2174] 로봇 시뮬레이션 (C++) A. 문제설명 www.acmicpc.net/problem/2174 2174번: 로봇 시뮬레이션 첫째 줄에 두 정수 A, B가 주어진다. 다음 줄에는 두 정수 N, M이 주어진다. 다음 N개의 줄에는 각 로봇의 초기 위치(x, y좌표 순) 및 방향이 주어진다. 다음 M개의 줄에는 각 명령이 명령을 내리는 순 www.acmicpc.net 문제에 대한 자세한 설명은 링크 참조 1. 가로 A, 세로 B 크기의 아래와 같은 땅이 존재 2. N개의 로봇의 초기위치 x, y 그리고 현재 바라보는 방향이 각각 주어짐 3. 그리고 M번의 명령이 주어지는데, 각각 해당 명령을 수행하는 로봇의 번호, 명령의 종류, 반복 횟수가 주어짐 4. 여기서 명령의 종류는 아래와 같음 L: 로봇이 향하고 있는 방향을 기준으로 왼쪽으로 .. 2020. 10. 8.
[백준 19235] 모노미노도미노 (C++) A. 문제설명 www.acmicpc.net/problem/19235 19235번: 모노미노도미노 모노미노도미노는 아래와 같이 생긴 보드에서 진행되는 게임이다. 보드는 빨간색 보드, 파란색 보드, 초록색 보드가 그림과 같이 붙어있는 형태이다. 게임에서 사용하는 좌표 (x, y)에서 x는 행, www.acmicpc.net 문제에 대한 자세한 설명은 링크 참조 1. 아래와 같은 빨간/파란/초록색 보드가 붙어있는 형태의 배열판이 존재 2. 그리고 게임에서는 아래와 같은 형태의 1*1, 2*1, 1*2 크기의 블록을 사용 3. 게임의 규칙은 1번의 그림과 같이 빨간색에 먼저 블록이 배치되고, 해당 도형이 테트리스의 규칙과 같이 파란/초록색 영역으로 우선 이동 4. 도형은 빨간색 영역에 배치된 모양을 유지하여 횡/.. 2020. 9. 30.
[백준 3987] 보이저 1호 (C++) A. 문제설명 www.acmicpc.net/problem/3987 3987번: 보이저 1호 첫째 줄에 시그널을 보내는 방향을 출력한다. (U: 위, R: 오른쪽, D: 아래, L: 왼쪽) 만약, 방향이 여러 가지가 존재한다면, U, R, D, L의 순서 중 앞서는 것을 출력한다. 둘째 줄에는 가장 긴 시간을 출� www.acmicpc.net 문제에 대한 자세한 설명은 링크 참조 1. 아래와 같은 N*M 배열판이 존재 2. 배열 내 각 엔트리에는 C(블랙홀), .(빈 공간), / \(행성)이 각각 존재 3. 보이저 1호에서 처음 출발위치에서 시그널을 동서남북의 방향으로 보내 전파시키려고 함 4. 여기서, 시그널이 / \(행성)을 만나면 아래 그림과 같이 방향을 전환하게 됨 5. 그 외에 빈공간을 만나면 방.. 2020. 9. 30.
[백준 19238] 스타트 택시 (C++) A. 문제설명 www.acmicpc.net/problem/19238 19238번: 스타트 택시 첫 줄에 N, M, 그리고 초기 연료의 양이 주어진다. (2 ≤ N ≤ 20, 1 ≤ M ≤ N2, 1 ≤ 초기 연료 ≤ 500,000) 연료는 무한히 많이 담을 수 있기 때문에, 초기 연료의 양을 넘어서 충전될 수도 있다. 다 www.acmicpc.net 문제에 대한 자세한 설명은 링크 참조 1. 아래와 같은 N*N 배열판이 존재(흰색이 빈칸, 회색이 벽) 2. 택시 운전자가 M명의 승객을 각각의 목적지에 데려다 주려함 3. M명의 승객들 중, 태울 손님을 고르는 기준은 가장 최단거리, 만약 최단거리인 손님이 여러명이면 최상위 행을 우선으로, 그래도 여러명이면 최좌측 열을 우선으로 선택 4. M명의 승객은 동.. 2020. 9. 21.
[백준 19237] 어른 상어 (C++) A. 문제설명 www.acmicpc.net/problem/19237 19237번: 어른 상어 첫 줄에는 N, M, k가 주어진다. (2 ≤ N ≤ 20, 2 ≤ M ≤ N2, 1 ≤ k ≤ 1,000) 그 다음 줄부터 N개의 줄에 걸쳐 격자의 모습이 주어진다. 0은 빈칸이고, 0이 아닌 수 x는 x번 상어가 들어있는 칸을 의미 www.acmicpc.net 문제에 대한 자세한 설명은 링크 참조 1. 아래와 같은 N*N 배열판 위에 M마리의 상어가 주어짐 2. 각 상어는 1~M번 번호로 구분되어 초기 위치와 방향이 주어짐 3. 맨 처음에는 모든 상어가 자신의 위치에 자신의 냄새를 뿌림 4. 그 후 1초마다 모든 상어가 동시에 상하좌우로 인접한 칸 중 하나로 이동하고, 자신의 냄새를 그 칸에 뿌림 5. 냄새는.. 2020. 9. 21.
[백준 17822] 원판 돌리기 (C++) A. 문제설명 www.acmicpc.net/problem/17822 17822번: 원판 돌리기 반지름이 1, 2, ..., N인 원판이 크기가 작아지는 순으로 바닥에 놓여있고, 원판의 중심은 모두 같다. 원판의 반지름이 i이면, 그 원판을 i번째 원판이라고 한다. 각각의 원판에는 M개의 정수가 적혀 www.acmicpc.net 문제에 대한 자세한 설명은 링크 참조 1. 반지름이 각기 다른 N개의 원판이 주어짐. 각 원판에는 M개의 정수가 적혀짐 2. 각 원판은 1,2, ... ,N번째 원판까지 안쪽부터 바깥쪽으로 끼워짐 3. 각 원판의 엔트리는 (i, j)와 같이 나타나며, 그 규칙은 아래와 같음 (i, 1)은 (i, 2), (i, M)과 인접하다. (i, M)은 (i, M-1), (i, 1)과 인접하다.. 2020. 9. 9.
[백준 17779] 게리맨더링 2 (C++) A. 문제설명 https://www.acmicpc.net/problem/17779 17779번: 게리맨더링 2 재현시의 시장 구재현은 지난 몇 년간 게리맨더링을 통해서 자신의 당에게 유리하게 선거구를 획정했다. 견제할 권력이 없어진 구재현은 권력을 매우 부당하게 행사했고, 심지어는 시의 이름�� www.acmicpc.net 문제에 대한 자세한 설명은 링크 참조 1. N*N 배열 크기의 땅이 존재 2. 각 배열의 엔트리를 5개의 지역구로 나누려고 함 3. 선거구를 나누는 방법은 아래와 같음 기준점 (x, y)와 경계의 길이 d1, d2를 정한다. (d1, d2 ≥ 1, 1 ≤ x < x+d1+d2 ≤ N, 1 ≤ y-d1 < y < y+d2 ≤ N) 다음 칸은 경계선이다. (x, y), (x+1, y-1).. 2020. 9. 5.
[백준 17142] 연구소 3 (C++) A. 문제설명 https://www.acmicpc.net/problem/17142 17142번: 연구소 3 인체에 치명적인 바이러스를 연구하던 연구소에 승원이가 침입했고, 바이러스를 유출하려고 한다. 바이러스는 활성 상태와 비활성 상태가 있다. 가장 처음에 모든 바이러스는 비활성 상태이고 www.acmicpc.net 문제에 대한 자세한 설명은 링크 참조 1. N*N 배열크기 땅이 존재 2. 각 배열의 엔트리에는 빈칸, 벽, 바이러스가 존재 3. 여기서 주어진 바이러스 중, M개를 활성화 시키려고 한다. 즉, 전체 바이러스가 |V|개라면 M개가 활성화 바이러스, |V|-M개가 비활성화 바이러스가 됨 4. 이제 활성화된 바이러스들을 시작으로 주변에 퍼뜨리는데, 바이러스는 벽을 제외한 칸에 바이러스를 퍼뜨림 .. 2020. 9. 2.
[백준 3055] 탈출 (C++) A. 문제설명 https://www.acmicpc.net/problem/3055 3055번: 탈출 사악한 암흑의 군주 이민혁은 드디어 마법 구슬을 손에 넣었고, 그 능력을 실험해보기 위해 근처의 티떱숲에 홍수를 일으키려고 한다. 이 숲에는 고슴도치가 한 마리 살고 있다. 고슴도치는 제�� www.acmicpc.net 문제에 대한 자세한 설명은 링크 참조 1. R*C 배열크기 땅이 존재 2. 각 배열의 엔트리에는 빈칸, 물, 비버굴, 돌이 존재 3. 고슴도치는 주어진 위치에서 물과 돌을 피해 빈칸을 이동하며 비버굴에 가고자 함 4. 물이 고슴도치를 덮치기 전에 가장 빨리 비버굴에 갈 수 있는 시간을 구하라 B. 접근법 Double BFS 일반적인 배열 주변 영역 전파 문제에서는 BFS를 쉽게 적용할 수 있.. 2020. 8. 27.
[백준 2529] 부등호 (C++) A. 문제설명 https://www.acmicpc.net/problem/2529 2529번: 부등호 여러분은 제시된 부등호 관계를 만족하는 k+1 자리의 최대, 최소 정수를 첫째 줄과 둘째 줄에 각각 출력해야 한다. 단 아래 예(1)과 같이 첫 자리가 0인 경우도 정수에 포함되어야 한다. 모든 입력� www.acmicpc.net 문제에 대한 자세한 설명은 링크 참조 1. k개의 나열된 부등호가 존재 2. 그 사이에 해당 조건을 만족하는 k+1개의 숫자를 넣고자 한다. 3. k+1의 숫자는 {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} 4. 여기서, 구해지는 숫자 중 제일 작은 수와 큰 수를 구하라 B. 접근법 DFS DFS와 가지치기를 이용하면 이 문제를 적은 시간 비용으로 풀 수 있다. 일반적.. 2020. 8. 25.
[백준 16197] 두 동전 (C++) A. 문제설명 https://www.acmicpc.net/problem/16197 16197번: 두 동전 N×M 크기의 보드와 4개의 버튼으로 이루어진 게임이 있다. 보드는 1×1크기의 정사각형 칸으로 나누어져 있고, 각각의 칸은 비어있거나, 벽이다. 두 개의 빈 칸에는 동전이 하나씩 놓여져 있고, �� www.acmicpc.net 문제에 대한 자세한 설명은 링크 참조 1. N*M 게임판과 두 동전이 주어짐 2. 게임판에는 빈 공간, 동전, 벽이 있을 수 있음 3. 게임판을 조작하여 두 동전을 모두 상하좌우 같은 방향으로 움직임 4. 여기서, 동전의 이동조건은 아래와 같음 동전이 이동하려는 칸이 벽이면, 동전은 이동하지 않는다. 동전이 이동하려는 방향에 칸이 없으면 동전은 보드 바깥으로 떨어진다. 그 외.. 2020. 8. 18.