[프로그래머스 코딩테스트 연습문제] 다음 큰 숫자 문제 풀이 with 자바스크립트(Javascript) & 자바(Java)

Re_Go·2024년 7월 3일
0

코딩테스트연습

목록 보기
92/106
post-thumbnail

1. 첫번째 문제 풀이(2024-07-03)

해당 문제는 toString 메서드로 인한 각 숫자마다의 2진수 변환을 이용했는데요. 2진수로 변환 된 문자열에서 1의 개수가 몇개인지를 파악 해주는 함수를 하나 만들어 활용했습니다.

사실 원래는 2진수 구하는 식을 사용해 하나 하나 다 계산했는데요. 근데 toString의 쓰임새를 검색해 보다가 진법 변환이 가능하다는걸 알게 되어 깔끔하게 방식을 선회했습니다 ㅎ...

아무튼 공식을 적용한 자바스크립트 버전을 소개해 드리겠습니다.

  1. 자바스크립트 버전
// 전달 받은 2진법 문자열 중에 1이 몇개인지를 도출해주는 함수
function calcOneCount(binary){
        let count = 0;
        for(let i = 0; i < binary.length ; i++){
            if(binary[i] === '1') count++;
        }
  		// count의 개수는 곧 1의 개수
        return count;
    }
// 실행할 메인 solution 함수
function solution(n) {
  	// 매개변수 n을 2진수로 변환하여 calcOneCount에 전달하고, 반환 받은 개수를 inputNumberCount에 전달
    let inputNumberCount = calcOneCount(n.toString(2));
  	// 비교할 숫자값을 담을 변수 선언
    let compareNumber;
  	// n의 2진수의 1의 개수와 특정 수의 2진수의 1의 개수가 같을 때까지 반복할 while문
    while(true){
      	// n(숫자)를 현재에서 1증가
        n++;
      	// compareNumber에 증가한 n 대입
        compareNumber = n 
		// n 다음 값에 대해서도 1의 개수를 구하는 함수를 돌려줌
        let compareNumberCount = calcOneCount(n.toString(2));
     // 만약 n과 그 다음 수의 2진수에 대한 1의 개수가 같으면 break;
        if(compareNumberCount == inputNumberCount) break;
    }
  	// while문에서 조건에 맞을 때 저장되어있던 compareNumber를 반환
    return compareNumber;
};

그리고 자바 버전으로 구현한 코드는 다음과 같습니다.

  1. 자바 버전

public class Solution {

    public int calcOneCount(String binary) {
        int count = 0;
        for (int i = 0; i < binary.length(); i++) {
        // 자바에서는 문자열의 특정 인덱스의 문자를 가져올 수 있는 charAt 메서드도 존재하니, 인덱스 접근([i])을 사용하든 해당 메서드를 사용하든 무관합니다.
            if (binary.charAt(i) == '1') {
                count++;
            }
        }
        return count;
    }

    public int solution(int n) {
        int inputNumberCount = calcOneCount(Integer.toBinaryString(n));
        int compareNumber;

        while (true) {
            n++;
            compareNumber = n;
            int compareNumberCount = 
            // 자바에서는 toString이 아니라 Integer 클래스의 toBinaryString, toOctalString ,toHexString 등의 메서드를 사용해야 합니다.다.calcOneCount(Integer.toBinaryString(compareNumber));
            if (compareNumberCount == inputNumberCount) break;
        }
        return compareNumber;
    }
}

2. 자바와 자바스크립트 풀이 차이점

  1. JS에서 문자열의 특정 인덱스에 접근하려면 별 어려움 없이 배열로 접근하면 되나, 자바에서는 배열로 접근하는 방법과 charAt 메서드로 접근하는 방법이 존재하는데, 아직까지는 그 차이점을 모르겠으나 그래도 알아두면 좋겠다고 생각되었습니다.

  2. JS에서는 toString 메서드 하나로 다양한 진법 변환이 가능했는데, 자바에서는 Integer 래퍼 클래스의 진법 메서드들인 toBinaryString, toOctalString, toHexString를 이용하여 진법을 변환할 수 있었습니다.

profile
인생은 본인의 삶을 곱씹어보는 R과 타인의 삶을 배워 나아가는 L의 연속이다.

0개의 댓글