프로그래머스 - 기능개발 (Level 2)
2024. 2. 21. 18:01ㆍ코딩테스트 정리(자바)
728x90
첫 풀이
import java.util.*;
class Solution {
public int[] solution(int[] progresses, int[] speeds) {
List <Integer> list=new ArrayList<>();
int max=0;
int day=0;
int cnt=0;
for(int i=0;i<progresses.length;i++){
day=0;
double cal=(100-progresses[i])/(double)speeds[i];
day=(int)Math.ceil(cal);
if(max==0) //초기값 세팅
max=day;
if(max<day){
max=day;
list.add(cnt);
cnt=1;
}
else{
cnt++;
}
}
list.add(cnt); //남아있는 아이 추가
int[] answer = new int[list.size()];
for(int i=0;i<list.size();i++){
answer[i]=list.get(i);
}
return answer;
}
}
1. 자바 올림함수
: Math.ceil()
-> 소수점이하를 올린다
2. 정수형 끼리 나눌 땐 소수점이 없어지므로 올림이 발생하지 않는다
-> 둘 다 실수형이어야 함.
혹은 정수형 / 실수형 = 실수형
(정수형이 자동 형변환이 일어남)
큐를 이용한 풀이
import java.util.*;
class Solution {
public int[] solution(int[] progresses, int[] speeds) {
List <Integer> list=new ArrayList<>();
Queue <Integer> q=new LinkedList<>();
int day=0;
int cnt=0;
for(int i=0;i<progresses.length;i++){
day=0;
double cal=(100-progresses[i])/(double)speeds[i];
day=(int)Math.ceil(cal);
if(!q.isEmpty() && q.peek()<day){
list.add(q.size());
q.clear(); //큐 싹 제거
}
q.add(day);
}
list.add(q.size());
int[] answer = new int[list.size()];
for(int i=0;i<list.size();i++){
answer[i]=list.get(i);
}
return answer;
}
}
1. 큐 생성하기
: Queue <Integer> q=new LinkedList <>();
큐는 링크드리스트를 이용하여 생성한다.
2. 큐에 원소 추가하기
: add() 혹은 offer()
3. 큐에 원소 삭제하기
: remove() : 첫 번째 값 제거
poll(): 첫 번째 값 반환하고 제거, 비어있다면 null 반환
clear() : 큐 초기화
4. 첫번째 원소 엿보기
: peek()
-> 스택은 마지막 원소를 엿보지만
큐는 첫번째 원소를 엿본다.
728x90
'코딩테스트 정리(자바)' 카테고리의 다른 글
| 프로그래머스 - 프로세스 (Level 2) (0) | 2024.02.26 |
|---|---|
| 프로그래머스 - 다리를 지나는 트럭 (Level 2) (0) | 2024.02.22 |
| 프로그래머스 - 주식가격(Level 2) (0) | 2024.02.20 |
| 프로그래머스 - 괄호 회전하기 (Level 2) (0) | 2024.02.19 |
| 프로그래머스 - 도둑질 (Level 3) (0) | 2024.02.08 |