오늘의 문제는 "코딩 테스트 합격자 되기:자바 편"에 있는
10진수를 2진수로 변환하기 이다.
저자가 직접 출제한 문제라
프로그래머스 같은 곳에 돌려서 결과 확인이 어렵더라.
프로그래머스 아닌 문제도 있었으면 좋겠다 하긴 했는데
이 점은 좀 아쉬움...
하지만 자료구조별로 잘 정리되어 있고
문제마다 분석하는 방법과 푸는 흐름을 잘 설명해 줘서
코테 입문자에게는 따라서 공부하기가 좋다.
추천합니다!
그럼 문제부터 보겠습니다.
10진수를 입력받아 2진수로 변환하는 함수를 구현하라는 문제입니다.
10진수를 2진수로 변환하는 법은 간단하죠
2로 나눠서 남은 나머지들을 뒤에서부터 적으면 된다죠
일단 내가 푼 코드는 이렇다.
import java.util.*;
import java.lang.*;
import java.io.*;
// The main method must be in a class named "Main".
class Main {
public static void main(String[] args) {
Stack<Integer> stack = new Stack<>();
int v = 27;
while( v > 0 ){
stack.push(v%2);
v = v/2;
}
while(!stack.isEmpty()){
System.out.print(stack.pop());
}
}
}
따로 검사받을 곳이 없어 온라인 컴파일러에서 작성해서 돌렸다죠
자바 온라인 컴파일러 검색하면 여러 개 나오는데
내가 사용한 건 여기 https://www.mycompiler.io/ko/new/java
맨 처음에 while 문에서
v가 1이면 빠져나오게 했었는데
생각해 보니 마지막 1까지 들어가야
제대로 된 2진수라서 그냥 0보다 클 때로 수정
정답은 책에 쓰여 있는 링크나 QR코드 통해
저자의 깃헙에 들어가서 확인할 수 있다.
그냥 컴파일러에 돌려야 하는지라
나는 10진수를 바로 출력해 버리는 형태를 썼는데
책에서는 StringBuilder 연산을 사용한다.
String에서 붙이는 연산을 하면
시간 복잡도 측면에서 성능이 좋지 않다고 하네(참고)
StringBuilder sb = new StringBuilder();
while (스택에 내용이 있을 때){
sb.append(스택에서 꺼내서 붙이기)
}
return sb.toString();
푸는 로직 떠올리는 건 생각보다 금방 하겠는데
그걸 자바의 여러 기능들을 써서 구현하는 건...
내가 너무 오래간만에 코드를 잡아서 아직은 무리 ㅋ
이 책 다 풀면 나아지겠지~
매일은 무리지만 꾸준히 가보자고~
'공부 > 코딩' 카테고리의 다른 글
[프로그래머스/월간코드챌린지] 괄호 회전하기 (3) | 2025.01.15 |
---|---|
[프로그래머스] 방문 길이 (0) | 2025.01.06 |
[프로그래머스/카카오2019] 실패율 (3) | 2025.01.04 |
[프로그래머스/연습문제] 행렬의 곱셈 (5) | 2025.01.04 |
[프로그래머스/완전탐색] 모의고사 (4) | 2025.01.03 |