프로그래머스 > 코딩테스트 연습 > 연습문제 > 다음 큰 숫자
https://school.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)입니다.
💻 소스코드
using System;
using System.Linq;
class Solution
{
public int solution(int n)
{
int cnt = ToBinaryCountOne(n);
bool togle = true;
while (togle)
{
togle = ToBinaryCountOne(++n) == cnt ? false : true;
}
return n;
}
public int ToBinaryCountOne(int n)
{
string str = Convert.ToString(n, 2);
int one = 0;
foreach(char c in str)
{
if (c == '1') one++;
}
return one;
}
}
📝 풀이
int n을 먼저 이진법으로 만들어서 1의 개수를 파악한 다음n을 1씩 증가시켜 같은 방법으로 이진법의 1의 개수를 파악해 같으면 return해주었다.
오답노트
using System;
using System.Linq;
class Solution
{
public int solution(int n)
{
int cnt = ToBinaryCountOne(n);
bool togle = true;
while (togle)
{
togle = ToBinaryCountOne(++n) == cnt ? false : true;
}
return n;
}
public int ToBinaryCountOne(int n)
{
return Convert.ToString(n, 2).Where(w => w.Equals('1')).Count();
}
}
다른 내용은 동일한데 이진법으로 변환해 1을 찾는 과정에서 Linq 메서드 where을 사용했는데 where이 일반 for문으로 count하는것보다 효율이 떨어져서 효율성 문제로 오답처리 되었다.
문제 해결엔 코드에 문제가 없다.
관련 포스팅
'코딩 테스트 (C#) > 프로그래머스 (Lv2)' 카테고리의 다른 글
[C#][프로그래머스] 영어 끝말잇기 (0) | 2024.11.07 |
---|---|
[C#][프로그래머스] 귤 고르기 (0) | 2024.11.06 |
[C#][프로그래머스] 이진 변환 반복하기 (0) | 2024.11.04 |
[C#][프로그래머스] JadenCase 문자열 만들기 (0) | 2024.11.01 |
[C#][프로그래머스] 최솟값 만들기 (0) | 2024.10.31 |