Notice
Recent Posts
Recent Comments
Link
250x250
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- IT개발캠프
- typescript
- App Runner
- ip
- 타입스크립트
- 리액트
- 프로세스
- CS
- react
- 메모리
- 유데미
- html
- 프로그래머스
- React.js
- 스레드
- BFS
- 알고리즘
- javascript
- cs #네트워크
- 웅진씽크빅
- 인사이드아웃
- 해시
- 프로젝트캠프
- #프로젝트캠프 #프로젝트캠프후기 #유데미 #스나이퍼팩토리 #웅진씽크빅 #인사이드아웃 #IT개발캠프 #개발자부트캠프 #리액트 #react #부트캠프 #리액트캠프
- Algorithm
- 스나이퍼팩토리
- 자바스크립트
- 개발자부트캠프
- 네트워크
- react-query
Archives
- Today
- Total
Bin's Blog
[프로그래머스] Level2 - 과제 진행하기(Javascript) 본문
728x90
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
📝문제 요약
1️⃣ 과제는 시작하기로 한 시작이 되면 시작한다.
2️⃣ 새로운 과제를 시작할 시각이 되었을 때, 기존에 진행 중이던 과제가 있다면 진행 중이던 과제를 멈추고 새로운 과제를 시작한다.
3️⃣ 진행중이던 과제를 끝냈을 때, 잠시 멈춘 과제가 있다면, 멈춰둔 과제를 이어서 진행한다.
4️⃣ 멈춰둔 과제가 여러 개일 경우, 가장 최근에 멈춘 과제부터 시작한다. 과제를 끝낸 순서대로 이름을 배열에 담아 return해라
📚중요 포인트
1️⃣ 처음에 문제를 보자마자 우선순위 큐로 해결해야 하는 문제인 줄 알았다. 그러나 그렇게까지 할 필요가 없다.
2️⃣ 시간 계산을 위해서 시 => 분으로 바꿔야 한다. 그래서 함수를 만들어줬다.
3️⃣ 진행중인 과제가 현재 시작하려는 과제보다 오래 걸린다면 현재 시작하는 과제의 소요 시간을 진행중인 과제에 더해준다.
✅ 성공 코드
function timeToMin(time) {
// 인자로 들어온 값이 (00:00)의 형식이니 split 메서드 + 시간 계산을 위해 문자열 => 숫자로 변경
const [hour, minute] = time.split(":").map(Number);
return hour * 60 + minute;
}
function solution(plans) {
const sortedPlans = plans
// 과제계획을 돌면서, [과제, 시작시간, 걸리는 시간]을 시간계산을 위해서 함수를 이용해서 바꾼다
.map(([subject, time, progress]) => [subject, timeToMin(time), Number(progress)])
// 내림차순으로 정렬
.sort((a,b) => b[1] - a[1]);
let stack = [];
// 모든 과제가 끝날때까지 돌아준다.
while (sortedPlans.length > 0) {
// 시작 순서가 빠른 순서부터 꺼낸다.
let [subject, time, progress] = sortedPlans.pop();
// 만약에 진행 중인 과제가 현재 시작하려는 과제보다 크면
// 진행 중인 과제 + 소요시간
stack.forEach((val) => {
if (val[1] > time) {
val[1] += progress;
}
})
// [과제, 시작 시간 + 소요시간]을 더해서 다음 계산을 진행한다.
stack.push([subject, time + progress]);
}
// 모든 계산을 마쳤으면 오름차순으로 정렬한 후에 과목만 추출해서 return한다.
return stack.sort((a, b) => a[1] - b[1]).map((el) => el[0]);
}
📔느낀점
👉 자료구조를 먼저 생각하지 말고 문제 분석을 해서 자료구조가 필요한지를 고민해보자.
728x90
'Algorithm' 카테고리의 다른 글
[프로그래머스] Level2 - 두 원 사이의 정수 쌍(Javascript) (0) | 2023.11.07 |
---|---|
[프로그래머스] Level2 - 우박수열 정적분(Javascript) (0) | 2023.11.03 |
[프로그래머스] Level2 - 디펜스 게임(Javascript) (0) | 2023.11.02 |
[프로그래머스] Level2 - 리코쳇 로봇(Javascript) (0) | 2023.10.30 |
[프로그래머스] Level3 - 베스트앨범(Javascript) (0) | 2023.09.14 |