1012번: 유기농 배추 차세대 영농인 한나는 강원도 고랭지에서 유기농 배추를 재배하기로 하였다. 농약을 쓰지 않고 배추를 재배하려면 배추를 해충으로부터 보호하는 것이 중요하기 때문에, 한나는 해충 방지에 www.acmicpc.net 1. 문제 내용 2. 접근 방식 배추가 심어져 있는 땅을 입력받는다. maps 2차원 리스트를 모두 0으로 초기화한 다음에, 배추가 심어져 있는 장소를 1로 바꾸면 된다. 또한 배추가 심어져 있는 땅, 즉 1인 칸의 위치를 알고 있기 때문에 아직 방문하지 않은 배추가 심어진 땅을 대상으로만 bfs( ) 메서드를 실행하면 된다. 3. 정답 코드 from collections import deque def make_maps(ks): graph = [[0] * n for _ in..
2667번: 단지번호붙이기 과 같이 정사각형 모양의 지도가 있다. 1은 집이 있는 곳을, 0은 집이 없는 곳을 나타낸다. 철수는 이 지도를 가지고 연결된 집의 모임인 단지를 정의하고, 단지에 번호를 붙이려 한다. 여 www.acmicpc.net 1. 문제 내용 2. 접근 방식 첫 시작점인 (0, 0)이 1일 수도, 0일 수도 있다. 이 문제는 기본적으로 2178번 미로탐색 문제와 해결 방식이 똑같다. 그러나 2가지 차이점 중 하나가 바로 시작점이 무조건 1이 아니라, 0과 1 모두 가능하다는 것이다. 따라서 이중 for문을 통해서 방문하지 않은 것 중에서 1인 칸을 찾은 후, bfs() 메서드를 실행해야겠다고 판단했다. 단지에 속하는 집의 수는 count 변수로 구한다. 미로 탐색 문제와의 또 다른 차이..
2178번: 미로 탐색 첫째 줄에 두 정수 N, M(2 ≤ N, M ≤ 100)이 주어진다. 다음 N개의 줄에는 M개의 정수로 미로가 주어진다. 각각의 수들은 붙어서 입력으로 주어진다. www.acmicpc.net 1. 문제 내용 2. 접근 방식 너비 우선 탐색 사용 (1, 1)에서 상하좌우 인접한 칸을 확인하면서 너비 우선 탐색을 한다. 칸 수는 visited 2차원 리스트로 카운트한다. (1, 1)의 첫 번째로 방문하는 칸이고, 상하좌우에 붙어 있는 칸을 방문한다면 그것은 두 번째로 방문하는 칸이다. 즉, visited[0][0] = 1이면, 우측에 있는 칸을 방문한다면 visited[0][1] = visited[0][0] + 1 = 1 + 1 = 2로 계산된다. ** 편의상 (1, 1)칸은 (0, ..
1003번: 피보나치 함수 각 테스트 케이스마다 0이 출력되는 횟수와 1이 출력되는 횟수를 공백으로 구분해서 출력한다. www.acmicpc.net 1. 문제 내용 2. 접근 방식 다이나믹 프로그래밍이다. 일반적인 재귀 함수로는 N이 조금만 커져도 시간 초과가 난다. 따라서 다이나믹 프로그래밍 방식으로 접근해야 한다. dp 리스트는 각 n의 0과 1의 개수가 담긴 2차원 리스트이다. 이 문제에서 실제 n = 4일 때의 피보나치 수를 구할 필요가 없다. 단지 n = 4일 때 0과 1이 몇 번 호출되는지만 궁금하기 때문이다. f(5)로 예를 들어보자. f(5)는 위와 같은 f() 함수들이 호출된다. f(2)는 0과 1을 각각 1개씩 가지고 있으므로, [1, 1]로 표현할 수 있다. f(3)은 f(2) 값에서..
1260번: DFS와 BFS 첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사 www.acmicpc.net 1. 문제 내용 2. 접근 방식 문제 이름에서 사용해야 할 알고리즘을 알려주고 있기 때문에 별다른 접근 방식은 없다. 3. 정답 코드 from collections import deque def dfs(n): print(n, end=' ') visited[n] = True for i in graph[n]: if not visited[i]: dfs(i) def bfs(n): visited[n] = True queue = deq..