Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Lv. 3
- 너비 우선 탐색
- level 3
- Lv. 2
- 프로그래머스
- join
- 동적계획법
- Dynamic Programming
- 티스토리챌린지
- SQL
- 깊이 우선 탐색
- C언어
- 오블완
- Java
- 자바스크립트
- bfs
- group by
- LEVEL 2
- dfs
- programmers
- Python
- softeer
- DP
- Lv. 0
- Lv. 1
- SQL 고득점 KIT
- javascript
- 소프티어
- 파이썬
- select
Archives
- Today
- Total
몸과 마음이 건전한 SW 개발자
프로그래머스 [Lv. 2] [PCCP 기출문제] 3번 / 충돌위험 찾기 {언어 : JavaScript} 본문
문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/340211
정답 코드
function solution(points, routes) {
let visited = new Map();;
const isCrushed = (sr, sc, cnt) => {
const locKey = `${sr},${sc},${cnt}`;
if (visited.has(locKey)) {
visited.set(locKey, visited.get(locKey)+1);
} else {
visited.set(locKey, 1);
}
return;
};
const moveFC = (sr, sc, er, ec, tmp, same) => {
// 이동 시 카운터 증가를 통해 이동 경로 관리
let cnt = tmp;
if (!same) {
isCrushed(sr, sc, cnt);
}
// 행 이동 처리
if (sr < er) {
while (sr < er) {
cnt++;
sr++;
isCrushed(sr, sc, cnt);
}
} else {
while (sr > er) {
cnt++;
sr--;
isCrushed(sr, sc, cnt);
}
}
// 열 이동 처리
if (sc < ec) {
while (sc < ec) {
cnt++;
sc++;
isCrushed(sr, sc, cnt);
}
} else {
while (sc > ec) {
cnt++;
sc--;
isCrushed(sr, sc, cnt);
}
}
return cnt;
};
// 경로마다 출발점과 도착점으로 이동
const lenR = routes[0].length;
for (const route of routes) {
let same = false;
let count = 0;
for (let i = 1; i < lenR; i++) {
const start = route[i-1];
const end = route[i];
const [sr, sc] = points[start-1];
const [er, ec] = points[end-1];
count = moveFC(sr, sc, er, ec, count, same);
same = true;
}
}
let answer = 0;
for (const [key, value] of visited) {
if (value > 1) {
answer++;
}
}
return answer;
}
풀이 방법
- 같은 시간에 같은 지점을 key로 만들어서 객체에 저장하는 형태로 진행했다.
- 1, 1 지점에 1초에 지나가게 될 경우 "1,1,1"이 키가 된다.
- 이미 지나갔다면 해당 위치의 value값에 1을 더해주고 아니면 1로 초기화시킨다.
- 마지막에 values 중에 2이상인 값을 찾고 answer++를 해주면 끝!
느낀점
- 이 과정에서 그냥 객체 {}와 map()을 사용해서 비교해봤다.
- {}는 가장 오래걸리는 테스트케이스가 2000ms 이상이 나왔다.
- 하지만 map()은 700ms이 나오면서 더 효율적이라는 것을 알 수 있었다.
'알고리즘 > 풀었지만 다시 보기' 카테고리의 다른 글
프로그래머스 [Lv. 3] [PCCP 기출문제] 4번 / 수레 움직이기 {언어 : Python} (1) | 2024.10.09 |
---|---|
프로그래머스 [Lv. 3] 퍼즐 조각 채우기 {언어 : JavaScript} (5) | 2024.10.08 |
프로그래머스 [Lv. 3] n + 1 카드게임 {언어 : JavaScript} (3) | 2024.09.13 |
프로그래머스 [Lv. 3] [PCCP 기출문제] 4번 / 수식 복원하기 {언어 : Python} (1) | 2024.09.12 |
프로그래머스 [Lv. 3] 카드 짝 맞추기 {언어 : Python} (0) | 2024.09.04 |