-
프로그래머스 기능개발 [JAVA]알고리즘 자료구조 2022. 8. 4. 22:20728x90
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
정답코드
import java.util.*; class Solution { public List<Integer> solution(int[] progresses, int[] speeds) { List<Integer> answer = new ArrayList<>(); Queue<Integer> que = new LinkedList<>(); for(int i = 0; i < speeds.length; i++){ int day = (int) Math.ceil((double)(100 - progresses[i]) / speeds[i]); que.add(day); } System.out.println(que); int i = 1; int temp = que.poll(); while(!que.isEmpty()){ int day = que.poll(); if(day <= temp){ i++; } else { answer.add(i); temp = day; i = 1; } } answer.add(i); // System.out.println(answer); return answer; } }
풀이
for(int i = 0; i < speeds.length; i++){ int day = (int) Math.ceil((double)(100 - progresses[i]) / speeds[i]); que.add(day); }
진행률 : 90 스피드 : 1
100 - 90 = 10/1(스피드) => 10일이 걸린다.
이걸 큐에다가 하나하나 넣어줍니다.
int i = 1; int temp = que.poll(); while(!que.isEmpty()){ int day = que.poll(); if(day <= temp){ i++; } else { answer.add(i); temp = day; i = 1; } } answer.add(i);
[5, 10, 1, 1, 20, 1] 초기의 temp는 5
5가 10(day)보다 작죠 answer에다가 1을 넣어줍니다.
여기까진 순탄한데 그 다음이 문제에요10 1 1 20 1 10부터 1 1 하다가 20을 만나면 answer에 넣어주는데
중요한게 10보다 큰걸 만날때까지인거지 1 <= 20이런식으로 가면 안됩니다.말로하니까 뭔가 설명을 못하겠는데
if(day <= temp){ temp = day; i++; }
이러지말라는거죠 테스트는 모두 통과되지만
20 9 8 10 30 일 경우 위 코드로하면 20 9 8 = 3 , 10 = 1 30 = 1
3,1,1이 나오게됩니다. 혹시 자꾸 틀리면 저걸 헷갈리지않았나 확인해보세요
728x90'알고리즘 자료구조' 카테고리의 다른 글
Summer/Winter Coding(~2018)영어 끝말잇기 (java) (0) 2022.08.03 2019 KAKAO BLIND RECRUITMENT 오픈채팅방 문제[Java,Js] (0) 2022.08.01 카카오 코딩테스트 아이디 추천(프로그래머스)[Java] (0) 2022.07.30 1654번 랜선자르기 파이썬 (0) 2021.12.16 백준 10816번 숫자카드 2 (0) 2021.12.08