반응형
1. 문제
https://school.programmers.co.kr/learn/courses/30/lessons/49994#qna
2. 코드
처음 푼 코드)
6번 테케부터 틀린 코드.. 어디가 잘못된걸까? 모르겠다. 반대 방향으로 접근한 것까지 전부 포함시켜줬는데...
function solution(dirs) {
let answer = 0;
let cur = [0,0]; // 현재 좌표
let way = [[[0,0],[0,0]]]; // 지금까지 다녔던 길 저장
for(let i=0;i<dirs.length;i++){
let temp = [...cur];
if(dirs[i] === "U" && cur[1] < 5) cur[1] += 1;
else if(dirs[i] === "D" && cur[1] > -5) cur[1] -= 1;
else if(dirs[i] === "R" && cur[0] < 5) cur[0] += 1;
else if(dirs[i] === "L" && cur[0] > -5) cur[0] -= 1;
if(way.filter(el => (el[0][0] === temp[0] && el[0][1] === temp[1]
&& el[1][0] === cur[0] && el[1][1] === cur[1]) &&
(el[0][0] === cur[0] && el[0][1] === cur[1]
&& el[1][0] === temp[0] && el[1][1] === temp[1])).length === 0) {
answer++;
way.push([temp,cur]);
}
}
return answer;
}
정답)
정답은 Set을 사용하는 방법이였다. 방문 좌표를 문자열 식으로 저장한 후 Set을 사용하여 겹치는 요소가 없게끔하기! 너무 좋은 풀이다.. 나도 언제쯤 이런 풀이를^^7 구현 문제 잘풀고싶다~
function solution(dirs) {
let move = { L: [-1, 0], R: [1, 0], U: [0, 1], D: [0, -1] };
let now = [0, 0];
let route = new Set();
for (let dir of dirs) {
let nowX = now[0] + move[dir][0];
let nowY = now[1] + move[dir][1];
if (nowX > 5 || nowX < -5 || nowY > 5 || nowY < -5) continue;
route.add("" + now[0] + now[1] + nowX + nowY);
route.add("" + nowX + nowY + now[0] + now[1]);
now = [nowX, nowY];
}
// 위에서 정방향, 반대 방향 두번 add하므로 /2 해야함 -> 중요!
return route.size / 2;
}
복기
6/5
반응형
'프로그래머스 > 구현' 카테고리의 다른 글
[구현] 프로그래머스 '프렌즈4블록' - js (0) | 2023.04.19 |
---|---|
[구현] 프로그래머스 '파일명 정렬' - js (0) | 2023.04.18 |
[문자열] 프로그래머스 '스킬트리' - js (0) | 2023.04.12 |
[문자열 & 해시맵] 프로그래머스 '오픈채팅방' (0) | 2023.04.10 |
[문자열 & 해시] 프로그래머스 '주차 요금 계산' - js (0) | 2023.04.08 |