Nonamed Develog
[TIL][240711] while문 조건 본문
어떤 문제가 있었나?
오늘은 그동안 과제로 인해 밀린 코드카타를 풀어봤다. 최대공약수와 최소공배수, 3진법 문제가 특히 어려웠는데, 기초적인 수학 공부가 필요하다고 느꼈다. 물론 이론은 다시 보니 어렵지 않게 이해했지만 코드로 바꾸는 것은 쉽지 않았다. 컴퓨터적 사고를 잘할 수 있게 훈련을 해야겠다.
무엇을 시도했나?
튜터 님의 조언이 생각나 무작정 종이를 가져와 문제를 풀어봤다. 특히 3진법 문제는 실제로 적어보니 머리속으로 정리할 때보다 어떻게 코드를 작성해야 하는지 아이디어가 떠올랐다. 예를 들어 10진법을 3진법으로 바꾸려면 3으로 계속 나눠서 더 이상 나눠지지 않을 때 몫과 나머지를 나열할 수 있다. 하지만 한번 더 나눠서 몫을 0으로 만들면 나머지로만 나열하여 3진법 수를 알아낼 수 있었다. 즉, 몫 + 나머지를 나열하기보다 나머지만 나열하는 것이 코드를 작성하는데 훨씬 유리할 것이다.
어떻게 해결됐는가?
종이에 적고 코드를 작성하니 문제에 접근하는 방법이 쉽게 떠올라 코드를 작성했지만 아직 부족한 실력으로 마무리로 이어지진 않았다.
def solution(n):
temp = ''
answer = 0
while n > 0:
temp += str(n % 3)
n = n // 3
for i, j in zip(reversed(range(len(temp))), temp):
answer += (3 ** i) * int(j)
return answer
while 문으로 어렵지 않게 3진법의 역순을 구했다. 하지만 3진법을 다시 10진법으로 만들기가 쉽지 않아서 다른 팀원에게 힌트를 얻었다. "3진법 수의 길이가 곧 지수다..!" 바로 for문을 이용하여 작성하였다. 처음부터 완성코드처럼 작성하지 않았지만 시행착오와 구글링을 통해 완성할 수 있었다.
새로 알게 된 점은 무엇인가?
위의 문제를 풀면서왜 튜터님이 while문을 사용할 때 while True를 남용하지 말라고 하는지 알았다. 무지성으로 while True를 사용하니 while 조건문을 사용할 때 응용을 할 수 없었다. 초기식 \ while + 조건문 \ 반복문으로 이어지는 논리는 while True와는 비슷하면서 달랐다. 특히, 초기식과 조건문이 다르고 조건문의 변수를 새롭게 정의, 반복을 하여 스스로 반복문을 종료하는 응용은 구글링을 통해서 봤지만 정말 대단했다.
무엇을 느꼈고 내일은 무엇을 할까?
컴퓨팅 사고(Computatioal Thinking).
슈도 코드(Pseudo code).
오늘 코드카타를 풀면서 개발자에게 꼭 필요한 덕목이란 것을 느꼈다. 내일은 이 부분에 대해서 구체적으로 정리하고자 한다.
'WHAT I LEARN > TIL' 카테고리의 다른 글
[TIL][240715] ASCII(아스키코드), string 모듈 (0) | 2024.07.15 |
---|---|
[TIL][240712] 컴퓨팅 사고(Computational Thinking), 슈도 코드(pseudo code) (0) | 2024.07.13 |
[TIL][240710] .gitignore, 인스턴스의 이해 (0) | 2024.07.10 |
[TIL][240709] 가위 바위 보 웹(Flask, DB) (0) | 2024.07.09 |
[TIL][240705] hashlib, logging, sleep() (0) | 2024.07.05 |