티스토리 뷰
programmers.co.kr/learn/courses/30/lessons/42586
문제는 위와 같으며 주어진 작업의 수만큼 for 문을 돌면서 작업을 완료하는데 걸리는 일 수를 구한 뒤 큐에 저장합니다. 이때 큐의 가장 앞에 있는 값과 현재 값을 비교해서 더 작은 경우에만 큐의 마지막에 값을 추가하고 현재 값이 더 큰 경우에는 큐에 있는 값을 모두 빼면서 개수를 세고 해당 개수를 결과 배열에 저장하면 문제를 해결할 수 있습니다.
파이썬 코드는 다음과 같습니다.
def solution(progresses, speeds):
queue = []
answer = []
for i in range(len(progresses)):
wd = wd = (100 - progresses[i]) // speeds[i] # 작업 완료 일 구하기
if (100 - progresses[i]) % speeds[i] != 0:
wd += 1
if len(queue) == 0 or queue[0] >= wd: # 큐의 가장 앞에 있는 작업 완료 일과 비교하여 작은 경우에만 큐에 저장
queue.append(wd)
else:
count = 0
while queue: # 큐에 값이 없을 때까지 pop 하고 그 수를 계산
queue.pop(0)
count += 1
answer.append(count) # 결과 배열에 지금까지 큐에 있던 값의 수를 저장
queue.append(wd) # 현재 작업의 완료일을 다시 큐에 저장
if len(queue) != 0: # 큐에 값이 남아있는 경우 값을 모두 제거하고 그 개수를 계산해 결과 배열에 저장
count = 0
while queue:
queue.pop(0)
count += 1
answer.append(count)
return answer
자바 코드는 다음과 같습니다.
import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Queue;
class Solution {
public int[] solution(int[] progresses, int[] speeds) {
Queue<Integer> queue = new ArrayDeque<>();
ArrayList<Integer> result = new ArrayList<>();
for (int i = 0; i < progresses.length; i++) {
int wd = (100 - progresses[i]) / speeds[i];
if ((100 - progresses[i]) % speeds[i] != 0) {
wd += 1;
}
if (queue.isEmpty() || queue.peek() >= wd) {
queue.add(wd);
} else {
int count = 0;
while (!queue.isEmpty()) {
queue.poll();
count++;
}
result.add(count);
queue.add(wd);
}
}
if (!queue.isEmpty()) {
int count = 0;
while (!queue.isEmpty()) {
queue.poll();
count++;
}
result.add(count);
}
int[] answer = result.stream().mapToInt(i -> i).toArray();
return answer;
}
}
'알고리즘' 카테고리의 다른 글
[알고리즘 / 백준] 2565 - 전깃줄 (0) | 2020.12.06 |
---|---|
[알고리즘 / 백준] 2156 - 포도주 시식 (0) | 2020.12.06 |
[알고리즘 / 백준] 1697 - 숨바꼭질 (0) | 2020.12.01 |
[알고리즘 / 백준] 1260 - DFS와 BFS (0) | 2020.12.01 |
[알고리즘 / 백준] 1495 - 기타리스트 (0) | 2020.11.30 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- EC2
- BFS
- map
- CodeCommit
- spring
- CodeDeploy
- DFS
- Combination
- 소수
- java
- permutation
- array
- ionic
- 프로그래머스
- 수학
- ECR
- SWIFT
- programmers
- CodePipeline
- Dynamic Programming
- 에라토스테네스의 체
- search
- string
- 조합
- Baekjoon
- Algorithm
- cloudfront
- AWS
- 순열
- sort
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
글 보관함