728x90
반응형
2021년 2회 정보처리기사 실기 기출문제
문제
다음 파이썬 프로그램의 실행결과를 쓰시오
a = 100
result = 0
for i in range(1,3):
result = a >> i
result = result + 1
print(result)
정답
26
반응형
해설
📌 for ... in 문
- for ... in 문은 반복문으로, 리스트, 튜플, 문자열, 딕셔너리, 범위(range) 등 순회 가능한(iterable) 객체의 각 요소를 순차적으로 접근하며 반복 작업을 수행할 때 사용됩니다.
# 기본 구조
for 변수 in iterable:
실행
📌 range( )
- range( )는 숫자들의 연속적인 범위를 생성하는 함수입니다. 이 함수는 반복문(for)과 함께 자주 사용되며, 특정 범위의 숫자들을 차례로 생성합니다.
# 기본 구조
range(시작, 끝, 증가값)
- 시작 (start): 반복을 시작할 숫자 (기본값: 0)
- 끝 (stop): 반복을 끝낼 숫자(포함하지 않음)
- 증가값 (step): 숫자를 몇씩 증가(또는 감소)시킬지 지정 (기본값: 1)
- 예시
- range(1, 5) : 숫자 1부터 4까지 생성합니다. 끝값인 5는 포함되지 않습니다.
- range(1, 10, 2) : 숫자 1부터 9까지, 2씩 증가하면서 생성합니다.
- range(5) : 하나의 숫자만 넣으면 시작값을 0으로 설정한 것과 동일합니다.
for i in range(1, 5):
print(i)
# 출력:
# 1
# 2
# 3
# 4
for i in range(1, 10, 2):
print(i)
# 출력:
# 1
# 3
# 5
# 7
# 9
for i in range(5):
print(i)
# 출력:
# 0
# 1
# 2
# 3
# 4
728x90
📌시프트 연산
시프트 연산은 이진수를 왼쪽(<<) 또는 오른쪽(>>)으로 이동시키는 연산입니다. 먼저 2진수로 변환하는 방법에 대해 알아보겠습니다.
1️⃣ 10진수를 2진수로 변환 하기
컴퓨터는 모든 데이터를 2진수(0과 1)로 처리합니다.
예를 들어, 숫자 5는 2진수로 101, 숫자 10은 1010입니다.
🔎 예시:
10진수를 2진수로 변환하려면, 10진수를 계속 2로 나누어 나머지를 기록하고, 나머지를 거꾸로 읽으면 2진수가 됩니다.
숫자 10을 2진수로 바꿔보겠습니다.
- 10 ÷ 2 = 5 (나머지 0) → 첫 번째 나머지는 0
- 5 ÷ 2 = 2 (나머지 1) → 두 번째 나머지는 1
- 2 ÷ 2 = 1 (나머지 0) → 세 번째 나머지는 0
- 1 ÷ 2 = 0 (나머지 1) → 네 번째 나머지는 1
- 나누기를 종료하는 조건은 몫이 0이 될 때입니다. 이제 나머지를 거꾸로 읽으면 2진수가 됩니다.
- 나머지를 위에서 아래로 읽으면: 0, 1, 0, 1 > 나머지를 아래에서 위로 읽으면: 1010 (2진수)
즉, 10진수 10은 2진수로 1010입니다.
2️⃣ 2진수를 10진수로 변환 하기
2진수를 10진수로 변환하려면 2진수의 각 자리 값을 2의 거듭제곱으로 계산한 뒤 모두 더하면 됩니다.
3️⃣ 시프트 연산
시프트 연산은 이진수를 왼쪽(<<) 또는 오른쪽(>>)으로 이동시키는 연산입니다.
🔎 오른쪽 시프트(>>)
- a >> n: 이진수를 오른쪽으로 n칸 이동합니다.
- 오른쪽으로 이동하면서 빈칸이 생기면, 앞쪽에 0이 채워집니다(양수 기준).
- 예시 : 100 >> 2
- 숫자 100 (2진수: 1100100)을 오른쪽으로 2칸 이동 : 0011001
00 - 100 >> 2 → 0011001 (10진수: 25)
- 숫자 100 (2진수: 1100100)을 오른쪽으로 2칸 이동 : 0011001
🔎 왼쪽 시프트(<<)
- a << n: 이진수를 왼쪽으로 n칸 이동합니다.
- 왼쪽으로 이동하면서 빈칸이 생기면, 뒤에 0이 채워집니다.
- 예시 : 100 << 1
- 숫자 100 (2진수: 1100100 )을 왼쪽으로 1칸 이동 : 11001000
100<< 1 → 11001000 (10진수: 200)
- 숫자 100 (2진수: 1100100 )을 왼쪽으로 1칸 이동 : 11001000
📌문제 해설
a = 100
result = 0
for i in range(1, 3):
result = a >> i
result = result + 1
print(result)
- 변수 a와 result 초기화
- a = 100: 변수 a에 100을 저장합니다.
- result = 0: 결과를 저장할 변수 result를 초기화합니다.
- for i in range(1, 3)
- range(1, 3)는 1부터 2까지의 정수를 생성합니다. 따라서, for i in range(1, 3)는 i가 1부터 2까지 반복하며 실행됩니다.
- 반복문
- 반복문 내부를 살펴보면, 두 가지 연산이 이루어집니다.
- a >> i (오른쪽 시프트) : a를 i만큼 오른쪽으로 시프트합니다.
- result = result + 1 : 시프트 연산 결과에 1을 더한 값을 result에 저장합니다.
- 반복문 내부를 살펴보면, 두 가지 연산이 이루어집니다.
- i = 1일 때:
- a >> 1은 100을 1비트 오른쪽으로 시프트하여 50이 됩니다.
- 숫자 100 (2진수: 1100100)을 오른쪽으로 1칸 이동합니다. 0110010
0(맨 오른쪽 비트는 버려지고, 왼쪽에는 0이 채워집니다) - 0110010 (10진수: 50)
- result = 50이고, 여기에 1을 더하면 51이 됩니다.
- 숫자 100 (2진수: 1100100)을 오른쪽으로 1칸 이동합니다. 0110010
- a >> 1은 100을 1비트 오른쪽으로 시프트하여 50이 됩니다.
- i = 2일 때:
- a >> 2는 100을 2비트 오른쪽으로 시프트하여 25가 됩니다.
- 숫자 100 (2진수: 1100100)을 오른쪽으로 2칸 이동합니다. 0011001
00(맨 오른쪽 비트 2개는 버려지고, 왼쪽에는 0이 채워집니다) - 0011001 (10진수: 25)
- result = 25이고, 여기에 1을 더하면 26이 됩니다.
- 숫자 100 (2진수: 1100100)을 오른쪽으로 2칸 이동합니다. 0011001
- a >> 2는 100을 2비트 오른쪽으로 시프트하여 25가 됩니다.
- print(result) 출력
- 반복문이 종료되면 마지막으로 계산된 result 값이 출력됩니다.
- 마지막 result 값: 26
"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."
728x90
반응형
'코딩일기 > 자격증' 카테고리의 다른 글
[정보처리기사] AAA(Triple-A) : Authentication, Authorization, Accounting 개념 정리 | 정보처리기사 실기 기출문제 (0) | 2025.01.22 |
---|---|
[정보처리기사] [ C ] 지역변수와 함수 호출 | 정보처리기사 실기 기출문제 (0) | 2025.01.22 |
[정보처리기사] [ C ] 포인터와 배열 | 정보처리기사 실기 기출문제 (0) | 2025.01.21 |
[정보처리기사] [Java] 상속과 오버라이딩, super 키워드 | 정보처리기사 실기 기출문제 (0) | 2025.01.20 |
[정보처리기사] static 메소드란? 객체 없이 호출하는 방법 | 정보처리기사 실기 기출문제 (0) | 2025.01.20 |