코딩테스트/Stack & Queue

10진수를 2진수로 변환하기

soooy0 2025. 5. 9. 14:36

** 코딩테스트 합격자 되기 :: 자바편 출처

 

문제 설명

10진수를 입력받아 2진수로 변환해 반환하는 solution() 함수를 구현하세요.

 

제약조건

decimal은 1이상 10억 미만의 자연수

 

입출력의 예

decimal= 10 >> 반환값: 1010

decimal= 27 >> 반환값: 11011


10진수를 2진수로 변환하는 과정은, 10진수의 수를 2로 계속 나눈 나머지를 구하고 > 제일 마지막(최근)에 구한 나머지부터 순서대로 읽으면 된다.

ex) 10진수 13이 주어진 경우
1. 13을 2로 나눈 나머지 1을 스택에 넣고
2. 13을 2로 나눈 몫 6을 2로 나눈 나머지를 0을 스택에 넣고
...
몫이 0이 될때까지 반복한다.

>> while문을 사용할 것.

 

import java.util.*;

class Solution{

	public static String solution(int decimal){
    	Stack<Integer> stack = new Stack<>();
        
        while(decimal > 0){
        	// 2로 나눈 나머지 저장
            int remain = decimal % 2;
            // 나머지를 스택에 넣기
            stack.push(remain);
            decimal /= 2;
		}
        
        StringBuilder sb = new StringBuilder();
        // 스택이 빌때까지 반복
        while(!stack.isEmpty()){
        	sb.append(stack.pop());
		}
        
        return sb.toString();
	}
}

 

  • String 과 문자열 연결 연산자( +)를 사용해서 문자열을 이어붙일 수 있겠지만, 그렇게 하면 시간 복잡도는 O((logN)제곱)이 된다.
  • 또한 String클래스는 불변 객체로서, 수행할 때마다 새로운 객체를 생성하기 때문에 비효율적이다.
  • 따라서, StringBuilder를 사용하는 것이 바람직하다. 시간 복잡도도 O(logN)이다.

'코딩테스트 > Stack & Queue' 카테고리의 다른 글

올바른 괄호  (0) 2025.05.08