방문길이

방문길이

  1. 문제 정리
    • 좌표 범위는 -5 <= x,y <= 5
    • 방문했던 좌표는 포함하지 않음 Set() 함수 사용
  2. 어려웠던 점
    • 문제에서 요구하는 것은 단순히 “방문한 좌표”가 아니라 “처음 걸어본 길의 길이”
    • 범위를 벗어난 경우 같은 자리에 머무르는 경우도 경로에 추가

[!NOTE] 처음 걸어본 길의 길이💡 (0,0) → (0,1) → (-1,1)로 가는 길과, 나중에 (-1,1) → (0,1)로 되돌아가는 길은 같은 길로 취급

  1. 새롭게 알게된 점
    • 문제에서 요구하는 것은 단순히 “방문한 좌표”가 아니라 “처음 걸어본 길의 길이” → “길”과 “좌표”의 차이
        // 처음접근
        visited.add(`${x},${y}`);
              
        // 문제풀이
        visitedPath.push(`${x},${y}-${nx},${ny}`);
        visitedPath.push(`${nx},${ny}-${x},${y}`);
              
        return visited.size / 2; 
      
  • 경계 벗어남으로 인한 “가짜 경로” 생성 → 실제 이동 여부 확인
          // ✅ 실제로 이동했을 때만 경로 추가
          if (x !== nx || y !== ny) {  // 좌표가 실제로 변경되었는지 확인
              visitedPath.add(`${x},${y}-${nx},${ny}`);
              visitedPath.add(`${nx},${ny}-${x},${y}`);
          }
    

1차 시도 (약 120분)

// 명령을 입력 받아 좌표를 반환
function location(x, y, dir){

	let nx = x; 
	let ny = y;
	
	if (dir === 'U') {
		ny = y + 1;
	} else if (dir === 'D') {
		ny = y - 1;
	} else if (dir === 'R') {
		nx = x + 1;
	} else if (dir === 'L') {
		nx = x - 1;
	}
	
	if (nx >= -5 && nx <= 5 && ny >= -5 && ny <= 5) {
		return [nx, ny]; 
	} else {
    return [x, y];
   }

}

let newPos = location(0, 0, 'L');
console.log(newPos.x, newPos.y);

function solution(dirs){ 
	let x = 0;
	let y = 0;
	
	const visitedPath = [];

	for (const dir of dirs){
        const [nx, ny] = location(x, y, dir);
        visited.add(`${x},${y}`);
        [x, y] = [nx, ny];

    }	

  const visited = new Set(visitedPath);
  return visited.size / 2; 

}

console.log(solution("ULURRDLLUULURRDLLUULURRDLLUULURRDLLUULURRDLLUULURRDLLUULURRDLLUULURRDLLU"));

→ 이동하지 않은 경우도 경로도 카운트가 일어나 27.5와 같은 값도 나타남 → 처음 걸어본 길의 길이 고려하지 못함

2차 시도 (약 120분)

// 명령을 입력 받아 좌표를 반환
function location(x, y, dir){

	let nx = x; 
	let ny = y;
	
	if (dir === 'U') {
		ny = y + 1;
	} else if (dir === 'D') {
		ny = y - 1;
	} else if (dir === 'R') {
		nx = x + 1;
	} else if (dir === 'L') {
		nx = x - 1;
	}
	
	if (nx >= -5 && nx <= 5 && ny >= -5 && ny <= 5) {
		return [nx, ny]; 
	} else {
    return [x, y];
   }

}

function solution(dirs){ 
	let x = 0;
	let y = 0;
	
	const visitedPath = [];

	for (const dir of dirs){
        const [nx, ny] = location(x, y, dir);

        // 현재 좌표와 다음 좌표가 다를 때만 경로를 추가
        if (x !== nx || y !== ny) {
            visitedPath.push(`${x},${y}-${nx},${ny}`);
			visitedPath.push(`${nx},${ny}-${x},${y}`);

            [x, y] = [nx, ny];
        }
    }	

    const visited = new Set(visitedPath);
    return visited.size / 2; 

}

console.log(solution("ULURRDLLUULURRDLLUULURRDLLUULURRDLLUULURRDLLUULURRDLLUULURRDLLUULURRDLLU")); // 26

→ 바로 Set에 추가 → 가독성을 위해 switch case 로 수정

3차 시도 (약 60분) 리팩토링

This line appears after every note.

Notes mentioning this note

There are no notes linking to this note.


Here are all the notes in this garden, along with their links, visualized as a graph.