해결 과정
20분 소요. 지난 번에 풀었던 문제와 IDEA가 비슷한데 더 쉽게 접근 가능해서 바로 풀린 듯. 문제 해설에 나와있던 것 처럼, completeList를 먼저 만들어두고, 하나 씩 비교하면서 answer 리스트에 append 했다. 스택/큐 카테고리에 있었는데 List 사용하는 것 때문에 이 카테고리에 있는 건가?
나의 풀이
import math
def solution(progresses, speeds):
answer = []
completeList = []
for index, progress in enumerate(progresses):
completeList.append(math.ceil((100 - progress) / speeds[index]))
temp = completeList[0]
count = 1
for i in range(1, len(completeList)):
if temp < completeList[i]:
temp = completeList[i]
answer.append(count)
count = 1
else:
count += 1
answer.append(count)
return answer
다른 풀이
def solution(progresses, speeds):
Q = []
for p, s in zip(progresses, speeds):
temp = -((p - 100) // s) # 5, 10, 1, 1, 20, 1
if len(Q) == 0 or Q[-1][0] < temp: # 첫 번째 원소도 여기서 처리
print("if Q: ", Q)
Q.append([temp, 1])
else:
print("else Q: ", Q)
Q[-1][1] += 1
print(Q)
return [q[1] for q in Q]
zip을 활용해서 두 리스트 한 번에 같이 접근할 수 있도록,
첫번째 원소 for문 밖에서 따로 빼준게 아니라, len(Q) == 0 조건 줌으로써 for 문 내에서 같이 해결할 수 있도록,
음수 몫을 활용해서 math.ceil(올림) 을 대신함. 몫은 좌표 값에서 왼쪽으로 가기 때문.
IDEA
올림, 반올림, 내림 python에서 어떻게 하는지
import math
올림 - math.ceil()
내림 - math.floor()
반올림 - round()
'Coding Test > 문제 풀이' 카테고리의 다른 글
[문제 풀이] 괄호 변환 (0) | 2022.02.04 |
---|---|
[문제 풀이] H-Index (0) | 2022.01.28 |
[문제 풀이] 오픈채팅방 (0) | 2022.01.24 |
[Algorithm] 문자열 압축 (0) | 2022.01.21 |
[Algorithm] 빗물 (백준 14719) (0) | 2022.01.19 |