Dandy Now!
  • [레벨1][자바스크립트] 공원 산책
    2023년 04월 18일 16시 35분 57초에 업로드 된 글입니다.
    작성자: DandyNow
    728x90
    반응형

    https://school.programmers.co.kr/learn/courses/30/lessons/172928

     

    프로그래머스

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

    programmers.co.kr

     

    장애물을 만나면 이동한 위치를 롤백해야 한다. 이러한 로직을 처리함에 있어 func 함수를 정의하여 문제를 해결했다. for문 순회 시 인덱스와 값을 함께 사용하기 위해 for in 문법을 이용해고, 이중 배열 요소 비교-장애물을 만났을 때 롤백 처리-를 위해 이중 배열의 요소를 문자열로 변경(JSON.stringify) 후 비교하였다.

    function solution(park, routes) {
      const start = [];
      x = [];
      wSize = park[0].length;
      hSize = park.length;
    
      // 인덱스와 값을 함께 이용하기 위해 for in 이용
      for (let i in park) {
        const str = [...park[i]];
        for (let j in str) {
          if (str[j] === "S") {
            start.push(parseInt(i));
            start.push(parseInt(j));
          }
          if (str[j] === "X") {
            x.push([parseInt(i), parseInt(j)]);
          }
        }
      }
    
      const move = (route) => {
        temp = [...start];
        route[1] = parseInt(route[1]);
        for (let i = 0; i < route[1]; i++) {
          switch (route[0]) {
            case "W":
              temp[1]--;
              break;
            case "E":
              temp[1]++;
              break;
            case "N":
              temp[0]--;
              break;
            case "S":
              temp[0]++;
              break;
          }
          if (temp[0] < 0 || temp[0] >= hSize) {
            return;
          }
          if (temp[1] < 0 || temp[1] >= wSize) {
            return;
          }
          // 이중 배열 요소 비교를 위해 안쪽 배열을 문자열로 변경하여 비교함
          if (x.map((arr) => JSON.stringify(arr)).includes(JSON.stringify(temp))) {
            return;
          }
        }
        return temp;
      };
    
      for (let route of routes) {
        r = route.split(" ");
        const coord = move(r);
        if (coord) {
          start.splice(0, 2, coord[0], coord[1]);
        }
      }
    
      return start;
    }
    728x90
    반응형
    댓글