문제출처 👇
programmers.co.kr/learn/courses/30/lessons/12911
문제설명 👀
자연수 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)입니다.
문제풀이
-> 별로 어렵지 않은 문제이다.
입력받은 숫자를 2진수로 바꾼 뒤 1의 개수를 세어주고, 그 다음 입력받은 숫자에 +1을 해주며 또다시 2진수 1의 개수를 세어주면 된다.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
func solution(_ n:Int) -> Int { | |
var nCount = 0 | |
var answer = n | |
var count = 0 | |
// 입력받은 수를 2진수로 바꾸고 1의 개수를 세어준다 | |
for i in String(n, radix: 2) { | |
if i == "1" { | |
nCount += 1 | |
} | |
} | |
repeat { | |
count = 0 | |
answer += 1 // 입력받은 수에 1을 더해준다 | |
for i in String(answer, radix: 2) { // 2진수로 바꾼 뒤 1의 개수를 세어준다 | |
if i == "1" { | |
count += 1 | |
} | |
} | |
} while count != nCount | |
// 1의 개수가 같은 때 까지 반복한다 | |
return answer | |
} |
'코딩테스트' 카테고리의 다른 글
프로그래머스 - 땅따먹기 (레벨2, swift) (0) | 2020.07.20 |
---|---|
프로그래머스 - 올바른 괄호 (레벨2, swift) (0) | 2020.07.20 |
프로그래머스 - 가장 큰 정사각형 찾기 (레벨2, swift) (0) | 2020.07.11 |
프로그래머스 - 행렬의 곱셈 (레벨2, swift) (0) | 2020.07.10 |
프로그래머스 - 최댓값과 최솟값 (레벨2, swift) (0) | 2020.07.07 |