Q.
find_smallest_integer_divisor 라는 이름의 함수를 구현해 주세요.
find_smallest_integer_divisor 함수는 하나의 parameter를 받습니다.
Parameter 값은 integer만 주어집니다.
find_smallest_integer_divisor 주어진 parameter 값을 나눌 수 있는 1을 제외한 최소의 양의 정수를 return하여야 합니다.
예제:
find_smallest_integer_divisor(15) == 3
처음 문제를 봤을 땐 상대적으로 제한을 걸어둔게 많아 보여서 쉽다고 생각했다.
'오 ㅋㅋ 쉽네' 라고 생각하며 아래와 같이 코드를 짰다.
example = 19
def find_smallest_integer_divisor(num):
i = 2
while num % i == 0:
return i
else:
return i += 1
print(find_smallest_integer_divisor(example))
# Output
return i += 1
^
SyntaxError: invalid syntax
SyntaxError
가 발생했다.
지금 다시 와서 회고하자니 내가 저때 무슨 생각으로 저걸 짰는지도 잘 기억이 안난다.
아마..
i
는 1보다 큰 정수여야 하므로 2부터 시작을 하고, 나머지가 0이면 일단 약수는 맞으니 return
을 하려고 했던 것 같다.
그리고 False
일 시 1을 더해서 해당 while
문을 다시 실행하고자 했던것 같다.
생각해보니 모든 약수를 구해야하는 것이 아닌, 1을 제외한 최소 약수 하나만 구하면 되는 것이니 굳이 == 0
이라는 logi을 쓸 필요가 없다고 생각했다.
그래서 아래와 같이 다시 짜보았다.
example = 19
def find_smallest_integer_divisor(num):
i = 2
while num % i != 0:
return i
i += 1
print(find_smallest_integer_divisor(example))
# Output
2
엥?
2가 나왔다..
그러고나서 다시 보니 return
문과 다음 정수로 넘어가는 i += 1
을 반대로 두어서 while
문을 충족하는 2를 바로 출력을 한 듯 했다.
저 두 코드의 순서를 바꿔서 다시 짜보았다.
example = 19
def find_smallest_integer_divisor(num):
i = 2
while num % i != 0:
i += 1
return i
print(find_smallest_integer_divisor(example))
# Output
3
3이 떴다.
분명히 오류는 없어보이는 듯 했으나 다시 보니 return문의 indent를 잘못 설정했다.
위와 같이 돌아갔을 때는 아래와 같이 logic이 돌아간다.
False
return
해라그래서 return
문의 indent
를 제대로 해서 아래와 같이 해보았다.
example = 19
def find_smallest_integer_divisor(num):
i = 2
while num % i != 0: #while 안의 조건문이 True일동안 반복
i += 1 #while 안의 조건문이 false면 탈출해서 리턴
return i
print(find_smallest_integer_divisor(example))
# Output
19
이번엔 내가 원해는 대로 나왔고, example값을 바꾸어도 정상적으로 출력이 되는 것을 볼 수 있었다.
위와 다른 점은..
return이 while문에 indent 되어있지 않으므로, 5번 코드와 6번코드를 끊임없이 반복하는 것이다.
정리하면 아래와 같다.
False
i += 1
을 수행하여 3이 나오고 다시 19를 나눈 나머지가 0이 되냐?False
i += 1
을 수행하여 19가 나오고 다시 19를 나눈 나머지가 0이 되냐?True
i
값 출력파이썬에서 들여쓰기를 통해 존속성을 나타내는 것이 중요하다고 배웠는데, 막상 겪어보니 이거 은근히 어려운 것 같다.
지금이야 10줄 안쪽에서 끝나는 코드라 별 탈 없겠지만, 나중에 가게되면 미친 분량의 코드를 만나게 될텐데 벌써부터 눈물이 난다.
이런 사소한 실수는 기본기가 중요하다고 생각하는데.. 파이썬도 역시나 기본기를 충실히 다지는데 주력을 해야할 것 같다.
어렵다 파이썬!