✅ 문제

10진수 정수를 입력 받아 2진수로 변환해서 출력하시오.
✅ 코드
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
int[] leejin = new int[20];
for (int i = 0; i < leejin.length; i++) {
leejin[i] = num%2;
num /= 2;
}
for (int i = leejin.length-1; i >= 0; i--){
System.out.print(leejin[i]);
}
}
}
✅ 추론 과정
십진수를 이진수로 만들어주려면 2로 나눈 나머지를 활용해주면 된다.
십진수를 2로 나눈 나머지를 계속해서 구해서, 이를 역순으로 나열해주면 이진수를 얻을 수 있다.
예를 들어, 문제 보기에서처럼 10을 이진수로 변환한다고 가정하면
10 ÷ 2 = 5, 나머지 0
5 ÷ 2 = 2, 나머지 1
2 ÷ 2 = 1, 나머지 0
1 ÷ 2 = 0, 나머지 1
맨 밑에 줄 부터 나머지를 순서대로 나열하면 1010이다.
따라서 10의 이진수는 1010 이다.
이 로직에 따라 코드를 짜 보면
처음에 넉넉하게 20칸짜리 배열을 선언해줬다.
그리고 순서대로 입력받은 숫자를 2로 나눈 나머지값을 배열 앞 칸 부터 채워준다.
그리고 다시 숫자를 2로 나눈 몫을 가지고 위 과정을 반복해준다.
for문을 돌리는 동안 배열 [leejin] 에 담기는 데이터▼
| [0]번 인덱스 | [1]번 인덱스 | [2]번 인덱스 | [3]번 인덱스 |
| 0 | 1 | 0 | 1 |
| i=0일 때 10/2=5, 나머지0 | i=1일 때 5/2=2, 나머지1 | i=2일 때 2/2=1, 나머지0 | i=3일 때 1/2=0, 나머지1 |
그리구 배열에서 데이터를 꺼내올 때는 반대로 가장 마지막 인덱스에 담긴 데이터부터 순서대로 빼오면 된다.
배열 길이의 -1 부터 0번 인덱스까지로 포문 범위를 설정해주고 돌리면 된다.
'코딩테스트 > JavaFestival(스마트인재개발원)' 카테고리의 다른 글
| [자바페스티벌] 22번 - 공백 포함 별찍기 (1) | 2024.03.27 |
|---|---|
| [자바페스티벌] 21번 - 1차원 배열에서 두 개의 숫자를 뽑아 거리 비교하기 (0) | 2024.03.27 |
| [자바페스티벌] 19번 - 단 수와 곱해지길 원하는 수 입력받아 구구단 출력하기 (0) | 2024.03.26 |
| [자바페스티벌] 18번 - 중복이 없이 숫자를 뽑는 로또 프로그램 만들기 (1) | 2024.03.26 |
| [자바페스티벌] 17번 - 숫자를 입력받아 3의 배수인 숫자 출력하기 (1) | 2024.03.25 |