본문 바로가기

반응형

백준

(329)
[BOJ] 백준 2206 벽 부수고 이동하기 (Swift) 문제 https://www.acmicpc.net/problem/2206 2206번: 벽 부수고 이동하기 N×M의 행렬로 표현되는 맵이 있다. 맵에서 0은 이동할 수 있는 곳을 나타내고, 1은 이동할 수 없는 벽이 있는 곳을 나타낸다. 당신은 (1, 1)에서 (N, M)의 위치까지 이동하려 하는데, 이때 최단 경로 www.acmicpc.net 풀이 BFS로 풀 수 있는 문제입니다. 벽은 최대 1번 부수고 이동이 가능합니다. 방문 배열을 2차원 배열로 선언하는 것이 아닌, 벽을 한 번 부시고 방문했는지, 부시지 않고 방문했는지의 여부를 알 수 있도록 3차원 배열로 선언해주어야 합니다. BFS를 작성할 때, Queue에 다음과 같이 담아주었습니다. (y, x, 벽 부순 횟수, 몇 칸 이동) 현재 칸에서 다음 ..
[BOJ] 백준 16928 뱀과 사다리 게임 (Swift) 문제 https://www.acmicpc.net/problem/16928 16928번: 뱀과 사다리 게임 첫째 줄에 게임판에 있는 사다리의 수 N(1 ≤ N ≤ 15)과 뱀의 수 M(1 ≤ M ≤ 15)이 주어진다. 둘째 줄부터 N개의 줄에는 사다리의 정보를 의미하는 x, y (x < y)가 주어진다. x번 칸에 도착하면, y번 칸으 www.acmicpc.net 풀이 BFS로 풀이할 수 있는 문제입니다. 뱀과 사다리가 있기 때문에 해당 칸에 도착했을 시, 뱀이나 사다리가 있다면 이동시켜주어야 합니다. 저는 [Int: Int] 형태의 Dictionary를 사용해서 뱀과 사다리의 정보를 담아주었습니다. 그 이후 BFS 코드를 작성할 때, 현재 위치에서 주사위를 굴려 +1 ~ +6 으로 이동할 수 있습니다. ..
[BOJ] 백준 7569 토마토 (Swift) 문제 https://www.acmicpc.net/problem/7569 7569번: 토마토 첫 줄에는 상자의 크기를 나타내는 두 정수 M,N과 쌓아올려지는 상자의 수를 나타내는 H가 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M ≤ 100, 2 ≤ N ≤ 100, www.acmicpc.net 풀이 https://dev-mandos.tistory.com/264 [BOJ] 백준 7576 토마토 (Swift) 문제 https://www.acmicpc.net/problem/7576 7576번: 토마토 첫 줄에는 상자의 크기를 나타내는 두 정수 M,N이 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M,N ≤ 1,000 ..
[BOJ] 백준 7576 토마토 (Swift) 문제 https://www.acmicpc.net/problem/7576 7576번: 토마토 첫 줄에는 상자의 크기를 나타내는 두 정수 M,N이 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M,N ≤ 1,000 이다. 둘째 줄부터는 하나의 상자에 저장된 토마토 www.acmicpc.net 풀이 BFS로 풀 수 있는 문제입니다. 먼저 익어있는 토마토의 y,x 좌표를 queue에 넣어주고 시작을 해야합니다. 그 이후, 익어있는 토마토로부터 상하좌우로 0인 토마토가 익게되는데, 0일 때만 queue에 넣어주고, 0인 좌표를 익어있던 토마토 + 1의 값으로 설정해줍시다. 예를들어 [0, 0] [0, 1] 토마토가 위처럼 주어지고 하루가 지나면, [0, 2] [2, 1..
[BOJ] 백준 7562 나이트의 이동 (Swift) 문제 https://www.acmicpc.net/problem/7562 7562번: 나이트의 이동 체스판 위에 한 나이트가 놓여져 있다. 나이트가 한 번에 이동할 수 있는 칸은 아래 그림에 나와있다. 나이트가 이동하려고 하는 칸이 주어진다. 나이트는 몇 번 움직이면 이 칸으로 이동할 수 www.acmicpc.net 풀이 BFS로 풀이할 수 있는 문제입니다. 체스판의 크기가 주어지면, l * l 크기의 2차원 Bool 배열을 만들어주었고, false로 초기화하였습니다. 이 2차원 배열을 나이트가 이동하는 경로를 확인 용도로 사용하려고 합니다. 또한 나이트는 8방향으로 움직일 수 있으므로, 8방향을 dy, dx라는 상수로 값을 주었습니다. BFS를 할 때, 처음 큐에 초기 나이트의 y, x 좌표와 이동한 횟..
[BOJ] 백준 1697 숨바꼭질 (Swift) 문제 https://www.acmicpc.net/problem/1697 1697번: 숨바꼭질 수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 www.acmicpc.net 풀이 BFS로 풀 수 있는 문제입니다. x - 1, x + 1, 2 * x 로 이동이 가능한데, 모두 1초씩 걸리므로, 비용이 동일하다는 것을 알 수 있습니다. 비용이 동일할 때, 최단 경로는 BFS로 구할 수 있어서 BFS로 풀이했습니다. 초기의 queue에 수빈이의 위치와 0초를 tuple의 배열 형태로 넣어주고, x - 1, x + 1, 2 * x 만큼 떨어진..
[BOJ] 백준 2178 미로 탐색 (Swift) 문제 https://www.acmicpc.net/problem/2178 2178번: 미로 탐색 첫째 줄에 두 정수 N, M(2 ≤ N, M ≤ 100)이 주어진다. 다음 N개의 줄에는 M개의 정수로 미로가 주어진다. 각각의 수들은 붙어서 입력으로 주어진다. www.acmicpc.net 풀이 BFS를 사용하여 풀 수 있는 문제입니다. BFS는 간선의 비용이 동일할 때, 최단 경로로 방문한다는 특징이 있습니다. 물론 DFS + 백트래킹을 사용하여 모든 경로를 구해 답을 구할 수는 있겠지만, 100 * 100 크기이고, 모든 수가 1로 되어있다는 등 최악의 경우를 고려하면 시간초과가 날 것입니다. 그래서 BFS로 접근하여 풀었습니다. BFS 하면서 queue에 y, x 좌표와 얼마만큼 이동했는지 depth라는..
[BOJ] 백준 1012 유기농 배추 (Swift) 문제 https://www.acmicpc.net/problem/1012 1012번: 유기농 배추 차세대 영농인 한나는 강원도 고랭지에서 유기농 배추를 재배하기로 하였다. 농약을 쓰지 않고 배추를 재배하려면 배추를 해충으로부터 보호하는 것이 중요하기 때문에, 한나는 해충 방지에 www.acmicpc.net 풀이 DFS 또는 BFS를 사용하여 풀 수 있는 문제입니다. 문제에서는 입력을 위치로 주어지고 있습니다. 저는 2차원 Bool 배열을 사용해 해당 위치를 true로 주었습니다. 해당 위치를 탐색했는지 확인하기 위해 2차원 Bool 배열을 선언하였고, 지렁이가 상하좌우로 이동할 수 있기 때문에 방향을 설정할 dy, dx 배열을 선언해주었습니다. 탐색을 하기 전 마지막으로 범위를 벗어나는지 확인하기 위한 함..

반응형