오늘 풀어본 파이썬 문제
https://school.programmers.co.kr/learn/courses/30/lessons/12940
내가 직접 풀어본 코드문
def solution(n, m):
if n > m:
a, b = m, n
else:
a, b = n, m
for i in range(b):
if b == 0:
break
a, b = b, a % b
gcd = a
lcm = (n * m) // gcd
return [gcd, lcm]
내가 직접 풀어서 짜본 코드문
무엇보다 가장 어려웠던 부분은
for i in range(b):
if b == 0:
break
이 코드문을 머리속에 떠올릴때까지 너무 오래 걸렸다는 점이다.
그리고 이 코드문의 기능을 단 하나의 명령어로 대체가 가능하다는 이야기를 듣게 되었다.
그 명령어는 바로 while 이다.
for 문은 무조건 지정되어 있는 횟수만큼 반복을 해야하지만 while의 특징은 특정 조건을 달성할때까지 무한정으로 반복하는 함수이다
그러므로 이걸 알게 된 뒤의 직접짜 본 나의 코드문은
def solution(n, m):
if n > m:
a, b = m, n
while b:
a, b = b, a % b
gcd = a
lcm = (n * m) // gcd
else:
a, b = n, m
while b:
a, b = b, a % b
gcd = a
lcm = (n * m) // gcd
return [gcd, lcm]
무엇인가 좀 더 기괴해지고 비효율적인 느낌이 들었다.
아무리봐도 for 문보다 비효율적인 모양새가 되어버려서 정답은 어떤 형태를 하고 있나 찾아보기로 하였다.
def solution(n, m):
a, b = n, m
while b:
a, b = b, a % b
gcd = a
# 최소공배수(LCM) 계산
lcm = (n * m) // gcd
return [gcd, lcm]
그 동안 너무 혼자 독학만 해서 그런지 이런식으로 접근해 볼 생각을 하지 못했다.
어차피 n이 더 크든 m이 더 크든지간에 원하는 조건값이 나올때까지 반복한다는 while의 특징에 대해 다소 안일하게 생각했던 것 같다.
오늘 배운 것
- while의 사용법과 역할 및 특징
- 고이면 썩는다는 말을 공부하면서도 느껴졌으며 좀 더 튜터님에게 의지를 해야겠다라는 생각이 들었다.
'Python' 카테고리의 다른 글
본 캠프 Python 알고리즘 코드카타 6일차 (0) | 2024.06.29 |
---|---|
본 캠프 Python 알고리즘 코드카타 5일차 (0) | 2024.06.28 |
본 캠프 Python 알고리즘 코드카타 3일차 (0) | 2024.06.26 |
본 캠프 Python 알고리즘 코드카타 2일차 (0) | 2024.06.25 |
본 캠프 알고리즘 코드카타 1일차 TIL (0) | 2024.06.24 |