반응형

구현 9

[백준 2564] 경비원 C++

문제 백준 2564 경비원 C++ 2564번: 경비원 첫째 줄에 블록의 가로의 길이와 세로의 길이가 차례로 주어진다. 둘째 줄에 상점의 개수가 주어진다. 블록의 가로의 길이와 세로의 길이, 상점의 개수는 모두 100이하의 자연수이다. 이어 한 줄 www.acmicpc.net 풀이 이해는 바로 했는데 구현을 어떻게 할까 고민을 많이 했던 문제 최단 경로가 맞은편인지, 시계인지, 반시계인지 다 확인을 해줘야 하는데 if 문 덕지덕지 써가면서 각 케이스마다 모두 처리해 주기는 너무 싫었다. 그래서 좌상단을 0으로 기준을 잡고 시계방향(북->동->남->서)으로 각각의 좌표를 RoundPos로 명명하고 RoundPos를 잡아주었다. 이렇게 좌표를 잡아주면 문제 예시의 RoundPos는 다음과 같다. 1번 상점 좌..

알고리즘/백준 2023.05.30

[백준 13459] 구슬 탈출 C++

문제 백준 13459 구슬 탈출 C++ 13459번: 구슬 탈출 첫 번째 줄에는 보드의 세로, 가로 크기를 의미하는 두 정수 N, M (3 ≤ N, M ≤ 10)이 주어진다. 다음 N개의 줄에 보드의 모양을 나타내는 길이 M의 문자열이 주어진다. 이 문자열은 '.', '#', 'O', 'R', 'B' www.acmicpc.net 풀이 BFS를 사용한다. 방문 체크를 [빨간색 공 x좌표][빨간색 공 y좌표][파란색 공 x좌표][파란색 공 y좌표]로 4차원 배열을 이용한다. 공을 4방향(위, 아래, 왼쪽, 오른쪽)으로 굴려주면서, 방문하지 않았을 때에만 큐에 넣어주고 도착지점에 도달할 수 있을 때까지 반복한다. 그전에 이미 10번 이상 시도했다면 조건에 부합하지 않으므로 0을 출력한다. 소스 코드 1 2 3..

알고리즘/백준 2022.08.10

[백준 20055] 컨베이어 벨트 위의 로봇 C++

문제 백준 20055 컨베이어 벨트 위의 로봇 C++ 20055번: 컨베이어 벨트 위의 로봇 길이가 N인 컨베이어 벨트가 있고, 길이가 2N인 벨트가 이 컨베이어 벨트를 위아래로 감싸며 돌고 있다. 벨트는 길이 1 간격으로 2N개의 칸으로 나뉘어져 있으며, 각 칸에는 아래 그림과 같이 1부 www.acmicpc.net 풀이 구현 / 시뮬레이션 문제입니다. 생각보다 코드 구현과정이 어려웠는데, 문제 난이도인 골드 5보다는 어려웠습니다. (골드 4~3급은 된다고 생각) 문제에서 주어진 조건에 따라 1. 벨트가 한 칸 회전한다. 2. 벨트 위의 로봇이 움직일 수 있으면 움직인다. 3. 올리는 칸의 내구도가 0이 아니면 로봇을 올린다. 4. 내구도가 0인 칸이 K개 이상이면 종료한다. 의 4가지 과정을 순서대로..

알고리즘/백준 2022.07.12

[백준 14890] 경사로 C++

문제 백준 14890 경사로 C++ 14890번: 경사로 첫째 줄에 N (2 ≤ N ≤ 100)과 L (1 ≤ L ≤ N)이 주어진다. 둘째 줄부터 N개의 줄에 지도가 주어진다. 각 칸의 높이는 10보다 작거나 같은 자연수이다. www.acmicpc.net 풀이 이해 자체는 어렵지 않은 문제였다. 1. 이차원 배열에 값을 넣어주고 2. 행 / 열을 검사하면서 경사로를 놓을 수 있는지 확인한다. 경사로를 놓을 수 있는지 확인하는 과정은 다음과 같다. 1. 현재 값과 다음 값의 차를 구한다. 2-1) 차가 0인 경우 : 평지이므로 다음 구역으로 넘어간다. 2-2) 차가 1인 경우 : 현재가 더 높다. 따라서 내리막길이 필요하므로 다음 구역부터 그 다음 구역으로 가면서 내리막길을 설치할 수 있는 지 확인한다...

알고리즘/백준 2022.07.04

[백준 16235] 나무 재테크 C++

문제 백준 16235 나무 재테크 C++ 16235번: 나무 재테크 부동산 투자로 억대의 돈을 번 상도는 최근 N×N 크기의 땅을 구매했다. 상도는 손쉬운 땅 관리를 위해 땅을 1×1 크기의 칸으로 나누어 놓았다. 각각의 칸은 (r, c)로 나타내며, r은 가장 위에서부터 www.acmicpc.net 풀이 가장 싫어하는 부류인 빡구현 문제입니다,,, 주어진 조건대로 차근차근 구현하였습니다. 소스 코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 6..

알고리즘/백준 2021.12.01

[백준 2573] 빙산 C++

문제 백준 2573 빙산 C++ 2573번: 빙산 첫 줄에는 이차원 배열의 행의 개수와 열의 개수를 나타내는 두 정수 N과 M이 한 개의 빈칸을 사이에 두고 주어진다. N과 M은 3 이상 300 이하이다. 그 다음 N개의 줄에는 각 줄마다 배열의 각 행을 www.acmicpc.net 풀이 일반적인 bfs 문제입니다. 1. melt() 함수로 주변에 바닷물 만큼 빙산의 크기를 감소시켜줍니다. 2. 빙산이 모두 0이 됐다면 0을 출력해줍니다. 3. 빙산이 있다면 (0이 아닌 숫자가 있다면) bfs를 통해 빙산의 개수를 세어줍니다. 4. 빙산의 개수가 2개 이상이라면, 걸린 시간 t를 출력합니다. 소스 코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 ..

알고리즘/백준 2021.10.31

[백준 17144] 미세먼지 안녕! C++

문제 백준 17144 미세먼지 안녕! C++ 17144번: 미세먼지 안녕! 미세먼지를 제거하기 위해 구사과는 공기청정기를 설치하려고 한다. 공기청정기의 성능을 테스트하기 위해 구사과는 집을 크기가 R×C인 격자판으로 나타냈고, 1×1 크기의 칸으로 나눴다. 구사 www.acmicpc.net 풀이 빡구현 문제입니다. 문제 이해 자체가 어렵진 않았지만, 구현과정에서 시간이 꽤 소요되었습니다. index 에러를 주의하며 풀었습니다. 1. 입력을 받고 공기청정기의 위치를 저장합니다. (위 / 아래에 나눠서 저장) 2. 먼지를 확산시킵니다. 2-1. 해당칸에 먼지가 있다면 상하좌우로 확산시켜 temp 배열에 저장합니다. 확산할 수 없다면 확산하지 않습니다. 2-2. 먼지는 동시에 확산하므로 temp 배열에 저장시..

알고리즘/백준 2021.10.29

[백준 14499] 주사위 굴리기 C++

문제 백준 14499 주사위 굴리기 14499번: 주사위 굴리기 첫째 줄에 지도의 세로 크기 N, 가로 크기 M (1 ≤ N, M ≤ 20), 주사위를 놓은 곳의 좌표 x y(0 ≤ x ≤ N-1, 0 ≤ y ≤ M-1), 그리고 명령의 개수 K (1 ≤ K ≤ 1,000)가 주어진다. 둘째 줄부터 N개의 줄에 지도 www.acmicpc.net 풀이 map에 관한 입력을 받고, 주어진 입력에 따라 주사위를 동서남북으로 움직이며 조건을 수행합니다. 소스 코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50..

알고리즘/백준 2021.10.13

[백준 14719] 빗물 C++

문제 백준 14719 C++ 14719번: 빗물 첫 번째 줄에는 2차원 세계의 세로 길이 H과 2차원 세계의 가로 길이 W가 주어진다. (1 ≤ H, W ≤ 500) 두 번째 줄에는 블록이 쌓인 높이를 의미하는 0이상 H이하의 정수가 2차원 세계의 맨 왼쪽 위치 www.acmicpc.net 풀이 블록을 검은색, 빗물이 차는 곳을 파란색이라고 하면 예시 1 양 쪽 끝에 검은 영역이 있을 때, 그 사이의 모든 영역이 파란 영역이 됩니다. 예시 2 마찬가지로 양쪽 끝에 검은 영역이 있으면, 그 사이의 모든 영역이 파란 영역이 됩니다. 따라서 map을 전부 순회하면서, 블록과 블록 사이의 영역을 모두 구해줍니다. 소스 코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 2..

알고리즘/백준 2021.10.07
반응형