◎ 문제
○ 출처
programmers.co.kr/learn/courses/30/lessons/12911
○ 문제 설명
자연수 n이 주어졌을 때, n의 다음 큰 숫자는 다음과 같이 정의 합니다.
예를 들어서 78(1001110)의 다음 큰 숫자는 83(1010011)입니다. 자연수 n이 매개변수로 주어질 때, n의 다음 큰 숫자를 return 하는 solution 함수를 완성해주세요. |
○ 제한 사항
|
○ 입출력 예
○ 입출력 예 설명
입출력 예#1 문제 예시와 같습니다. 입출력 예#2 15(1111)의 다음 큰 숫자는 23(10111)입니다. |
○ 작성 예시 코드
using System;
class Solution
{
public int solution(int n)
{
int answer = 0;
return answer;
}
}
◎ 나의 문제 풀이
class Solution
{
public int solution(int n)
{
int answer = n;
int binary_number_1_cnt = 0; // 주어진 숫자의 2진수에서 1의 갯수
int result_cnt = 0; // 다음 큰 숫자를 구할 때 1의 갯수 카운트용
// 주어진 숫자의 2진수에서의 1의갯수를 구함
binary_number_1_cnt = CalculateBinaryNumberCount(n);
// binary_number_1_cnt 갯수와 동일한 1의 갯수가 나올 때까지 다음 큰 수를 찾음
while (result_cnt != binary_number_1_cnt)
{
answer++;
result_cnt = CalculateBinaryNumberCount(answer);
}
return answer;
}
// 10진수를 2진수로 변환하고 해당 2진수에 1의갯수를 구해주는 함수
int CalculateBinaryNumberCount(int number)
{
int result = 0;
while(number > 0)
{
if(number % 2 == 1)
{
result++;
}
number /= 2;
}
return result;
}
}
- 2진수를 구할 때 Convert.ToString(n, 2)를 통하여 문자열 변환을 통한 방법으로도 해결 가능하다.
◎ 다른 문제 풀이
using System;
using System.Text.RegularExpressions;
class Solution
{
public int solution(int n)
{
int binary_cnt = Regex.Matches(Convert.ToString(n, 2), "1").Count;
while (true)
{
if (binary_cnt == Regex.Matches(Convert.ToString(++n, 2), "1").Count)
break;
}
return n;
}
}
- RegularExpression을 통해서도 해결이 가능하다.
'프로그래밍 문제 풀이 > C#' 카테고리의 다른 글
[프로그래밍 문제 풀이] 프로그래머스 - 두 개 뽑아서 더하기(C#) (0) | 2020.10.13 |
---|---|
[프로그래밍 문제 풀이] 프로그래머스 - 최솟값 만들기 (C#) (0) | 2020.09.10 |
[프로그래밍 문제 풀이] 프로그래머스 - 위장 (C#) (0) | 2020.09.10 |
[프로그래밍 문제 풀이] 프로그래머스 - 가장 큰 수 (C#) (0) | 2020.09.10 |
[프로그래밍 문제 풀이] 프로그래머스 - 스킬트리 (C#) (0) | 2020.08.12 |