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️⃣ 코드 구조 분석 :
- 배열 a는 8자리의 2진수를 저장하기 위한 공간입니다.
- while 반복문에서 숫자 n을 계속 2로 나누고, 그 나머지를 배열에 저장합니다.
- 반복이 끝난 후, 배열의 뒷부분부터 출력하여 최종 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이 될 때까지 수행합니다.
- 예를 들어, n = 10일 때 :
반응형
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️⃣ 코드 흐름
- 입력값 n = 10:
- n이 2로 나뉘는 나머지를 계산하고, 배열에 저장합니다.
- 반복: n % 2 (나머지)와 n / 2 (몫)를 이용.
- 저장된 배열 값:
- 반복 결과 배열 a에 저장된 값: [0, 1, 0, 1, 0, 0, 0, 0] (오른쪽에서부터 채워짐).
- 출력 과정:
- 배열을 역순으로 읽어 출력.
- 최종 출력: 00001010.
"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."
728x90
반응형
'코딩일기 > 자격증' 카테고리의 다른 글
[정보처리기사] [ Java ] 반복문을 활용한 2차원 배열 생성 | 정보처리기사 실기 기출 문제 풀이 (0) | 2024.12.16 |
---|---|
[정보처리기사] [ C ] 포인터와 배열 | 2020년 3회 정보처리기사 실기 기출문제 (0) | 2024.12.10 |
[정보처리기사] 블록체인(Blockchain) | SW 신기술 및 관련 용어 | 정보처리기사 실기 기출문제 (0) | 2024.12.10 |
[정보처리기사] 프로세스 상태 전이 | 정보처리기사 실기 기출문제 (0) | 2024.12.10 |
[정보처리기사] 집계 함수와 GROUP BY를 활용하는 SQL 문제 | 2020년 4회 정보처리기사 실기 기출문제 (0) | 2024.12.03 |