코딩일기/자격증

[정보처리기사] [ Java ] 10진수를 2진수로 변환하는 알고리즘 | 2020년 3회 정보처리기사 실기 기출문제

jhy_2023 2024. 12. 10. 21:16
728x90
반응형

문제

다음은 n이 10일 때, 10진수을 2진수로 변환하는 자바 프로그램이다. ( 1 )번, ( 2 )번에 알맞는 값을 적으시오.

class good {
    public static void main(String[] args) {
        int[] a = new int[8];
        int i = 0; int n = 10;
        while [___1번___] {
            a[i++] = [___2번___];
            n /= 2;
        }
        for (i = 7; i >= 0; i--) {
            System.out.print(a[i]);
        }
    }
}
[출력결과]
00001010

정답

1번 정답

  • n > 0 또는
  • n >=1 또는
  • i < 8 또는 i < a.length
  • i <= 7

2번 정답

  • n%2 또는
  • n&1

해설

📌 10진수를 2진수로 변환 하기

10진수를 2진수로 변환하려면, 10진수를 계속 2로 나누어 나머지를 기록하고, 나머지를 거꾸로 읽으면 2진수가 됩니다.

숫자 10을 2진수로 바꿔보겠습니다.

  • 1. 계산 과정 :
    • 10 ÷ 2 = 5 (나머지 0) → 첫 번째 나머지는 0
    • 5 ÷ 2 = 2 (나머지 1) → 두 번째 나머지는 1
    • 2 ÷ 2 = 1 (나머지 0) → 세 번째 나머지는 0
    • 1 ÷ 2 = 0 (나머지 1) → 네 번째 나머지는 1
  • 2. 나누기를 종료하는 조건은 몫이 0이 될 때입니다. 이제 나머지를 거꾸로 읽으면 2진수가 됩니다.
  • 3. 나머지를 위에서 아래로 읽으면: 0, 1, 0, 1 > 나머지를 아래에서 위로 읽으면: 1010 (2진수)
    즉, 10진수 10은 2진수로 **1010**입니다.

📌 문제 코드 해설

주어진 코드는 위의 변환 과정을 코드로 구현한 것입니다.

1️⃣ 코드 구조 분석 :

  1. 배열 a는 8자리의 2진수를 저장하기 위한 공간입니다.
  2. while 반복문에서 숫자 n을 계속 2로 나누고, 그 나머지를 배열에 저장합니다.
  3. 반복이 끝난 후, 배열의 뒷부분부터 출력하여 최종 2진수를 만듭니다.

2️⃣ 코드 분석 :

int[] a = new int[8];
  • 배열 a는 크기가 8인 정수 배열로, 변환된 2진수를 저장하기 위한 공간입니다.
  • 8자리 2진수를 표현하기 위해 만든 배열입니다.
int i = 0; int n = 10;
  • i는 배열의 인덱스를 나타내는 변수로, 배열에 값을 순차적으로 저장하는 데 사용됩니다.
  • n은 변환할 10진수 숫자입니다. 초기값으로 10을 설정했습니다.
while (n > 0) {  // 1번: n이 0보다 크면 반복
            a[i++] = n % 2;  // 2번: n을 2로 나눈 나머지를 배열에 저장
            n /= 2;          // n을 2로 나누어 몫을 업데이트
        }
  •  n이 0보다 클 때만 반복. 이는 나눗셈이 끝날 때까지 실행됩니다.
  • 나머지 구하기 : n % 2는 2진수의 각 비트를 계산하는 핵심입니다.
    • 계산된 나머지를 배열 a의 i번째 위치에 저장하고나서 i 값을 1 증가시킵니다.(후위 연산이기 때문에)
    • 예를 들어, n = 10일 때:
      • 첫 번째 나머지: 10 % 2 = 0 → a[0] = 0, 이후 i = 1
      • 두 번째 나머지: 5 % 2 = 1 → a[1] = 1, 이후 i = 2
  • 몫 구하기 : n /= 2( (n=n/2) );는 n을 2로 나눈 몫으로 갱신합니다.
    • 예를 들어, n = 10일 때 : 
      • 처음 n = 10 → n / 2 = 5 (몫)
      • 이후 n = 5 → n / 2 = 2
      • 반복적으로 n이 0이 될 때까지 수행합니다.
반응형
        for (i = 7; i >= 0; i--) { // 7. 배열의 마지막 요소부터 시작해 출력
            System.out.print(a[i]); // 8. 배열의 값을 하나씩 출력
        }
    }
}
  • for (i = 7; i >= 0; i--) : 
    • 배열의 마지막 인덱스(i = 7)부터 시작해 i 값을 줄여가며 반복합니다.
    • 이는 배열에 저장된 2진수 값들을 역순으로 출력하기 위함입니다.
    • 배열 a는 앞에서부터 값을 저장했기 때문에, 뒤에서부터 읽어야 올바른 2진수를 얻을 수 있습니다.
  • System.out.print(a[i]); : 
    • 배열의 i번째 값을 출력합니다.
    • 배열의 값은 0 또는 1로, 출력된 값들이 이어져서 최종적으로 8자리 2진수로 보이게 됩니다.

 

728x90

3️⃣ 코드 흐름

  1. 입력값 n = 10:
    • n이 2로 나뉘는 나머지를 계산하고, 배열에 저장합니다.
    • 반복: n % 2 (나머지)와 n / 2 (몫)를 이용.
  2. 저장된 배열 값:
    • 반복 결과 배열 a에 저장된 값: [0, 1, 0, 1, 0, 0, 0, 0] (오른쪽에서부터 채워짐).
  3. 출력 과정:
    • 배열을 역순으로 읽어 출력.
    • 최종 출력: 00001010.

"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."

728x90
반응형