우주에서 글을 적어본다
99클럽 코테 스터디 23일차 TIL + 그리디(Greedy) 본문
[오늘의 학습 키워드 및 문제]
- 프로그래머스의 "마법의 엘리베이터" 문제를 풀었다.
- 그리디 알고리즘을 활용하여 푸는 문제다.
- 민수는 엘리베이터를 만들 게 아니라 마법 빗자루를 쓰는 슬기로움을 발휘하도록 하자.
[나의 코드]
def solution(storey):
answer = 0
while storey:
remainder = storey % 10
if (remainder == 5 and storey // 10 % 10 >= 5) or remainder > 5:
storey += 10 - remainder
answer += 10 - remainder
else:
answer += remainder
storey //= 10
return answer
일단 내가 처음에 쓴 코드에 다른 사람이 예쁘게 쓴 코드를 참고하여 예쁘게 바꿔서 작성했다.
더티 코드 장인으로서 한마디 덧붙이자면 역시 예쁜 코드가 이해하기에도 좋다.
storey를 10으로 나누는 이유는 가장 오른쪽 자릿수를 추출하고, 다음 자릿수로 이동하기 위해서이다.
16 % 10 = 6 ← 일의 자리부터 구할 수 있다.
세 가지 경우로 나눌 수 있다.
① 나머지가 5보다 큰 경우 → 더하는 게 더 빠르다.
② 나머지가 5인데 그다음 자릿수가 5 이상인 경우
③ 나머지가 5보다 작은 경우 → 빼는 게 더 빠르다.
문제는 2번이다. 이것도 45와 55를 비교해 보면 된다.
44 % 10 = 4 | 44 // 10 = 4 | 빼는 게 더 빠름 |
55 % 10 = 5 | 55 // 10 = 5 | 더하는 게 더 빠름 |
그래서 1, 2번은 같은 경우로 처리하고 나머지는 3번과 같이 처리하면 정답이 된다.
그리고 마지막에 storey //= 10을 잊지 말아야 한다.
[오늘의 회고]
- 주어진 테스트 케이스를 분석하면 나머지를 어떻게 이용해야 할지 쉽게 구할 수 있다.
- 이런 거는 비슷한 문제를 더 풀거나 복습을 더 해야겠다.
- 오늘은 왜 이렇게 졸렵니.... 끝!
'항해99 TIL' 카테고리의 다른 글
99클럽 코테 스터디 25일차 TIL + 그래프 (0) | 2024.08.15 |
---|---|
99클럽 코테 스터디 24일차 TIL + 그래프 (0) | 2024.08.14 |
99클럽 코테 스터디 22일차 TIL + 다이나믹 프로그래밍(DP) (0) | 2024.08.12 |
99클럽 코테 스터디 21일차 TIL + 다이나믹 프로그래밍(DP) (0) | 2024.08.11 |
99클럽 코테 스터디 20일차 TIL + 그리디(Greedy) (0) | 2024.08.10 |