본문 바로가기
코테연습

94. 이것이 코딩 테스트다 4장 : 상하좌우 Javascript

by hxunz 2022. 8. 30.

이것이 코딩테스트다 예제 4-1 상하좌우 문제

 

1. 문제에 대한 이해

  • 우리가 풀어야 할 문제는 무엇인가?
     - A가 최종적으로 도착할 지점의 좌표를 구하라
  • 주어진 자료는 무엇인가?
     - N : 공간의 크기를 나타냄
     - move : 이동할 계획서가 담긴 배열
  • 조건은 무엇인가?
     - N x N 크기의 정사각형 공간을 벗어나는 움직임은 무시된다.

2. 계획

  • 이 문제를 푸는데 있어서 유용하게 쓸 수 있는 지식은 무엇인가?
  1. A의 처음 시작 지점을 start = [1,1]이라고 정한다.
  2. move 배열을 순회하면서
  3. 문자열이 'L'인 경우
    start[1]이 1일때 그대로 start[1]
    start[1] -1을 한다.
  4. 문자열이 'R'인 경우
    start[1]이 N일때 그대로 start[1]
    start[1] + 1을 한다.
  5. 문자열이 'U'인 경우
    start[0]이 1일때 그대로 start[0]
    start[0] -1을 한다.
  6. 문자열이 'D'인 경우
    start[0]이 N일때 그대로 start[0]
    start[0] + 1을 한다.

3. 실행

  • 풀이 계획을 실행하고, 각 단계가 올바른지 점검하라.
const solution = (N, move) => {
  //   A의 처음 시작 지점을 start = [1, 1]이라고 정한다.
  let start = [1, 1];

  // move 배열을 순회하면서 
  // 문자열이 'L'인 경우
  // start[1]이 1일때 그대로 start[1]
  // start[1] - 1을 한다.
  //   문자열이 'R'인 경우
  // start[1]이 N일때 그대로 start[1]
  // start[1] + 1을 한다.
  //   문자열이 'U'인 경우
  // start[0]이 1일때 그대로 start[0]
  // start[0] - 1을 한다.
  //   문자열이 'D'인 경우
  // start[0]이 N일때 그대로 start[0]
  // start[0] + 1을 한다.
  for (i = 0; i < move.length; i++) {
    if (move[i] === 'L') {
      if (start[1] === 1) {
        start[1] = start[1]
      } else {
        start[1] = start[1] - 1;
      }
    }
    if (move[i] === 'R') {
      if (start[1] === N) {
        start[1] = start[1]
      } else {
        start[1] = start[1] + 1;
      }
    }
    if (move[i] === 'U') {
      if (start[0] === 1) {
        start[0] = start[0]
      } else {
        start[0] = start[0] - 1;
      }
    }
    if (move[i] === 'D') {
      if (start[0] === N) {
        start[0] = start[0]
      } else {
        start[0] = start[0] + 1;
      }
    }
  }
  return start
};

test('coordinate', () => {
  expect(solution(5, ['R', 'R', 'R', 'U', 'D', 'D'])).toEqual([3, 4]);
});

 

댓글