코딩일기/자격증

[정보처리기사] [ Python ] for ... in 반복문과 range() 함수 | 시프트 연산 | 정보처리기사 실기 기출문제

jhy_2023 2025. 1. 21. 22:16
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칸 이동 : 001100100
    • 100 >> 2  0011001 (10진수: 25)

🔎 왼쪽 시프트(<<)

  • a << n: 이진수를 왼쪽으로 n칸 이동합니다.
  • 왼쪽으로 이동하면서 빈칸이 생기면, 뒤에 0이 채워집니다.
  • 예시 : 100 << 1 
    • 숫자 100 (2진수: 1100100 )을 왼쪽으로 1칸 이동 : 11001000
       100<< 1  11001000  (10진수: 200)

📌문제 해설

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칸 이동합니다. 01100100 (맨 오른쪽 비트는 버려지고, 왼쪽에는 0이 채워집니다)
        • 0110010 (10진수: 50)
        • result = 50이고, 여기에 1을 더하면 51이 됩니다.
    • i = 2일 때:
      • a >> 2는 100을 2비트 오른쪽으로 시프트하여 25가 됩니다.
        • 숫자 100 (2진수: 1100100)을 오른쪽으로 2칸 이동합니다. 001100100 (맨 오른쪽 비트 2개는 버려지고, 왼쪽에는 0이 채워집니다)
        • 0011001 (10진수: 25)
        • result = 25이고, 여기에 1을 더하면 26이 됩니다.
  • print(result) 출력
    • 반복문이 종료되면 마지막으로 계산된 result 값이 출력됩니다.
    • 마지막 result 값: 26

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

728x90
반응형