-
[코딩테스트] - 다음 큰 숫자 LV2 ( 프로그래머스(programmers) / java )👍programmers 2024. 4. 4. 13:09728x90반응형
안녕하세요 나홀로전세집입니다.
오늘은 레벨2 다음 큰 숫자를 풀어보겠습니다.
https://school.programmers.co.kr/learn/courses/30/lessons/12911
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
다음 큰 숫자의 문제 설명 다음은 문제 설명입니다.
임의의 값 n을 2진수로 변환한 후 1의 갯수가 같은 2진수 중 n 다음으로 큰 수를 찾는 문제입니다.
간단하게 알고리즘을
n의 값을 1씩 증가시키고 2진수로 변환한 후 1의 갯수를 체크
로 생각해봤습니다.
다음은 문제풀이 코드입니다.
class Solution { public int solution(int n) { // n+1 부터 1씩 증가시키며 2진수로 변환시킨 후 1의 갯수를 세기 int answer = n + 1; // n+1부터 2진수를 만들기 시작 String binaryN = Integer.toBinaryString(n); // Integer.toBinaryString(); 은 십진수를 이진수 문자열로 만들어줌 int cnt = countOne(binaryN); // countOne 메서드는 1의 갯수를 세어주는 메서드 // cnt에 1의 갯수를 담아둔 후 n+1을 1씩 증가시키며 1의 갯수가 같은 다음 큰 숫자를 찾음 while (true) { String nextN = Integer.toBinaryString(answer); // n+1의 값을 2진수로 변환 int countNext = countOne(nextN); // 변환한 값의 1의 갯수 체크 if (countNext == cnt) { // n의 2진수 변환한 값의 1의 갯수와 현재 변환한 값의 1의 갯수가 같을 때 브레이크 break; } answer++; // 1의 갯수가 다르면 n값을 1 증가시킨 후 다시 로직 실행 } return answer; } public int countOne(String binary) { // 2진수 binary의 1의 갯수를 세어주는 메서드 int cnt = 0; for (int i = 0; i < binary.length(); i++) { if (binary.charAt(i) == '1') { cnt++; } } return cnt; } }
LV2 치고 알고리즘만 잘 생각해내면 쉽게 풀린 문제였습니다.
오늘도 즐코딩 하시고 좋은 하루 되세요~
728x90반응형'programmers' 카테고리의 다른 글
[코딩테스트] - 짝지어 제거하기 LV2 ( 프로그래머스(programmers) / java )👍 (0) 2024.04.11 [코딩테스트] - 최댓값과 최솟값 LV2 ( 프로그래머스(programmers) / java )👍 (15) 2024.04.04 [코딩테스트] - 숫자 변환하기LV2 ( 프로그래머스(programmers) / java )👍 (1) 2024.04.02 [코딩테스트] - 2 x n 타일링 LV2 ( 프로그래머스(programmers) / java )👍 (1) 2023.07.31 [코딩테스트] - 멀리 뛰기 LV2 ( 프로그래머스(programmers) / java )👍 (2) 2023.07.31