> 기초/코테 연습
TIL-2024.04.04 - 코테연습 - 공원 산책(1).programmers
Janku
2024. 4. 4. 09:24
URL:
https://school.programmers.co.kr/learn/courses/30/lessons/172928
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
내가 푼 코드:
// solution 함수 선언, park와 routes를 인자로 받음
const solution = (park, routes) => {
// 주차장의 높이와 너비 계산
let height = park.length;
let width = park[0].length;
let currentPosition = []; // 강아지의 현재 위치를 저장할 배열
let tempPosition = []; // 임시 위치를 저장할 배열
let parkArr= []; // 주차장의 배열을 저장할 배열
// 주차장의 각 행을 순회하여 주차장 배열을 생성하고 강아지의 현재 위치를 찾음
for(let i =0 ; i< park.length;i++){
let split = park[i].split(""); // 주차장의 각 행을 문자열로 나눔
parkArr = [...parkArr,split]; // 주차장 배열에 행 추가
for(let j = 0 ; j < split.length; j++){
if(split[j]==="S"){
currentPosition = [i,j]; // 강아지의 현재 위치 저장
}
}
}
// 주어진 이동 경로(routes)에 따라 강아지를 이동시킴
for(let i = 0; i < routes.length; i++){
// 이동 방향과 거리를 구함
let direction = routes[i].split("")[0];
let moves = routes[i].split("")[2];
let temp = [...currentPosition]; // 현재 위치를 임시로 저장
let temp2 = [...currentPosition]; // 이동 가능한 위치를 임시로 저장
// 주어진 이동 거리만큼 반복하여 강아지를 이동시킴
for(let j = 0; j < moves ; j++){
switch (direction) {
case "N": // 북쪽으로 이동
temp[0] -= 1;
break;
case "E": // 동쪽으로 이동
temp[1] += 1;
break;
case "S": // 남쪽으로 이동
temp[0] += 1;
break;
case "W": // 서쪽으로 이동
temp[1] -= 1;
break;
}
const x = temp[1];
const y = temp[0];
// 이동한 위치가 주차장 내에 있고 장애물이 없는지 확인
let condition = x >= 0 && x < width && y >= 0 && y < height && parkArr[y][x] !== "X";
if(condition){
tempPosition = [...temp]; // 장애물이 없으면 이동 가능한 위치 저장
} else {
tempPosition = [...temp2]; // 장애물이 있으면 현재 위치로 설정하고 반복문 종료
break;
}
}
currentPosition = [...tempPosition]; // 이동한 위치를 현재 위치로 업데이트
}
return currentPosition; // 최종적으로 강아지의 위치 반환
};
// 테스트 출력
console.log("result:: ", solution([ "SOO", "OOO", "OOO" ], [ "E 2", "S 2", "W 1" ])); // [2,1]
console.log("result:: ", solution([ "SOO", "OXX", "OOO" ], [ "E 2", "S 2", "W 1" ])); // [0,1]
console.log("result:: ", solution([ "OSO", "OOO", "OXO", "OOO" ], [ "E 2", "S 3", "W 1" ])); // [0,0]