728x90
📌 기능 개발
💡 나의 풀이
처음으로 2단계 문제를 풀어봤다. 앞으로 2단계 문제를 꾸준히 풀어야 하는데 괜찮을까.. 한번 도전해보자!
(문제의 이해도를 높이기 위해 나중에 progress 변수명 대신 queue를 사용했다.)
- 완성되기까지 남은 진도율에서 현재 속도만큼 일했을 때 며칠만에 완성할 수 있는지 구하기. (나는 식으로 변환할 때 나머지가 없으면 몫을 그냥
append시키고 나머지가 있으면몫 + 1해준 다음append했다.) - 이중
while문을 선언했는데 그 이유는 내 다음 순서가 나보다 값이 작더라도 내가 먼저 나가야 같이 나갈 수 있고 만약, 연속으로 나가야 할 일이 생길 때를 대비해서 이중while문으로 작성했다. (break해주는 것도 잊지 말자.) queue가 있다는 조건 하day가 1씩 증가하면서 먼저 배포되어야 하는 순서(0번째)가day와 같거나 크다면pop시키고 그렇지 않으면 반복문을 종료시켰다. (나중에queue가 없는데 비교하면 오류가 생기므로queue가 있을 때라는 조건을 걸어줘야 한다.)- 두 번째
while문 종료 후에 빠져나간 기능이 있으면 몇 개인지 체크하여result로 옮기고stack은 원 위치시킨다.
정답 판정을 맞고 다른 사람의 코드를 보니까 1번 과정을 조금 더 짧게 표현한 코드가 있었다. lambda함수로 range로 범위를 설정하여 구현했는데 내가 딱 구현하고 싶었던 기능이었다.
또, 나머지의 유무를 보는 대신 음수의 나눗셈을 사용하여 구현했는데 이때까지 음수는 써본 적이 없었지만 ceil라이브러리를 선언하는 것보다 간편해보여서 흥미로웠다. (참고로, python에서 음수 나눗셈(ex: -3 / 2 = -1.5, -3 // 2 = -2)은 음의 무한대로 반올림되는데 왜 그런지 잘 모르겠다면 다음 글을 살펴보자.)
# 나의 코드
def solution(progress, speeds):
rest_progress = list(map(lambda x: 100 - x, progress))
day = 1
queue, stack, result = [], [], []
for divisor, dividend in zip(speeds, rest_progress):
if not dividend % divisor:
queue.append(dividend // divisor)
else:
queue.append((dividend // divisor) + 1)
while queue:
while True:
if queue and queue[0] <= day:
stack.append(queue.pop(0))
else:
day += 1
break
if stack:
result.append(len(stack))
stack = []
return result
# 나의 수정코드
def solution(progress, speeds):
day = 1
stack, result = [], []
queue = list(map(lambda x: -((progress[x] - 100) // speeds[x]), range(len(progress))))
while queue:
while True:
if queue and queue[0] <= day:
stack.append(queue.pop(0))
else:
day += 1
break
if stack:
result.append(len(stack))
stack = []
return result반응형
'Algorithm > 프로그래머스(Programmers)' 카테고리의 다른 글
| [ 자바스크립트(JavaScript) ] 프로그래머스 level1 - 문자열을 정수로 바꾸기 (0) | 2021.07.23 |
|---|---|
| [ 자바스크립트(JavaScript) ] 프로그래머스 level1 - k번째 수 (0) | 2021.07.22 |
| [ 파이썬(python) ] 프로그래머스 level1 - 키패드 누르기 (0) | 2021.06.21 |
| [ 파이썬(python) ] 프로그래머스 level1 - 소수만들기 (0) | 2021.04.12 |
| [ 파이썬(python) ] 프로그래머스 level1 - 실패율 (0) | 2021.04.12 |
댓글