** 코딩테스트 합격자 되기 :: 자바편 출처
문제 설명
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 |
---|