1. 문제
programmers.co.kr/learn/courses/30/lessons/12911
2. 내가 생각했던 풀이과정
1) 조건 1에 따라 n보다 큰 자연수이어야 하니까 n + 1로 n보다 큰 자연수를 만들어준다
2) 1의 갯수가 같아야하기 때문에 2진수로 변환해야 한다
3) 2진수로 변환해서 count( ) 함수를 통해 1의 갯수를 파악해야한다
4) n보다 큰 자연수를 + 1씩 해주면서 2진수로 변환했을 때, 1의 숫자가 같으면 가장 작은 수이기 때문에 그 순간 return을 해주면서 반복문을 빠져 나옵니다.
3. 나의 풀이
def solution(n):
answer = n + 1
while True:
if bin(answer).count('1') == bin(n).count('1'):
return answer
answer += 1
4. 다른 사람의 풀이
def solution(n):
binary = str(bin(n))[2:]
if len(set(binary)) == 1 : return int('10' + binary[1:],2)
one = binary.count('1')
while(True):
n += 1
if str(bin(n))[2:].count('1') == one : return n
bin을 이용하여 2진수로 표현하면 앞에 0b가 붙기 때문에 순수한 이진수만을 가져오기위해 문자열을 slice하였다.
5. 새로 알게된 점
1) bin( ) 함수
정수를 《0b》 가 앞에 붙은 이진 문자열로 변환합니다. 전달받은 integer 혹은 long integer 자료형의 값을 이진수(binary) 문자열로 돌려줍니다. 10진수를 2진수로 바꿔주는 함수로 사용하는 방법은 bin(10진수의 값) 을 하면 2진수로 출력해줍니다.
bin(3)
>> '0b11'
bin(-10)
>> '-0b1010'
앞에 0b가 붙게 되는 점이 특징이고, 조심해야할 점은 문자열로 반환해준다
16진수로 바꿔주는 hex(n) , 8진수로 바꿔주는 oct(n) 등이 있다.
혹시나 문자열로 출력되는 값을 다시 수로 바꾸고 싶다고 하면 eval ( )를 사용하면 된다.
eval("문자열")의 괄호 안에 문자열로 된 수식을 넣으면, eval ( )는 이 문자열을 수식으로 처리해서 계산한 후, 계산 값을 함수의 결과값으로 돌려준다.
2) count( )
부분문자열의 개수를 세는 메소드
s = "Hello Yellow" print( s.count('el') ) # 2
리스트나 문자열 등에서 사용할 수 있으며 사용 방법은 count(x) 다음과 같이 표시해 리스트나 문자열 내에 x가 몇 개 있는지 그 개수를 돌려주는 함수입니다.
내가 찾고자 하는 값이, 리스트에 몇개나 들어있는지 확인할 수 있다.
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 폰켓몬 (0) | 2021.04.30 |
---|---|
[프로그래머스] 두 개 뽑아서 더하기 (0) | 2021.04.28 |
[프로그래머스] 고양이와 개는 몇 마리 있을까 (0) | 2021.04.23 |
[프로그래머스] 이름이 없는 동물의 아이디 (0) | 2021.04.23 |
[프로그래머스] 여러 기준으로 정렬하기 (0) | 2021.04.23 |
댓글