-
[프로그래머스 / JAVA] 기능개발 (정답풀이)코딩/코테준비(JAVA) 2025. 2. 12. 22:38
막히거나 틀린 부분이 있더라도, 그냥 그대로 내가 스스로 작성한 부분들을 기록하고 있다.
미래의 복기용으로 나를 위해 적어둔 기록이다.
(이 사람은 어떻게 실패하거나 성공했는지 살펴보는 용도로도 적합할 것 같다.)작업 진도와 작업 속도(하루당)가 주어지면 며칠 만에 해당 작업을 끝낼 수 있는지 구할 수 있다.
나는 아래와 같이 삼항 연산자(조건? 조건이 참이면 실행: 조건이 참이 아니면 실행)를 사용해서 구현했다.
Math.ceil() 메서드로 올림 연산을 이용해 풀 수도 있다.
나는 몇일만에 작업을 끝낼 수 있는지에 대한 정보들을 큐에 넣고, 배포 가능일의 최댓값을 담는 변수를 설정해 두었다.
최댓값이 갱신되기 전까지는 작업들을 쌓아두다가(cnt를 증가시키기), 최댓값이 갱신될 때 cnt를 ArrayList에 추가시켰다.
그리고는 cnt를 다시 1(최댓값에 해당하는 작업)로 초기화시키는 방식으로 구현했다.
이틀 전에 푼 문제이기도 하고, 말로 설명하려니까 뭔가 정리가 쉽지 않다.
그리고 마지막에 Integer의 ArrayList를 stream으로 변환시켜서 int형의 배열로 반환하는 부분은 여러 번 봤는데도 여전히 익숙하지가 않다. 계속 따라 쳐봐서 익숙해져야겠다.
다음부터는 이전처럼 코드에 주석을 달아놔야겠다.
급하게 푸느라 이번에는 못 달았다.
import java.util.Arrays; import java.util.ArrayDeque; import java.util.ArrayList; class Solution { public int[] solution(int[] progresses, int[] speeds) { int n = progresses.length; int[] daysLeft = new int[n]; for (int i = 0; i < n; i++) { daysLeft[i] = ((100 - progresses[i]) % speeds[i]) == 0 ? ((100 - progresses[i]) / speeds[i]) : ((100 - progresses[i]) / speeds[i]) + 1; } // System.out.println(Arrays.toString(daysLeft)); ArrayDeque<Integer> queue = new ArrayDeque<>(); for(int i = 0; i < n; i++) { queue.addLast(daysLeft[i]); } ArrayList<Integer> result = new ArrayList<>(); int max = -1; int cnt = 0; while (!queue.isEmpty()) { if (max >= queue.getFirst()) { queue.pollFirst(); cnt++; } else { if(cnt != 0) result.add(cnt); cnt = 1; max = queue.pollFirst(); } } if (cnt != 0) { result.add(cnt); } return result.stream().mapToInt(Integer::intValue).toArray(); } }
하루에 한 문제 이상 꾸준히 풀자.실수는 많이 할수록, 더 많이 배울 수 있다.
https://school.programmers.co.kr/learn/courses/30/lessons/42586프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
'코딩 > 코테준비(JAVA)' 카테고리의 다른 글
[프로그래머스 / JAVA] 신고 결과 받기 (정답 풀이) (0) 2025.02.19 [프로그래머스 / JAVA] 카드 뭉치 (정답 풀이) (0) 2025.02.12 [프로그래머스 / JAVA] 크레인 인형뽑기 게임 (정답 풀이) (0) 2025.02.06 [프로그래머스 / JAVA] 주식 가격 (정답 풀이) (1) 2025.02.02 [프로그래머스 / JAVA] 짝지어 제거하기 (정답 코드) (0) 2025.02.01