문제
풀이
using System;
class Solution
{
public int solution(int n)
{
string n_Binary = Convert.ToString(n, 2); //n을 2진수로 변환한 값
int n_Count = 0; //n이 가지고 있는 1의 개수
int count = 0; //특정 숫자의 1의 개수를 세기위한 변수
int answer = n; // 정답
string a_Binary = ""; //정답을 2진수로 변환한 값
for (int i = 0; i < n_Binary.Length; i++)
{
if (n_Binary[i] == '1')
{
n_Count++; //n이 가지고있는 1의 갯수 만큼 증가
}
}
while (n_Count != count)
{
count = 0;
a_Binary = Convert.ToString(++answer, 2);
for (int i = 0; i < a_Binary.Length; i++)
{
if (a_Binary[i] == '1')
{
count++;
}
}
}
return answer;
}
}
이번 문제의 핵심은 int 값을 2진수로 변환하고, 해당 값에서 1이 몇개 있는지 확인할수 있는가입니다.
방법은 여러가지가 존재하지만, 어느 방법이든 할 수만 있다면 어렵지 않게 풀 수 있습니다.
풀이과정은 아래와 같습니다.
1. 인자 값으로 받은 int를 2진수 형태의 string으로 저장합니다.
2. 변환된 string에서 1이 몇개 있는지 체크합니다.
3. While문에서 인자 값으로 받은 int 보다 1큰 숫자부터 2진수로 변환해가며, 최종적으로 인자값으로 받은
int의 1의 갯수와 동일한 1의 갯수가 나올때까지 반복합니다.
4. n보다 크고 동일한 1의 갯수를 가진 2진수를 10진수 형태로 반환합니다.
'알고리즘' 카테고리의 다른 글
프로그래머스 [C#] 멀리뛰기 (0) | 2024.11.04 |
---|---|
프로그래머스 [C#] 귤 고르기 (0) | 2024.11.01 |
프로그래머스[C#] 이진 변환 반복하기 (0) | 2024.10.25 |
JadenCase 문자열 만들기 (0) | 2024.10.24 |
C# 최솟값 만들기 (0) | 2024.10.24 |