-
백준(BOJ) 18809번 Gaaaaaaaaaarden알고리즘 풀이/백준(Boj) 2020. 3. 28. 17:49
문제 : https://www.acmicpc.net/problem/18809
18809번: Gaaaaaaaaaarden
첫째 줄에 정원의 행의 개수와 열의 개수를 나타내는 N(2 ≤ N ≤ 50)과 M(2 ≤ M ≤ 50), 그리고 초록색 배양액의 개수 G(1 ≤ G ≤ 5)와 빨간색 배양액의 개수 R(1 ≤ R ≤ 5)이 한 칸의 빈칸을 사이에 두고 주어진다. 그 다음 N개의 줄에는 각 줄마다 정원의 각 행을 나타내는 M개의 정수가 한 개의 빈 칸을 사이에 두고 주어진다. 각 칸에 들어가는 값은 0, 1, 2이다. 0은 호수, 1은 배양액을 뿌릴 수 없는 땅, 2는 배양
www.acmicpc.net
풀이 :
loc 배열에는 0과 g에 개수만큼 1이, r에 개수만큼 2가 들어있다. 이 loc 배열을 next_permutation을 통해 어느 좌표에 g
와 r을 넣어야 하는지에 대한 모든 경우의 수를 돌려볼 수가 있다. g와 r을 넣을 수 있는 cand 좌표 벡터를 만든 후 g와 r
에 위치를 큐에 집어넣었다면 꽃의 개수를 찾는다.
꽃의 개수를 찾을 때에는 st pair 2차원 벡터를 통해 { 현재시간, 어떤 색깔 } 찾게 되며
색깔이 없다면 방문할 수 있는 곳이며 큐에 넣어주고
색깔이 이미 있다면 현재시간과 지금 들어온 색깔을 비교해 꽃이 될 수 있는지 확인한다.
이미 꽃이 된 좌표는 큐에서 꺼낼 때 무시한다. st[y][x].second == 3인 경우
코드 ( C++ )
'알고리즘 풀이 > 백준(Boj)' 카테고리의 다른 글
백준(BOJ) 17142번 연구소 3 (0) 2020.03.31 백준(BOJ) 1938번 통나무 옮기기 (0) 2020.03.30 백준(BOJ) 18808번 스티커 붙이기 (0) 2020.03.28 백준 BOJ(16637번) 괄호 추가하기 (0) 2020.03.21 백준 BOJ(1445) 일요일 아침의 데이트 (0) 2020.03.19