java
import java.util.ArrayList;
class Solution {
public int[] solution(int[] progresses, int[] speeds) {
ArrayList<Integer> list = new ArrayList<Integer>();
int temp = 0;
int count = 0;
int length = progresses.length;
for (int i = 0; i < length; i++) {
int day = (int) Math.ceil((float) (100 - progresses[i]) / speeds[i]);
if (temp >= day) {
count++;
} else {
if (count> 0) list.add(count);
temp = day;
count = 1;
}
}
list.add(count);
return list.stream().mapToInt(Integer::intValue).toArray();
}
}
// Stream을 활용해보고 싶었으나 이 이후엔 어떻게 하면 좋을지 답이 안 보였다.
int[] days = IntStream.range(0, progresses.length)
.map(i -> (int) Math.ceil((float) (100 - progresses[i]) / speeds[i]))
.toArray();
Arrays.stream(days).forEach(d -> System.out.println(d));
Math.ceil 과 (float) 형 변환에서 에러가 났다. (testcase 11번)
- (int) Math.ceil((float) (100 - progresses[i]) / speeds[i])
그 외에는 내림 계산이었을 때(그냥 바로 int 형으로 변환)도 패스가 되었다.
자바는 여러모로 역시 타입 체크를 잘 해야하는데, 아직 많이 어렵다.
List 에서 Array로 형 변환도 map을 이용했지만 결국은 for문을 돌린 거나 다름이 없지 않나?
그리고 int와 Integer 간의 형 변환도 어렵다. 자동 형변환이 되는 거 아닌가?
- List 컬렉션은 primitive 형을 가질 수 없다고 한다. 결국 변환 과정이 필요한 듯 하다.
- primitive 타입과 Wrapper 객체 간에 변환은 자바 컴파일러가 Autoboxing을 수행함으로써 발생하며, 비용이 발생한다.
- list.stream().mapToInt(Integer::intValue).toArray();
- list.toArray(new Integer[] (list.size());
- 이 경우에는 Integer 형 배열을 생성하기에 int 형 배열로 바로 호환(?)이 되지 않는다.
- 즉, list.size()로 적절한 크기의 int 형 배열을 생성하고 for 문으로 하나씩 담아줄 수 있다.
미처 생각지도 못한 부분이어서, 앞으론 더 꼼꼼히 확인해야 겠다는 반성을 하면서, 자바 타입에 대해서도 코테 연습을 하면서 다시 공부를 해야될 것 같다.
python
def solution(progresses, speeds):
answer = []
days = [(100-p)//s if (100-p)%s==0 else (100-p)//s +1 for p, s in zip(progresses, speeds)]
from collections import deque
days = deque(days)
count = 1
d = days.popleft()
while len(days)>0:
if d >= days[0]:
days.popleft()
count +=1
else:
answer.append(count)
d = days.popleft()
count = 1
answer.append(count)
return answer
몇 달 전에 풀었던 파이썬 코드인데...
내 머리의 한계인 걸까, 놀라울 만큼 로직이 그냥 그대로다;; 앞으로 열심히 공부해서 좀 더 발전해야겠다는 생각이 든다.
'Algorithm > 프로그래머스' 카테고리의 다른 글
[힙(Heap)] 더 맵게 (0) | 2021.12.16 |
---|---|
[깊이/너비 우선 탐색(DFS/BFS)] 타겟 넘버 (0) | 2021.12.07 |
[해시] 위장 (0) | 2021.09.24 |
[해시] 전화번호 목록 (0) | 2021.09.16 |
[해시] 완주하지 못한 선수 (0) | 2021.09.15 |