티스토리 뷰
반응형
https://www.acmicpc.net/problem/20058
난이도 : 골드 4
맵을 나눠 90도로 회전하는 것이 헷갈렸습니다. 종이에 적어가며 푸니 쉽게 이해가 됐네요.
정답을 구할 때 dfs를 이용하여 칸 수를 세주며 총얼음의 양을 구했습니다.
전역 변수
int n = 맵 크기의 지수(2^n)
int size = 맵 크기
int map[][] = 문제에서 주어진 값
int dx[], dy[] = 좌표를 이동하기 위한 배열
int sum = 총 얼음의 양
메소드
void main
입력을 받고 명령어에 적절히 동작합니다.
동작이 끝나면 얼음의 양, 칸 수를 세줍니다.
(rotate, melt, answer 호출)
void rotate
명령어의 숫자 크기만큼의 배열을 시계 방향으로 90도 돌려줍니다. 현재 배열에서 돌렸을 때의 값을 next배열에 저장했습니다. 회전이 끝났을 때 map은 next를 참조하도록 했습니다.
저 한 줄을 작성하는데 꽤 오랜 시간이 걸렸네요.
void melt
3면 이상이 얼음이 아닌 칸을 녹입니다. 이때 동시에 얼음이 녹으므로 적절한 처리를 해주지 않을 시 한 칸이 녹아야 하는데 모든 칸이 녹을 수 있는 대참사가 벌어질 수 있습니다.
저는 오동작 방지를 위해 큐를 이용했습니다.
boolean check
파라미터로 받은 좌표값들이 정상 범위인지 확인합니다.
int answer
연결된 얼음들을 찾습니다. 연결된 얼음들의 칸 수를 세고 반환합니다.
얼음의 칸을 세며 총얼음의 양을 구하기 위해 sum에 더해줍니다.
(check 호출)
반응형
'문제풀이 > 백준 && 프로그래머스' 카테고리의 다른 글
[백준 1753] 최단경로 (자바) (0) | 2020.11.02 |
---|---|
[백준 20061] 모노미노도미노 2 (자바) (0) | 2020.10.28 |
[백준 20057] 마법사 상어와 토네이도 (자바) (0) | 2020.10.21 |
[백준 20056] 마법사 상어와 파이어볼 (자바) (3) | 2020.10.21 |
[백준 20055] 컨베이어 벨트 위의 로봇 (자바) (0) | 2020.10.21 |
댓글