코딩 테스트/프로그래머스(LV2)

[프로그래머스] 방문 길이 (LV2 - JavaScript)

dev-hpk 2024. 11. 29. 13:06
 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

1. 문제

제한사항

  • dirs는 string형으로 주어지며, 'U', 'D', 'R', 'L' 이외에 문자는 주어지지 않습니다.
  • dirs의 길이는 500 이하의 자연수입니다.

입출력 예

dirs answer
"ULURRDLLU" 7
"LULLLLLLU" 7

 

입출력 예 설명

입출력 예 #1
문제의 예시와 같습니다.

입출력 예 #2

문제의 예시와 같습니다.

 

2. 정답 풀이

풀이 전략

  • Set 객체 사용
  • 같은 길에서 방향만 다른 경우를 고려
    • [1,0]에서 'L'이 입력으로 들어온 경우 [0,0] : '1000' hash에 추가
    • [0,0]에서 'R'이 입력으로 들어온 경우 [1,0] : '0010' hash에 추가
function solution(dirs) {
    const MAX = 5;
    const directions = {
        'U': [0,-1],
        'D': [0,1],
        'L': [-1,0],
        'R': [1,0]
    }
    let cur = [0,0];
    const hash = new Set(); // 중복 추가 방지를 위해 Set 객체 사용
    
    dirs.split('').forEach(dir => {
        const dx = cur[0] + directions[dir][0];
        const dy = cur[1] + directions[dir][1];
        
        // 이동 좌표가 범위 안에 있는지 확인
        const canMove = dx <= MAX && dy <=MAX && dx >= -MAX && dy >= -MAX;
        
        if (canMove) {
            // 같은 길, 방향만 다른 경우 고려해 두 경우 모두 hash에 추가
            hash.add(''+cur[0]+cur[1]+dx+dy);
            hash.add(''+dx+dy+cur[0]+cur[1]);
            cur = [dx, dy];   
        }
    })
    return hash.size / 2;
}

 

 

 

이전에 많이 풀어봤던 유형이라 쉽게 로직을 생각해 낸 것 같다. 문제를 많이 풀어서 여러 유형을 익혀야겠다🔥🔥

 

 

 

[프로그래머스] [3차] n진수 게임 (LV2 - JavaScript)

프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 1. 문제 입력 형식입출력 예ntmpresult2421"0111"161621 "02468ACE11111111" 161622 "1357

dev-hpk.tistory.com

 

 

[프로그래머스] [3차] 압축 (LV2 - JavaScript)

프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr1. 문제입력 형식 입력으로 영문 대문자로만 이뤄진 문자열 msg가 주어진

dev-hpk.tistory.com