🧠 비트 토글 문제 해결기 - module 없이 얼마나 Pythonic하게 풀 수 있을까?
오늘은 '이진수로 변환한 후, 모든 비트를 반전시킨 다음 다시 10진수로 바꾸기' 문제를 해결한 과정을 기록합니다. 단, 중요한 조건 하나! module 없이 풀어야 한다는 점. 덤으로 Pythonic하게, 시간복잡도도 고려하며, 배우는 과정에서 생긴 궁금증까지 차근히 정리해봅니다.
💻 내가 처음 짠 코드
def binary_toggle(n):
bin_n = bin(n)[2:]
swap_bin = ''.join(['1' if i == '0' else '0' for i in bin_n])
return int(swap_bin, 2)
작성 하자마자 “오 이거 꽤 괜찮지 않아?” 싶었는데요, 곱씹어 보니 더 다듬을 부분이 있었습니다.
📌 module 없이 풀어야 하는 이유
문제 조건이 외부 모듈 사용 금지였어요. 즉, import
없이 bin()
, int()
같은 내장 함수만 사용 가능!
⚙️ 시간복잡도와 Pythonic 개선
내 첫 코드도 확인해보니까 O(log n) 복잡도로 괜찮아 보였지만, 제너레이터를 쓰면 리스트를 만들지 않아서 메모리까지 더 절약할 수 있다는 걸 알게 됐습니다.
💡 개선된 코드
def binary_toggle(n):
bin_n = bin(n)[2:]
toggled = ''.join('1' if i == '0' else '0' for i in bin_n)
return int(toggled, 2)
- 🚀 시간복잡도: O(log n)
- 🧠 메모리: 제너레이터 사용으로 더 가볍게
- 🎯 가독성: 더 컴팩트하고 깔끔
🧠 삼항연산자란 무엇인가?
삼항연산자라는 이름이 생소하다면, 아래 구조를 보면 아마 낯익을 겁니다:
값1 if 조건 else 값2
예를 들어:
'1' if i == '0' else '0'
조건에 따라 값을 선택하는 아주 Pythonic한 방법입니다!
🤔 중간에 내가 던진 질문들
- 삼항연산자와 리스트 컴프리헨션은 작동 방식이 어떻게 다를까?
- if만 쓰고 else 없이 삼항 가능할까? → ❌ 불가능! 삼항연산자는 반드시
if ... else ...
구조가 필요! 세 개항이 필요하니까! - join 안에 리스트 대신 제너레이터 써도 될까? → ✅ 가능! 메모리 이득!
✅ 한 줄 요약
'1' if ch == '0' else '0'은 삼항연산자의 정석이자, Pythonic 코딩의 대표 주자입니다.
🧾 한 줄 정리
비트 토글 문제는 리스트 없이 제너레이터로 구현하면 더 Pythonic하고 가볍습니다!
📍 핵심 요약
- ✅ module 없이 효율적으로 문제를 해결할 수 있다
- ✅ 삼항연산자는 조건에 따라 깔끔하게 값을 선택할 수 있다
- ✅ join 안에 제너레이터를 사용하면 메모리와 속도 모두 최적화 가능
'Python > Python 문제 풀이' 카테고리의 다른 글
💡파이썬에서 두 수 곱의 최댓값 구하기: 정렬 vs 루프 vs remove 방식 비교 (0) | 2025.04.30 |
---|---|
⚡Pythonic하게 //, %, divmod() 처리하기: Simple is better than complex! (0) | 2025.04.30 |
📌 'return result if result else None'을 몰랐던 나에게 바칩니다 (0) | 2025.04.22 |