알고리즘

[JS] 프로그래머스_ 방문길이

햄❤️ 2021. 7. 25. 23:56
반응형

문제링크

 

코딩테스트 연습 - 방문 길이

 

programmers.co.kr

 


  • 방향에 따른 이동 좌표를 direction이라는 변수에 키, 쌍 형태로 만들어준다.
  • 방문된 이동 경로를 찾기위해 집합 자료형으로 visited를 만들어준다. (중복을 제거하기 위해 집합 사용)
  • 현재 좌표를 now라고 하고, 0,0으로 세팅한다. 반복문으로 dirs에 따른 이동 좌표를 구한다.(dx,dy)
  • 좌표 평면의 경계를 넘어가는 명령어는 무시하기 위해 5보다 크거나, -5보다 작은 4개의 조건에서는 for문을 건너뛴다.  
  • 이동 경로는 (0,1) -> (1,1) 로 간 경로와 (1,1) -> (0,1) 간 것을 같다고 치기 때문에, 이 두개의 경로를 모두 구해서 visited에 add 해준다. 
  • 이렇게 되면 동일 경로가 2개씩 들어가게 되므로, 마지막 visited에서 2로 나누어준 값이 answer이 된다. 

 

function solution(dirs) {
	const direction = {
		U: [0, 1],
		D: [0, -1],
		L: [-1, 0],
		R: [1, 0],
	};
	let visited = new Set();
	let now = [0, 0];

	for (let i = 0; i < dirs.length; i++) {
		let dx = now[0] + direction[dirs[i]][0];
		let dy = now[1] + direction[dirs[i]][1];

		if (dx > 5 || dx < -5 || dy > 5 || dy < -5) continue;
	
    	visited.add("" + now[0] + now[1] + dx + dy);
		visited.add("" + dx + dy + now[0] + now[1]);

		now = [dx, dy];
	}

	return visited.size / 2;
}

let dirs = "ULURRDLLU";
console.log(solution(dirs));
//7 출력
728x90
반응형