문제 (http://tryhelloworld.co.kr/challenge_codes/173)
어떤 수 N(1≤N≤1,000,000) 이 주어졌을 때, N의 다음 큰 숫자는 다음과 같습니다.
N의 다음 큰 숫자는 N을 2진수로 바꾸었을 때의 1의 개수와 같은 개수로 이루어진 수입니다.
1번째 조건을 만족하는 숫자들 중 N보다 큰 수 중에서 가장 작은 숫자를 찾아야 합니다.
예를 들어, 78을 2진수로 바꾸면 1001110 이며, 78의 다음 큰 숫자는 83으로 2진수는 1010011 입니다.
N이 주어질 때, N의 다음 큰 숫자를 찾는 nextBigNumber 함수를 완성하세요.
나의 풀이
'''정수형태의 파라미터 값(n)을 받는다.(1) make_num_to_binary : 이진수값으로 변환해주는 함수(2) binary_num_count_one : (1)의 리턴값을 파라미터로 받아 '1'의 개수를 세준다.'''binary_num =count_one =next_num = n + 1while True:'''(1) n보다 1이 큰 숫자를 계속 while문으로 돌려본다.(2) next_num의 '1' 개수가 일치하면 종료'''next_num_binary = # 이진수값으로 변환next_num_count_one = # '1'의 개수를 센다.if count_one == next_num_count_one:&nbsnbsp;# 일치하면 next_num을 리턴하고 반복문 종료return next_numnext_num += 1'''정수의 숫자를 받아 이진수로 표현한 값을 돌려준다.'''binary_list =# make_num_to_binarywhile n != 1:# 나머지들을 binary_list에 붙여나간다.n = n // 2# 맨 처음은 무조건 1로 시작되어야 하기 때문에 1을 마지막에 강제로 붙인다.binary_list = # 리스트들을 뒤에서부터 출력하게 만든다.binary_num = '. # '1001110' 형태로 변환# 참고로 join은 리스트 타입을 문자열로 만들어준다.# 문자열로 join해야하기 때문에 n을 str 타입으로 변환했다.return binary_num'''str 형태의 binary_num을 받아서, 1의 개수를 돌려준다.'''one = "1"count_one = # 1의 개수를 세서 저장return count_one # 1의 개수를 돌려준다# 아래 코드는 테스트를 위한 출력 코드입니다.print()
발생했던 오류
int object is not callable
TypeError sequece item 0: expected str instance, int found
join 메서드는 리스트를 문자열로 변환해주는 함수인데, 각 원소들을 이어붙이고자 한다면 str타입으롭 변환해야 한다.
다른 사람의 풀이
c = .for m in :if . == c:return m
새롭게 배운 것
bin(n) 함수는 정수(integer)를 binary string으로 변환해준다.
>>> print()0b1001110
'프로그래밍 > 코드분석' 카테고리의 다른 글
[파이썬] level3 야근지수 (0) | 2017.08.30 |
---|---|
[파이썬] 사각형의 나머지 한 좌표값 반환하기 (1) | 2017.06.10 |
[파이썬] 팰린드롬(palindrome) 문제 (0) | 2017.02.16 |
소수(Prime Number) 판단 문제 (0) | 2017.01.29 |
continue와 break문의 활용 (0) | 2017.01.28 |