-
[백준/BOJ] 3460번 : 이진수 (JAVA / 자바)백준 2022. 2. 3. 19:43
안녕하세요~ 코딩하는 코알못 코메인입니다.
https://www.acmicpc.net/problem/3460
- 문제 -
난이도 브론즈 3 문제이다.
자바에서 입력방식은 scanner와 bufferedreader가 있다.
자바를 초반에 접하면 처음에 배우는 입력은 scanner이다. scanner가 bufferedreader보다 편하지만 속도가 느리다.
bufferedreader는 무조건 문자열로 받아오기때문에 정수형이나 실수형 변수에 저장하기 위해서는 입력과 형변환을 해줘야한다.
더 자세한 내용은 아래 글 참고 하면 좋다.
풀이 방법
우선 2진수를 구하는 방법부터 간단히 살펴 보겠다. 예제로 나온 13을 보면.
13을 2로 계속 나눠가면서 나머지를 뒤에부터 나열한다. 그리고 몫이 1이 되었을때까지 반복한다.
계산 해보면
13 / 2 = 6 - 1
6 / 2 = 3 - 0
3 / 2 = 1 - 1
이렇게다. 그렇담 13의 2진수는 1101이 되는 것이다. 그럼 처음 나눴을때부터 1이 나왔을때 순서를 출력해야하는데 제일 처음은 0이라 하니 제일 먼저 1이 나왔으니 0, 그리고 다음은 0이니 패스, 다음이 1이니 2. 다음 1이니 3, 즉 0 2 3인 것이다.
-풀이-
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int T = Integer.parseInt(br.readLine()); for(int i = 0; i < T; i++) { //순서를 저장할 변수 count 선언 int count = 0; int N = Integer.parseInt(br.readLine()); while(true) { //계속 나눠서 N이 1이된다면 1도 2진수이니 count를 출력하고 반복문 종료 if(N == 1) { System.out.println(count); break; } //2진수에 1일 올대마다 count 출력 if(N % 2 == 1) { System.out.print(count + " "); } count++; N /= 2; } } } }
-결과-
아직 코딩 공부가 부족한 필자라 설명과 풀이 방법이 많이 미흡할 수 있다. 코딩 고수들은 보시고 문제점이 있다면 댓글로 말해주시면 감사한 마음으로 참고 수정 하겠다.
'백준' 카테고리의 다른 글
[백준/BOJ] 3029번 : 경고 (JAVA / 자바) (0) 2022.02.03 [백준/BOJ] 4101번 : 크냐? (JAVA / 자바) (0) 2022.02.03 [백준/BOJ] 3058번 : 짝수를 찾아라 (JAVA / 자바) (0) 2022.02.03 [백준/BOJ] 3053번 : 택시 기하학 (JAVA / 자바) (0) 2022.02.03 [백준/BOJ] 3034번 : 앵그리 창영 (JAVA / 자바) (0) 2022.02.03