-
[99클럽 코테 스터디 17일차 TIL] 멀리 돌아가버리기99클럽 2024. 4. 10. 18:32
0. 네? 제가 Python의 bin() 함수를 몰라서 직접 2진법 구한 사람으로 보이세요?
그렇다 난 바보다. 아니 있을 거 같긴 했는데.. bin()정도는.. 생각할 수 도 있는데.. 왜그랬지? 걍 대뜸 코드로 구현해버림... 몰라 쨌든 돌아갔잖아.. 그래도 이 기회에 bin()함수를 내 머릿속에 각인시켰다.

1. 99클럽 Python 미들러 문제 풀이
[프로그래머스 / 월간 코드 챌린지 시즌1 / Lv.2 이진 변환 반복하기]
https://school.programmers.co.kr/learn/courses/30/lessons/70129
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr


0과 1로 이루어진 문자열 s에서 0을 제거한 후, 그 길이를 2진법으로 변환하는 과정을 s가 '1'이 될 때까지 반복했을 때, 반복 횟수와 제거된 0의 개수를 구하는 문제였다.
<첫 번째 풀이 - 재귀 함수 이용>
count, zero = 0, 0 def solution(s): global count, zero # 문자열 x에서 0을 제거한 후, 그 길이 num = s.count('1') # s가 '1'이면 반복 횟수와 제거된 0의 개수를 리턴 if num == 1 and len(s) == 1: return [count, zero] else: zero += len(s) - num count += 1 new_s = [] # 2진법 변환 while True: if num == 1: new_s.append('1') break new_s.append(str(num % 2)) num //= 2 solution(new_s) return [count, zero]첫 번째 생각한 풀이는 재귀 함수를 이용한 풀이였다.
count()를 이용하여 문자열 s에서의 1의 개수(= 문자열 x에서 0을 제거한 후, 그 길이)를 구한 후, s가 '1'이면 반복 횟수와 제거된 0의 개수를 리턴하고, 아니라면 그 길이를 2진법으로 변환하여 다시 solution 함수를 호출했다.
<두 번째 풀이 - 반복문 이용>
def solution(s): count, zero = 0, 0 # s가 '1'이 아닐동안 이진 변환 진행 while len(s) > 1: # 문자열 x에서 0을 제거한 후, 그 길이 num = s.count('1') zero += len(s) - num count += 1 new_s = [] # 2진법 변환 while True: if num == 1: new_s.append('1') break new_s.append(str(num % 2)) num //= 2 s = new_s return [count, zero]아무래도 재귀 함수는 자칫 잘못하다가는 Maximum recursion depth에 빠질 수 있기 때문에, 같은 과정이지만 재귀 함수를 반복문으로만 변경해주었다.
<세 번째 풀이 - Python의 bin() 이용>
def solution(s): count, zero = 0, 0 # s가 '1'이 아닐동안 이진 변환 진행 while s != '1': # 문자열 x에서 0을 제거한 후, 그 길이 num = s.count('1') zero += len(s) - num count += 1 # 2진법 변환 s = bin(num)[2:] return [count, zero]다른 사람들의 풀이를 확인해보니 Python에는 bin()이라는 이진법 변환 내장 함수가 존재했다. 있을 거 같긴 했지만... 그냥 구현해버린 나.. 그래도 있는 건 사용하는 게 확실히 간단하고 편리하니까! bin(num) 이후 [2:]로 슬라이싱 하는 이유 '0b110'과 같이 앞 두 글자가 2진법을 나타내기 때문이다!
2. 회고
한 문제를 여러 방식으로 풀어보는 건 꽤나 재밌다. 그리고 다른 사람들의 풀이를 보는 것도! 세상엔 참 다양한 사람들이 있고 같은 문제를 푸는 방식도 가지각색이다. 이런식으로 여러 코드를 훑어보며 더 성장해나가야지! 그리고 일단 지금 곱창을 먹으러 갈 것이다. 신난다 ㅎㅎ
'99클럽' 카테고리의 다른 글
[99클럽 코테 스터디 22일차 TIL] 오랜만입니다! (0) 2024.04.15 [99클럽 코테 스터디 18일차 TIL] 미션 성공! (2) 2024.04.11 [99클럽 코테 스터디 16일차 TIL] 취준은 너무 어려워 (0) 2024.04.09 [99클럽 코테 스터디 15일차 TIL] DFS/BFS는 어려워 헷갈려 미치겠어 (0) 2024.04.08 [99클럽 코테 스터디 14일차 TIL] 엄지로 코딩하기 (0) 2024.04.07