https://school.programmers.co.kr/learn/courses/30/lessons/172928
Q. 지나다니는 길을 'O', 장애물을 'X'로 나타낸 직사각형 격자 모양의 공원에서 로봇 강아지가 산책을 하려합니다. 산책은 로봇 강아지에 미리 입력된 명령에 따라 진행하며, 명령은 다음과 같은 형식으로 주어집니다.
예를 들어 "E 5"는 로봇 강아지가 현재 위치에서 동쪽으로 5칸 이동했다는 의미입니다. 로봇 강아지는 명령을 수행하기 전에 다음 두 가지를 먼저 확인합니다.
위 두 가지중 어느 하나라도 해당된다면, 로봇 강아지는 해당 명령을 무시하고 다음 명령을 수행합니다.
공원의 가로 길이가 W, 세로 길이가 H라고 할 때, 공원의 좌측 상단의 좌표는 (0, 0), 우측 하단의 좌표는 (H - 1, W - 1) 입니다.
공원을 나타내는 문자열 배열 park, 로봇 강아지가 수행할 명령이 담긴 문자열 배열 routes가 매개변수로 주어질 때, 로봇 강아지가 모든 명령을 수행 후 놓인 위치를 [세로 방향 좌표, 가로 방향 좌표] 순으로 배열에 담아 return 하도록 solution 함수를 완성해주세요.
나는 routes의 한 array당 이동하게 될 거리를 연산해서 그 값으로 공원을 벗어나는지(공원 가로세로 길이랑 시작지점으로 비교(사실 시작지점으로 비교하면 안 됐음. 0으로 했어야지 !!!), 장애물을 지나치는지 체크해보려고 했는데 장애물 체크하는 부분에서 제대로 막힘. 계산도 못하겠고 😭😭
암튼 결국! 다른 사람들 풀이를 보니..이동하게 될 거리를 나처럼 한번에 미리 연산해서 비교하는 게 아니고 1씩 증가 혹은 감소시켜서 비교함..! 이런 방법으로 진행하면 part[x][y] === ‘X' 이렇게 장애물 여부를 비교해볼 수 있다!
function solution(park, routes){
// 공원의 가로 세로 길이 구하기
const [maxRow, maxCol] = [park.length-1, park[0].length-1];
// 시작지점 좌표 구하기
let row = col = 0;
for(let i = 0; i < park.length; i++){
if(park[i].search(/S/g) > -1){
[row, col] = [i, park[i].indexOf('S')];
break;
}
}
// 계산. 반복문을 사용하여 routes의 요소를 하나씩 확인한다.
routes.forEach((position)=>{
// 요소를 빈칸 기준으로 나눈다.
// op : 방향 / n : 이동 거리
const [op, n] = position.split(' ');
// 임시 좌표와 flag를 만듦
let [tempRow, tempCol] = [row, col];
let flag = true;
// 구한 거리의 이동 수 만큼 반복
for(let i = 0; i < Number(n); i++){
// 동서쪽이면 행을 더하거나 뺴주고,
// 남북쪽이면 열을 더하거나 빼준다.
if(op === 'E') tempCol++;
else if(op === 'W') tempCol--;
else if(op === 'S') tempRow++;
else if(op === 'N') tempRow--;
// 행과 열이 공원을 벗어나는지, 장애물이 있는지 확인
if(tempRow > maxRow || tempRow < 0 || tempCol > maxCol || tempCol < 0 || park[tempRow][tempCol] === 'X'){
flag = false;
break;
}
}
// for반복문을 통과했다면 이동에 성공한 것임 -> 임시좌표를 실제 좌표에 대입
if(flag) [row, col] = [tempRow, tempCol];
});
// 마지막 좌표 리턴
return [row, col];
}
[프로그래머스] 덧칠하기 (0) | 2023.04.12 |
---|---|
[리트코드] A Better Repeated Deletion Algorithm (0) | 2023.04.10 |
[리트코드] Remove Element (0) | 2023.03.31 |
[리트코드] Duplicate Zeros (0) | 2023.03.30 |
[프로그래머스] 구슬을 나누는 경우의 수 (0) | 2022.11.20 |
댓글 영역