반응형
문제를 이해하면 쉽게 이해할 수 있는 문제이다.
간단히 설명하자면 주어진 숫자에서 1의 갯수와 같은 다음 숫자를 구하면 된다.
C#에서 Convert.ToString을 이용하면 쉽게 진법변환을 할 수 있다. (자세한 내용은 아래 게시글 참조)
문제 푸는 순서
01 n을 2진수로 바꾼 다음 1의 갯수 구하기
int answer = 0;
string s = Convert.ToString(n,2);
int count = 0;
for(int i = 0; i<s.Length;i++)
{
if(s[i] == '1') count++;
}
02 n을 1씩 증가시킨 다음 n과 1의 갯수가 같은 숫자 구하기
while(true)
{
n++;
string s2 = Convert.ToString(n,2);
int count2 = 0;
for(int i = 0; i<s2.Length;i++)
{
if(s2[i] == '1') count2++;
}
if(count == count2) break;
}
코드 전문
using System;
class Solution
{
public int solution(int n)
{
int answer = 0;
string s = Convert.ToString(n,2);
int count = 0;
for(int i = 0; i<s.Length;i++)
{
if(s[i] == '1') count++;
}
while(true)
{
n++;
string s2 = Convert.ToString(n,2);
int count2 = 0;
for(int i = 0; i<s2.Length;i++)
{
if(s2[i] == '1') count2++;
}
if(count == count2) break;
}
answer = n;
return answer;
}
}
틀린 풀이
결과적으로 이 풀이를 했을때는 시간 초과가 나왔다.
매번 문자열을 배열로 변환하면서 1의 요소의 개수를 세기 때문에 n이 매우 클 경우 시간 초과가 발생하였다.
using System;
using System.Linq;
class Solution
{
public int solution(int n)
{
int answer = 0;
int count = Convert.ToString(n, 2).ToArray().Where(x => x == '1').Count();
while (true)
{
n++;
int count2 = Convert.ToString(n, 2).ToArray().Where(x => x == '1').Count();
if(count2 == count)
break;
}
return n;
}
}
반응형
'코딩테스트 준비 > 프로그래머스' 카테고리의 다른 글
프로그래머스 - 카펫 (1) | 2024.03.05 |
---|---|
프로그래머스 C# - 피보나치 수 (0) | 2024.02.19 |
프로그래머스 C# - 이진 변환 반복하기 (0) | 2023.09.12 |
프로그래머스 C# - 최솟값 만들기 (0) | 2023.09.06 |
프로그래머스 C# - JadenCase 문자열 만들기 (0) | 2023.09.05 |
댓글