inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)

7. 섬나라 아일랜드(DFS)

선생님께서 해주신 기본적인 방법을 활용하여 문제를 풀던 와중 문제이 직면했습니다.

204

김영일

작성한 질문수 7

0

좀더 발전된 문제인거같은데 방식은 선생님께서 알려주신 방법으로 문제를 풀어볼려고 했습니다. 

허나 이상하게도 독립적으로 thawing() 함수를 실행했을땐 정상적으로 리턴 원하는 값을 하는데...

solution() 함수 내에서 호출을하면 리턴값이 0으로 나와버립니다.  문제가 생긴 곳은 주석으로 처리해서 여쭈어 봅니다.

문제의 출처 :// https://www.acmicpc.net/problem/2573

let input = `5 7
0 0 0 0 0 0 0
0 2 4 5 3 0 0
0 3 0 2 5 2 0
0 7 6 2 4 0 0
0 0 0 0 0 0 0`

let arr = input.split("\n").map((e) =>{
e.split(" ").map((x) => x = parseInt(x, 10))
});

function solution(ice) {
let answer = 0;
let mn = ice.shift();
let n = mn[0] //세로
let m = mn[1] // 가로
let dx = [-1,0,1,0];
let dy = [0,1,0,-1];

for (let y = 1; y <= 10; y++) {
for (let i = 1; i < n - 1; i++) {
for (let j = 1; j < m - 1; j++) {
let count = 0;
if (ice[i][j] > 0) {
for (let k = 0; k < 4; k++) {
let nx = i + dx[k];
let ny = j + dy[k];
if(nx >= 0 && nx < n && ny >= 0 && ny < m && ice[nx][ny] == 0) {
count++
}
}
if(ice[i][j] - count == 0) ice[i][j] = -1
else ice[i][j] -= count;
}
}
}

for (let i = 1; i < n - 1; i++) {
for (let j = 1; j < m - 1; j++) {
if(ice[i][j] < 0) ice[i][j] = 0;
}
}

// if (thawing(ice) > 1) {
// console.log("aa")
// answer = y;
// break
// }
}
return answer;
}

function thawing(ice) {
let count2 = 0;
let n = ice.length;
let m = ice[0].length;
let dx = [-1,0,1,0];
let dy = [0,1,0,-1];

for (let i = 0; i < n - 1; i++) {
for (let j = 0; j < m - 1; j++) {
if (ice[i][j] > 0) {
DFS(i, j);
count2++;
}
}
}
function DFS(x, y) {
ice[x][y] = 0;

for(let i = 0; i < 4; i++) {
let nx = x + dx[i];
let ny = y + dy[i];
if (nx >= 0 && nx < n && ny >= 0 && ny < m && ice[nx][ny] > 0) {
DFS(nx,ny);
}
}
}
return count2;
}
console.log(solution(arr));

javascript 코테 준비 같이 해요!

답변 1

2

김태원

안녕하세요^^

ice 라는 2차원 배열은 빙산이 녹는 과정을 기록하는 배열인것 같은데 

thawing(ice) 함수가 호출되면 DFS 함수가 작동하면서 ice 배열을 모두 0값으로 지워버려서 그런게 아닌가 싶습니다. 

질문은 강의영상 내용에 한에서만 질문했으면 합니다. 제가 강의하지 않은 문제를 물어보면 그걸 답하기위해 너무 많은 시간을 사용해야 합니다.

0

김영일

네 알겠습니다!! 

continue를 사용하는 이유

0

75

2

정렬 가능 여부 판단하기

0

62

2

알고리즘 학습법 관련해서 질문드립니다.

0

80

1

코드 리뷰 부탁드립니다!

0

88

1

indexOf를 사용해서 풀어보았습니다 !!

0

67

1

저는 이런식으로 구현 해보았습니다 !!

0

62

1

12,13,14 강의 소리만 나오고 검은 화면입니다

0

97

3

반복문 최소화하고 indexOf 사용해서 풀어봤습니다

0

61

1

영상 보기 전에 직접 풀어봤습니다.

0

71

1

섹션1의 17번문제 이 풀이로 풀어도 될까요?

0

133

2

정규표현식으로 처리해도 상관없나요 ?

0

119

2

3칸씩 건너뛸 수 있을 경우

0

124

2

강의에 대해 질문있습니다.

0

133

2

Object와 Set을 이용해 풀어봤습니다.

0

116

2

이렇게 해도 되나요?

0

102

2

선생님 중복 단어나 중복관련 문제들은 set을 이용하면 좋을것 같습니다.

0

144

2

이렇게 풀어도 괜찮을까요?

0

136

1

이렇게 풀어도 괜찮을까요?

0

112

1

모든 아나그램 찾기에서 시간복잡도

0

98

1

코드리뷰 부탁드립니다.

0

129

1

for loop 탈출은 return 문으로 해도 되지 않나요?

0

129

1

투포인트알고리즘으로 풀어봤습니다.

0

138

0

코드 리뷰 부탁드립니다.

0

115

1

코드 맞게 작성한 거 아닌가여??

0

142

1