Coding Test/programmers
[Python] 파이썬 프로그래머스 점프와 순간이동
파송송
2022. 11. 5. 00:13
728x90
https://school.programmers.co.kr/learn/courses/30/lessons/12980
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
나의 풀이
- n이 홀수라면 ans에 1을 더하고 n // 2를 해준다.
- n // 2한 값이 홀수라면 ans에 1을 더하고 n // 2해준다.
- 이를 반복하다보면 아래와 같이 규칙을 발견할 수 있다.
- 이를 재귀용법으로 구현함
def solution(n):
ans = 0
n = n
return cnt(n, ans)
def cnt(n, ans):
if n == 1:
ans += 1
return ans
if n % 2 == 1:
ans += 1
n = n // 2
return cnt(n, ans)
else:
n = n // 2
return cnt(n, ans)
함수는 ans를 누적해줘야해서 2개 만듦
다른 사람의 풀이
재귀용법을 쓰지 않고 푼것이 더 빠른 것을 볼 수 있었다.
재귀용법을 쓰면 무조건 더 빠르게 풀 것이라고 생각하는 경향이 있는데 고쳐야겠다
def solution(n):
ans = 1
while n > 1:
ans += n % 2
n = n // 2
return ans
def solution(n):
return bin(n).count('1')
이진법 풀이도 있다
728x90