Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 2108_통계학
- Eclipse
- dockercompose
- 백준
- jenkins
- Java
- SpringBoot
- 알고리즘
- 프로그래머스
- 소가길을건너간이유6
- 날짜일수
- documentationpluginsbootstrapper
- CMD
- Error
- 14466
- Error fetching remote repo 'origin'
- 자바
- 호석이두마리치킨
- docker
- EC2
- 18222
- 20055
- 설정
- 이산수학
- 21278
- to display the conditions report re-run your application with 'debug' enabled
- 별자리 만들기
- 이클립스
- 2167. 2차원 배열의 합
- 투에모스문자열
Archives
- Today
- Total
계단을 오르듯이
[JAVA] 기능 개발 본문
스택을 이용해 풀이하였다.
여기서 가장 중요했던 것!!!
Math.round() 는 long을 반환하므로 (int) Math.round()로 형변환을 해주어야 int형이 된다는 것.
두번째, Math.round()는 반올림!!!! 이 문제에서는 반올림이 아닌 0.1의 소수점이 존재해도 올림을 해주어야 하는 날짜 계산이기에 Math.ceil()을 이용해야 했다!!!
Math.ceil()은 무조건 올림이다.
날짜 계산은 100에서 작업완성도를 빼준 후 작업속도로 나누어 나머지가 발생하면 올림을 하여 날짜를 구하였다.
해당 일자가 현재 스택 안에 있는 날짜보다 크면 스택에 있는 작업을 빼주고, 같거나 작을 시 다시 스택에 넣어주었다.
스택에 들어있는 작업들은 모두 한번에 완성될 작업들을 의미한다.
마지막 스택은 날짜가 0이 아니라면 항상 있으므로 마지막 스택도 모두 처리해주어야 한다.
import java.util.*;
class Solution {
public int[] solution(int[] progresses, int[] speeds) {
int[] answer = {};
Stack<Integer> stack = new Stack<>();
List<Integer> list = new ArrayList<>();
int max = 0; // 자연수이므로 최소를 0으로
for(int i=0;i<progresses.length;i++){
int num = (int) Math.ceil((100 - progresses[i]) / (speeds[i]*1.0));
if(stack.isEmpty()){
if(max >= num){
list.add(1);
}else{
stack.push(num);
max = num;
}
}else{
if(max < num){
list.add(stack.size());
stack.clear();
max = num; // 다음 타자로 넘겨주기
}
stack.push(num);
}
}
// 마지막 스택빼내기
if(!stack.isEmpty()){
list.add(stack.size());
}
int size = list.size();
answer = new int[size];
for(int i=0;i<size;i++){
answer[i] = list.get(i);
}
return answer;
}
}
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[JAVA] 네트워크 (0) | 2022.01.08 |
---|---|
[JAVA] 타겟 넘버 (0) | 2022.01.08 |
[JAVA] 소수 찾기(완전탐색) (0) | 2022.01.07 |
[JAVA] 가장 큰 수 (0) | 2022.01.07 |
[JAVA] 위장 (0) | 2022.01.07 |