프로그래머스 - 기능개발 (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