Programmers
Meet the best programming lessons in videos and practices. Programmers provide programing lessons, algorithm problems, programming competitions, and blockchain materials.
프로그래머스 문제풀이
문제
문제설명
자연수 n이 주어졌을 때, n의 다음 큰 숫자는 다음과 같이 정의 합니다.
- 조건 1. n의 다음 큰 숫자는 n보다 큰 자연수 입니다.
- 조건 2. n의 다음 큰 숫자와 n은 2진수로 변환했을 때 1의 갯수가 같습니다.
- 조건 3. n의 다음 큰 숫자는 조건 1, 2를 만족하는 수 중 가장 작은 수 입니다.
예를 들어서 78(1001110)의 다음 큰 숫자는 83(1010011)입니다.
자연수 n이 매개변수로 주어질 때, n의 다음 큰 숫자를 return 하는 solution 함수를 완성해주세요.
제한사항
- n은 1,000,000 이하의 자연수 입니다.
입출력 예
n | result |
---|---|
78 | 83 |
15 | 23 |
입출력 예 설명
입출력 예#1
문제 예시와 같습니다.
입출력 예#2
15(1111)의 다음 큰 숫자는 23(10111)입니다.
문제해석과정
- 문제에서 주어진 조건 3가지를 만족하는 값을 찾자.
- N보다 크고, N의 2진수와 1의 갯수가 같은 것 중 가장 작은 자연수를 찾는다.
위 같은 문제 및 제한사항을 해석하고 문제풀이를 시작하면 됩니다.
나의 풀이
이번 문제는 bin함수와 count함수만 알면 쉽게 해결할 수 있다. 모르신다면 2의 진수를 일일이 구해서 1을 따로 카운트하는 코드도 구현해야 할 것이다.
N보다 큰 수여야 하기 때문에 N+1의 값부터 1씩 더해가며, 2진수시 1의 갯수를 확인하도록 반복문을 무한히 반복하도록 설계한다.
1의 갯수가 N과 동일하다면 무한 반복문을 정지하고 탈출하면 된다.
def solution(n): answer = n onecnt = bin(n).count('1') # N의 2의진수의 1의 갯수 while True: # 무한반복 answer += 1 answercnt = bin(answer).count('1') if answercnt == onecnt: break return answer
다른 사람의 풀이
이번 문제는 다른 풀이들이 저와 유사해서 가져오지 않았습니다.
관련 링크
문제해결과정에서 기초가 부족하다고 느껴지시면 아래 정리 글을 참고해주세요.
Python 문법 총 정리1 – Zzrany Blog
여기는 Python을 공부하며 학습한 내용을 정리하는 블로그입니다. 해당 포스팅에서는 개발시 참고하실 수 있도록 Python 문법들을 한눈에 보이도록 필요한 내용만 간략하게 정리해보았습니다.
Python 문법 총 정리2 – Zzrany Blog
여기는 Python을 공부하며 학습한 내용을 정리하는 블로그입니다. 해당 포스팅에서는 개발시 참고하실 수 있도록 Python 문법들을 한눈에 보이도록 필요한 내용만 간략하게 정리해보았습니다.