문제
10진수를 입력받아 2진수로 변환해 반환하는 solution()함수를 구현하세요.
[제약조건]
decimal은 1이상 10억 미만의 자연수
풀이 과정
1. 10진수 N을 2로 나누고 몫은 홀드하고 나머지는 저장한다.
2. 앞에서 나눈 결과값인 목이 0이 아니라면 1번을 다시 반복한다.
3. 몫이 0이 될 때까지 나눴다면 1번에서 저장한 수를 최근 계산한 것부터 순서대로 나열한다.
정답 코드
import java.util.Stack;
public class Solution {
public static String solution(int N) {
Stack<Integer> stack = new Stack<>();
while (N > 0) {
stack.push(N % 2);
N /= 2;
}
StringBuilder sb = new StringBuilder();
while (!stack.isEmpty()) {
sb.append(stack.pop());
}
return sb.toString();
}
}
이때 왜 StringBuilder를 사용하는 이유는...사실 String + 연산을 사용해도 풀이가 가능하지만 그렇게 풀이한다면
String s ="";
s += "1";
s += "0";
s += "1";
이런식으로 매번 새로운 String 객체를 생성해야 한다. 따라서 성능적인 측면에서 반복문에서는 StringBuilder를 사용한 코드가 더 효율적이다.
[문제 출처]
https://product.kyobobook.co.kr/detail/S000212576322
코딩 테스트 합격자 되기: 자바 편 | 김희성 - 교보문고
코딩 테스트 합격자 되기: 자바 편 | ★ 코딩 테스트 합격자가 되는 가장 확실한 방법! ★ 프로그래머스 제공, 전문가가 모여 엄선한 빈출 97문제로 철저하게 대비하세요! 신입 사원 코딩 테스트
product.kyobobook.co.kr