새소식

알고리즘 테스트 ⏲/프로그래머스

[프로그래머스] 무인도 여행 풀이 / JavaScript

  • -
 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

작성 코드 (1차 시도 / 통과)

function solution(maps) {
    const result = []
    maps = maps.map((m) => m.split(""))
    const dfs = (dx, dy) => {
        if (dx < 0 || dy < 0 || dx >= maps.length || dy >= maps[0].length || maps[dx][dy] === "X") return 0
        const now = parseInt(maps[dx][dy])
        maps[dx][dy] = "X"
        return now + dfs(dx - 1, dy) + dfs(dx + 1, dy) + dfs(dx, dy - 1) + dfs(dx, dy + 1)
    }
    for (let x = 0; x < maps.length; x += 1) {
        for (let y = 0; y < maps[x].length; y += 1) {
            if (maps[x][y] !== "X") result.push(dfs(x, y))
        }
    }
    return result.length ? result.sort((a, b) => a - b) : [-1]
}

 

구현 로직 (DFS)

DFS로 간단하게 해결할 수 있습니다.

 

1. maps 배열 요소 순회

2. 현재 위치가 X가 아니라면 현재 위치를 방문 처리("X")하고 시작점으로 상하좌우 DFS 수행

3. 수행 결과(영역 내 X가 아닌 모든 수들의 합)를 결과 배열 result에 담기

4. 정렬 결과 반환

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.