[프로그래머스/Lv. 3] 야근 지수 (JAVA)
🔺 문제
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
🔺 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
import java.util.*;
class Solution {
public long solution(int n, int[] works) {
PriorityQueue<Integer> pq = new PriorityQueue<>(Collections.reverseOrder()); // 내림차순 정렬
for(int w : works) pq.add(w);
while(n > 0) {
int work = pq.poll();
if(work == 0) break;
work -= 1; // 일, 1시간 줄이기
pq.add(work);
n -= 1; // 남은 작업 시간 - 1
}
// 제곱들의 값 구하기
long answer = 0;
while(!pq.isEmpty()) {
answer += Math.pow(pq.poll(), 2);
}
return answer;
}
}
|
cs |
🧩 해결 아이디어
• 우선순위 큐
1. 작업량 배열을 내림차순으로 정렬하도록 우선순위 큐를 활용한다.
ㄴ 우선순위 큐에 작업량 배열의 모든 값을 집어넣는다.
2. n이 0보다 클 때까지 아래의 과정을 반복한다. (또는 n번 동안 수행해도 된다.)
ㄴ 맨 앞에 위치한 가장 큰 값을 뽑아 갱신한다. (🔔)
ㄴ 이 값이 0이 아니라면 작업량을 1만큼 처리하고, 우선순위 큐에 다시 값을 넣는다. (그럼 알아서 내림차순 정렬함)
ㄴ 남은 작업 시간도 1만큼 처리한다.
3. 남은 일의 작업량들을 제곱해 더해 야근 피로도를 계산한다.
🔺 다른 풀이들
- while문 안 사용하시고 for문 사용하셔서 조오금 다르다. 그리고 이게 조금 더 빠르기도 함!
[프로그래머스/3단계/자바] 야근 지수 (정확성 O, 효율성 O)
야근지수 https://programmers.co.kr/learn/courses/30/lessons/12927 코딩테스트 연습 - 야근 지수 | 프로그래머스 회사원 Demi는 가끔은 야근을 하는데요, 야근을 하면 야근 피로도가 쌓입니다. 야근 피로도는 야
mapled.tistory.com
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
import java.util.*;
class Solution {
public long solution(int n, int[] works) {
PriorityQueue<Integer> pq = new PriorityQueue<>(Collections.reverseOrder()); // 내림차순 정렬
for(int w : works) pq.add(w);
for(int i = 0 ; i < n ; i++) {
int max = (int)pq.poll();
if(max <= 0) break;
pq.add(max - 1);
}
// 제곱들의 값 구하기
long answer = 0;
while(!pq.isEmpty()) {
answer += Math.pow(pq.poll(), 2);
}
return answer;
}
}
|
cs |
💬 느낀 점
와 우선순위 큐만 생각해냈어도 진짜 빨리 풀 수 있는 문제였는데....
나는 int형 배열 내림차순으로 정렬하려고 람다식이랑 stream 메소드까지 찾아봤었따....ㅎㅎ
암튼 담엔 아이디어가 더 빨리 떠오르길 바라며,,,
1회독 | 2회독 | 3회독 | 4회독 | 5회독 |
V |
(참고)
[프로그래머스] 야근 지수 (JAVA)
문제 출처 - Programmers 문제는 여기 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매
blackvill.tistory.com