728x90
프로그래머스 알고리즘 고득점 Kit의 스택&큐 문제 중 하나인 '기능 개발'을 자바로 풀어보았다.
https://school.programmers.co.kr/learn/courses/30/lessons/42586
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
아래와 같이 코드를 작성했다. 현재 element(i번째 element)가 100 이상이 되기 위해서 필요한 일수를 구하고, 그 일수에 이미 완성되어 있는 뒤 기능들의 수를 세어주는 방식을 사용했다.
다른 사람들의 풀이를 보니, 일수를 구해준 다음 해당 일수의 index에 1을 더해주는 방식을 사용하기도 했다. 하지만 이렇게 하면 코드는 훨씬 간단해지지만 시간복잡도 측면에서 효율성이 떨어진다.
추가로 나는 days를 구할 때, 그냥 int 형태로 값을 넣어서 만약 remain이 speed로 나누어 떨어지지 않는 경우 1을 더해주는 방식으로 나머지가 있는 경우를 처리했다. 하지만 다른 코드를 보니, Math.ceil()과 double 형태의 값을 이용해서 아래와 같이 작성했다.
double remain = (100 - progresses[i]) / speeds[i];
int days = Math.ceil(remain);
코드도 간단하고 직관적으로 이해하기도 쉬운 좋은 방법이라고 생각했다.
import java.util.*;
class Solution {
public int[] solution(int[] progresses, int[] speeds) {
List<Integer> answer = new ArrayList<Integer>();
int i = 0;
int len = progresses.length;
while (i < len) {
int remain = 100 - progresses[i];
int days = remain / speeds[i];
if (remain % speeds[i] != 0) days++;
int count = 1;
while ((i+count) < len
&& progresses[i+count] + speeds[i+count] * days >= 100)
count++;
i += count;
answer.add(count);
}
return answer.stream()
.mapToInt(Integer::intValue).toArray();
}
}
728x90
'기초 공부 (언어 및 알고리즘) > 알고리즘 (Java)' 카테고리의 다른 글
[프로그래머스/Java] 주식가격(스택/큐) 풀이 (0) | 2025.03.07 |
---|---|
[프로그래머스/Java] 다리를 지나는 트럭(스택/큐) 풀이 (0) | 2025.03.07 |
[프로그래머스/Java] 같은 숫자는 싫어(스택/큐) 풀이 (0) | 2025.03.06 |
[프로그래머스/Java] 완주하지 못한 선수(Hash 문제) 풀이 (1) | 2025.03.04 |
[프로그래머스/Java] 베스트앨범(Hash 문제) 풀이 (0) | 2025.03.04 |