BFS 문제 질문
265
작성한 질문수 14
안녕하세요.
BFS 강의를 보고 응용하여 타사이트 문제도 도전해서 풀어보면서 적용이 되는것에 재미를 느끼고 있습니다.
하지만, 약간의 응용문제를 풀려고 하니 쉽지않네요. ㅠㅠ
프로그래머스 문제 (카카오 컬러링북) 아래 링크 걸어두었습니다.
https://programmers.co.kr/learn/courses/30/lessons/1829
-> 카카오컬러링북 BFS 문제인데
강사님께서 강조하시던
1. 마이너스 좌표체크 2. m*n 범위체크 3. grid[x][y] 값체크(문제제시값) 을 하면 해당범위에 잘걸리지않아
카운트가 잘 되지 않고 있습니다. ㅠㅠ
코드는 적어서 올려볼게요.
피드백 주시면 감사하겠습니다 ㅠㅠ
* 추가적으로 0과 1이 아닌 아래 문제처럼 1, 2, 3 색깔별로
찾는 문제도 있으면 응용에 도움이 많이 될것같습니다.
package com.algoStudy.algo0128;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.Queue;
public class BFSTest_04 {
// 카카오문제
public static void main(String[] args) {
int m = 6, n= 4;
int[][] grid = {
{'1', '1', '1', '0'},
{'1', '2', '2', '0'},
{'1', '0', '0', '1'},
{'0', '0', '0', '1'},
{'0', '0', '0', '3'},
{'0', '0', '0', '3'}
};
System.out.println(new BFSTest_04().solution(m, n, grid));
}
// 전역변수 선언
// int m,n = 0; // 가로 세로 구하기위해 셋팅 0,0 부터 시작이면 이미 선언되어있음 6x4
int[][] dirs = {{1,0}, {-1,0}, {0,1}, {0,-1}}; // 아래,위,오른,왼
int size = 0;
public int[] solution(int m, int n, int[][] picture) {
int numberOfArea = 0;
int maxSizeOfOneArea = 0;
// grid에 필요한 그림 그리기 및 영역 표시 확인 후 카운트 새기
for(int i=0; i<m; i++) {
for(int j=0; j<n; j++) {
if(picture[i][j] != '0') { // 값이 해당값에 포함되어있다면, 즉 영역이라면 증가시키고 bfs 칠해주기
size = 0;
numberOfArea++; // 육지 갯수 카운트
bfs(picture, m, n); // 남은영역 0 칠해주기
if(maxSizeOfOneArea < size)
maxSizeOfOneArea = size;
}
}
}
int[] answer = new int[2];
answer[0] = numberOfArea;
answer[1] = maxSizeOfOneArea;
System.out.println(Arrays.toString(answer));
return answer;
}
private void bfs(int[][] grid, int x, int y) {
// bfs는 큐방식을 선언해주는게 이상적
Queue<int[]> que = new LinkedList<>();
que.offer(new int[] {x,y});
while(!que.isEmpty()) { // 값이 있으면
int[] point = que.poll(); // 즉시 빼기기
// 방향 찾아서 0으로 칠하기
for (int[] dir : dirs) {
int x1 = point[0] + dir[0];
int y1 = point[1] + dir[1];
// 1. 마이너스 좌표체크 2. m*n 범위체크 3. grid[x][y] 값체크(문제제시값)
if (x1 >= 0 && y1 >= 0 && x > x1 && y > y1 && grid[x1][y1] != '0') {
grid[x1][y1] = '0';
que.offer(new int[] {x1, y1});
size++;
}
}
}
}
}
답변 3
2
안녕하세요. bfs 응용강의 5번문제로 올려놨습니다. 응용해서 풀었기에 문제가 비슷할겁니다.
강의보시고 이해 안되시면글 남겨주세요~
첨언하면)
bfs 기본공식에 살을 붙여서 충분히 다 해결가능합니다.
어떠한 문제가 나오더라도 , 해결 가능합니다. 곧 어떠한 회사 코딩테스트도 통과가 가능합니다.
자신감을 가지고 더 하시면 충분히 좋은 결과가 나올겁니다. 제 강의 전달이 약간 부족할 수도 있지만
기본기를 확실히 심어주도록 만들었습니다. bfs/dfs 에 재미를 붙이셨다면 다행입니다.(모든회사에서 제일 좋아하는 문제죠
한방에 경쟁자 10명중에 8명을 거르도록 하는문제들입니다)
bfs/dfs는 앞단의 기본기 string , array는 기본 이해하면서 어디서 맞게 호출할지 , 어디서 에러를 걸어야할지를 체크합니다.
그냥 코딩의 핵입니다.
요새 환경은 코딩테스트를 통과해야지. 자바 스프링을 구축하고, 머신러닝을 할 수 있습니다.
이건 문제 도출 아이디어입니다.
2
네 안녕하세요~
열심히 하시는군요~~^^;
이 재미를 느낄때 중요한 순간이죠..bfs/dfs만 열심히 풀어제껴도 성공가능합니다.
카카오 셤 문제 7개중에서 bfs/dfs문제는 5~6번째 쯤 나옵니다. 그만큼 난이도가 있다는 거죠?
그리고 정답률이 5%이하입니다. 무슨 말이냐..그거 풀면 합격가능하다는 얘기가 됩니다.
초반 문제 string , array보다 배점이 확실히 높겠죠?
어떤 년도에는 bfs/dfs가 2개 나왔습니다. 그 해에 bfs/dfs를 준비 안한 수험생은 아마 대부분 탈락했을겁니다.
하여튼 질문주신 문제는 제 공식을 적용해서 풀어보도록 하겠습니다.
감사합니다.
1
넵 감사합니다. 여기에 답변이 달리는건가용?? 강의랑 비슷하게 푼 문제는 영역갯수, 색깔이 가장많이 칠해진거까지는 구해봤는데
저 문제는 저 공식으로는 대입이 어려워 보이네요 ㅠㅠ
질문 드립니다!
1
249
1
PriorityQueue
1
337
1
면적을 구하는 res를 for문 내에 있는 if문 안에 넣으면 되지 않나요?
1
311
1
강의에 있는 자료구조만 공부하면 되나요??
1
229
1
bfs, dfs 강의 자료
1
241
1
문제가 이해가 안가요
1
323
1
만약 문자열이 매칭되는 조건("arrest", "test")이 문자열의 인덱스 기준 뒤에서부터 발생하면 어떻게 풀어야할까요?
2
434
1
그림이 잘 이해되지 않습니다.
1
182
1
어떤 문제인지에 대한 설명이 없어서 이해가 안가네요;;
1
300
3
강사님 문제가 잘 이해가 안가요
3
180
1
merge함수 질문 있습니다.
1
226
1
dp 강의자료 어딧어요??
1
379
2
응용문제4) DFS 응용문제 질문이요!
1
161
1
Dp HouseRobber 질문
1
222
1
DP 1분 간단 영상이 보이지 않습니다.
1
285
1
스택 문제 영상이 추가적으로 들어갔습니다.
1
158
1
list 질문입니다
2
189
1
DP문제 문의
1
237
2
Comparator 질문입니다.
1
468
2
안녕하세요. 질문입니다.
1
262
1
BFS 게임 맵 최단거리 문의
1
328
3
코딩테스트 처음 입문 했는데 질문이 있습니다.
1
153
1
안녕하세요. 수강생입니다. 이 강의만 전부 소스 보낼 수 있을까요?
1
159
1
추가 강의 문의.
1
367
3





