-
[JavaScript]무인도 여행JavaScript_알고리즘 2024. 9. 3. 14:53
1. 문제
https://school.programmers.co.kr/learn/courses/30/lessons/154540
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
2. 접근 방법
- 3 ≤ maps의 길이 ≤ 100
3 ≤ maps[i]의 길이 ≤ 100
maps[i]는 'X' 또는 1 과 9 사이의 자연수로 이루어진 문자열입니다.
지도는 직사각형 형태입니다. - DFS
3. 자바스크립트 코드
function solution(maps) { let answer = []; // 행의 개수 const rowLength = maps[0].length; // 열의 개수 const columnLength = maps.length; // 방향 배열 const direction = [ [0, -1], [-1, 0], [0, 1], [1, 0], ]; // DFS함수 const DFS = (x, y) => { // 칸을 움직이며 더해나가는 변수 let total = 0; // 방문처리 visited[x][y] = true; // 스택 stack = [[x, y]]; // 스택 길이가 0보다 클때까지 while (stack.length > 0) { // stack 첫 인자 추출 const [nextX, nextY] = stack.shift(); // Number로 변환 후 더해나감 total += Number(maps[nextX][nextY]); // 방향배열 for (let k = 0; k < 4; k++) { const nx = nextX + direction[k][0]; const ny = nextY + direction[k][1]; // 범위 내 존재 if (0 <= ny && ny < rowLength && 0 <= nx && nx < columnLength) { // X 가 아니고 방문처리가 되지 않았을 경우 if (maps[nx][ny] !== "X" && visited[nx][ny] === false) { // 방문 처리 후 스택에 저장 visited[nx][ny] = true; stack.push([nx, ny]); } } } } // 더해나간 값 리턴 return total; }; // 2차원 배열 생성 (ES6부터 가능) let visited = Array.from(Array(columnLength), () => Array(rowLength).fill(false) ); // 배열 탐색 for (let mapIndex = 0; mapIndex < columnLength; mapIndex++) { for (let index = 0; index < rowLength; index++) { // X가 아니고 방문하지 않았을 때 if (maps[mapIndex][index] !== "X" && visited[mapIndex][index] === false) { answer.push(DFS(mapIndex, index)); } } } // answer 변수에 숫자가 존재할 경우 sort 처리 아닐 경우 -1 return answer.length ? answer.sort((a, b) => a - b) : [-1]; }
4. 문제를 풀고난 후 생각
- JS 문제를 푸는데 있어서 Python으로 푸는 그대로 사용했다가 틀린 부분을 찾기 어려웠다.
- Python 에서 sort 처리하면 그냥 순서를 오름차순 정렬을 해줬지만 JS의 경우 sort 내부에 인자가 없을 경우 문자열로 변환 후 정렬을 진행해주기 때문에 문제를 다 풀어놓고 정답을 맞추지 못했다.
- 또한 for ... in ... 을 사용할 경우 index 값이 문자열로 오기 때문에 for .... in 대신 for (let i .... ) 을 사용해서 문제에 접근함
5. 문제를 푸는데 도움이 되는 지식
- DFS
- JS sort
'JavaScript_알고리즘' 카테고리의 다른 글
[JavaScript]호텔 대실 (1) 2024.09.05 [JavaScript] 크기가 작은 부분 문자열 (0) 2024.08.07 [JavaScript] 대충 만든 자판 (0) 2024.08.07 - 3 ≤ maps의 길이 ≤ 100