Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Python
- Lv. 0
- level 3
- C언어
- Lv. 2
- bfs
- javascript
- 너비 우선 탐색
- 자바스크립트
- SQL 고득점 KIT
- DP
- join
- 오블완
- Lv. 1
- softeer
- group by
- select
- Lv. 3
- Dynamic Programming
- 파이썬
- 프로그래머스
- 깊이 우선 탐색
- 동적계획법
- 소프티어
- SQL
- dfs
- 티스토리챌린지
- LEVEL 2
- Java
- programmers
Archives
- Today
- Total
몸과 마음이 건전한 SW 개발자
프로그래머스 [Lv. 2] 카카오프렌즈 컬러링북 {언어 : Java} 본문
문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/1829
정답 코드
import java.util.Deque;
import java.util.ArrayDeque;
class Solution {
public boolean isValid(int nr, int nc, int n, int m) {
return 0 <= nr && nr < n && 0 <= nc && nc < m;
}
public int[] solution(int n, int m, int[][] picture) {
int numberOfArea = 0;
int maxSizeOfOneArea = 0;
int[][] visited = new int[n][m];
int[][] directions = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};
for (int sr = 0; sr < n; sr++) {
for (int sc = 0; sc < m; sc++) {
if (visited[sr][sc] == 1 || picture[sr][sc] == 0) {
continue;
}
numberOfArea += 1;
int color = picture[sr][sc];
int cnt = 1;
visited[sr][sc] = 1;
Deque<Integer[]> deque = new ArrayDeque<>();
// 주의
// deque.addLast([sr, sc]);
deque.addLast(new Integer[] { sr, sc });
while (!deque.isEmpty()) {
Integer [] tmp = deque.removeFirst();
int r = tmp[0];
int c = tmp[1];
for (int[] direction : directions) {
int nr = r + direction[0];
int nc = c + direction[1];
if (isValid(nr, nc, n, m) && picture[nr][nc] == color && visited[nr][nc] == 0) {
visited[nr][nc] = 1;
deque.addLast(new Integer[] { nr, nc });
cnt += 1;
}
}
}
if (cnt > maxSizeOfOneArea) {
maxSizeOfOneArea = cnt;
}
}
}
int[] answer = new int[2];
answer[0] = numberOfArea;
answer[1] = maxSizeOfOneArea;
return answer;
}
}
풀이 방법
- 기본적인 bfs와 같다.
- 현재 지점이 색이 칠해져 있는지 확인한다.
- 방문했는지 확인한다.
- 현재 지점의 색과 같은 색인지 확인한다.
- 범위를 벗어났는지 확인한다.
느낀점
- 쉽긴 한데 아직 java에 익숙하지 않아서 더 많이 풀어봐야 할 것 같다.
- Deque<Integer[]> deque = new ArrayDeque<>(); => 덱 만들기
- deque.addLast(new Integer[] {nr, nc}); => 덱에 배열 넣기
- Integer[] tmp = deque.removeFirst(); => 덱에서 맨 앞 원소 추출하기
- deque.isEmpty(); => 배열이 비었는지 확인하기
'알고리즘' 카테고리의 다른 글
프로그래머스 [Lv. 3] 숫자 게임 {언어 : Python} (1) | 2024.06.11 |
---|---|
백준 SILVER 2 [11724번] 연결 요소의 개수 {언어 : Python} (1) | 2024.06.02 |
프로그래머스 [Lv. 2] 124 나라의 숫자 {언어 : Python} [3진법] (0) | 2024.05.30 |
프로그래머스 [Lv. 2] 3 x n 타일링 {언어 : Java} (0) | 2024.05.29 |
프로그래머스 [Lv. 2] 아날로그 시계 {언어 : JavaScript} [암기하기] (0) | 2024.05.28 |