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 | 31 |
Tags
- SQL 고득점 KIT
- Python
- 깊이 우선 탐색
- 너비 우선 탐색
- 오블완
- 백준
- javascript
- group by
- Lv. 3
- programmers
- 티스토리챌린지
- join
- 프로그래머스
- Lv. 1
- DP
- Baekjoon
- softeer
- 소프티어
- dfs
- level 3
- Java
- Lv. 2
- 파이썬
- 자바스크립트
- SQL
- LEVEL 2
- bfs
- Lv. 0
- Dynamic Programming
- 동적계획법
Archives
- Today
- Total
몸과 마음이 건전한 SW 개발자
프로그래머스 [Lv. 2] 완전범죄 {언어 : JavaScript} 본문
728x90
문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/389480#
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
정답 코드
function solution(info, n, m) {
let answer = 0;
const lenI = info.length;
info.sort(([a, b], [c, d]) => c/d - a/b);
let [cntA, cntB] = [0, 0];
for (let i = 0; i < lenI; i++) {
const [showA, showB] = info.at(i);
if (cntB + showB < m) {
cntB += showB;
} else {
cntA += showA;
}
}
if (cntA >= n) {
answer = -1;
} else {
answer = cntA;
}
return answer;
}
풀이 방법
- A에게 부담이 되는 흔적부터 정렬한다.
- 여기서 A에게 부담이 되는 흔적이란 무작정 흔적의 개수가 많은 것을 의미하지 않는다.
- 예를 들어 [2, 3]과 [1, 1]이 있다면 A에게 부담이 되는 것은 [1, 1]이 된다.
- 왜냐하면 B가 3의 흔적을 남기면 A의 흔적 2개를 지우는 것이지만
- B가 [1, 1]씩 3번 흔적을 남기면 A의 흔적 3개를 지울 수 있다.
- 따라서 [a흔적, b흔적] 을 a흔적을 b흔적으로 나눈 값이 큰 순으로 정렬한다.
- 정렬된 값을 B의 최대 수용량만큼 채운다.
- 나머지는 A에 채운다.
- A가 n 이상이면 answer = -1
- 아니라면 A의 흔적만큼 반환하면 끝!
느낀점
- 처음엔 마냥 A에게 많은 흔적이 되는 것 부터 지웠다.
- 오랜만에 프로그래머스 lv2문제들이 올라와서 남김없이 풀어보려고 한다.
- 시간복잡도를 계산하지 않았다면 이걸 dfs로 풀었을 것 같다.
- dfs로 접근하게 된다면 흔적을 남길지 지울지 하는 선택지 2개
- 총 info의 길이 40개
- 2^40 = 1,099,511,627,776
- 이렇게 되면 시간초과를 해결할 수 없다.
728x90
'알고리즘 > 풀었지만 다시 보기' 카테고리의 다른 글
프로그래머스 [Lv. 2] 비밀 코드 해독 {언어 : JavaScript} (0) | 2025.03.23 |
---|---|
백준 GOLD 4 [10830번] 행렬 제곱 {언어 : Python} (0) | 2025.02.04 |
백준 GOLD 3 [15684번] 사다리 조작 {언어 : Python} (0) | 2025.01.23 |
코드트리 | HashMap / 순서를 바꾸었을 때 같은 단어 그룹화하기 {언어 : Python} [가장 작은 시공간복잡도] (0) | 2025.01.17 |
코드트리 | HashMAP / 원소의 합이 0 {언어 : Python} (0) | 2025.01.16 |