https://school.programmers.co.kr/learn/courses/30/lessons/42586
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
- 나의 풀이
✅ 작업완료까지 필요한 날짜 Queue ➡︎ queue
- 남은 진도 = 100 - progresses[i]
- 남은 진도 / 작업 속도 ➡︎ ex) 3.5 , 3.333 등의 경우, 4일이 필요 ➡︎ 오름 Math.ceil
- 남은 날 = (int) Math.ceil((100.0 - progresses[i]) / speeds[i]);
- Math 클래스의 메소드 아래 표 참고
메소드 | 설명 |
ceil(double a) | 올림 |
floor(double a) | 내림 |
round(double a) | 반올림 |
abs() | 절댓값 |
random() | 0.0 ~ 1.0 사이 임의의 doublegud 데이터 생성, 반환 |
max(a, b) | 최댓값 |
min(a, b) | 최솟값 |
pow(double, a, double b) | 제곱 a^b |
sqrt(double a) | 제곱근 |
subtractExact( int/long a, int/long b) | 차이 b-a |
✅ queue 의 남은 날짜 비교
✅ 배포에 포함된 기능 수 ➡︎ cnt
✅ 먼저 배포 되어야 하는 기능의 날짜 _ 앞 ➡︎ first
- ex) queue ➡︎ 먼저 배포되어야 하는 쪽 : (앞) 3 , 3/2, 7 (뒤)
- 뒤 남은 날짜 <= 앞 남은 날짜
- ex) 먼저 배포되어야 하는 쪽 : (앞) 3 , 3/2 (뒤) 일 때
- 3/2는 앞의 3과 함께 배포될 수 있으므로
- cnt++
- queue에서 3을 빼준다.
- 뒤 남은 날짜 > 앞 남은 날짜
- ex) 먼저 배포되어야 하는 쪽 : (앞) 3/2 , 7 (뒤) 일 때
- 7은 앞의 3/2과 함께 배포될 수 없으므로
- 쌓인 cnt를 answer에 넣어준다. (배포됨)
- 초기화 cnt=1; first=queue.poll();
- 나의 코드
import java.util.*;
class Solution {
public ArrayList<Integer> solution(int[] progresses, int[] speeds) {
ArrayList<Integer> answer = new ArrayList<>();
ArrayDeque<Integer> queue = new ArrayDeque<>();
//작업완료까지 필요한 날짜
for(int i=0; i<progresses.length; i++) {
int days = (int) Math.ceil((100 - progresses[i]) / (double) speeds[i]);
queue.add(days);
}
//System.out.println(queue);
//배포에 포함된 기능 수
int cnt = 0;
//먼저 배포 되어야 하는 기능의 날짜 _ 앞
int first = queue.peek();
//남은 날짜 비교 _ 앞, 뒤
while(!queue.isEmpty()) {
if(queue.peek() <= first) {
// 뒤 <= 앞
cnt++;
queue.poll();
} else {
// 뒤 > 앞
answer.add(cnt);
// 초기화
//cnt = 0;
cnt = 1;
first = queue.poll();
}
}
answer.add(cnt);
return answer;
}
}
'공부 > 알고리즘' 카테고리의 다른 글
2019 KAKAO BLIND RECRUITMENT > 오픈채팅방 (0) | 2024.11.06 |
---|---|
구명보트 (0) | 2024.11.05 |
숫자 짝꿍 (0) | 2024.11.03 |
2019 카카오 개발자 겨울 인턴십 > 크레인 인형뽑기 게임 (0) | 2024.11.02 |
N-Queen (0) | 2024.11.01 |