Python 기초 문제 풀이 및 해설

Python 기초 문제 풀이

문제 1: 행운의 숫자 쌍

두 숫자가 차이가 3이고 각 자릿수의 합이 6으로 나누어떨어지는 행운의 숫자 쌍을 판별하는 함수를 작성하세요. 모든 3자리 행운의 숫자 쌍을 찾아야 합니다.

def is_lucky_number(num):
    hundreds = num // 100
    tens = (num // 10) % 10
    units = num % 10
    digit_sum = hundreds + tens + units
    
    return digit_sum % 6 == 0

for first_num in range(100, 1000):
    second_num = first_num + 3
    if is_lucky_number(first_num) and is_lucky_number(second_num):
        print(f"{first_num} {second_num}")

실행 결과:
129 132
138 141
147 150
189 192
219 222
228 231
237 240
279 282
...
...

문제 2: 람다 함수로 최댓값 찾기

세 개의 정수를 입력받아 람다 함수를 사용하여 최댓값을 찾는 코드를 작성하세요.

input_values = input("세 개의 정수를 쉼표로 구분하여 입력하세요: ").split(",")
max_value = lambda x, y, z: x if (x >= y and x >= z) else (y if y >= z else z)
print(f"최댓값: {max_value(int(input_values[0]), int(input_values[1]), int(input_values[2]))}")

문제 3: 리스트 요소 앞뒤 교환 (슬라이싱 활용)

리스트의 앞부분과 뒷부분을 교환하는 함수를 작성하세요. 요소 개수가 홀수일 경우 중간 요소는 그대로 둡니다.
예시: [1, 2, 3, 4, 5] → [4, 5, 3, 1, 2]

def swap_list_halves(input_list):
    length = len(input_list)
    middle = length // 2
    
    if length % 2 != 0:
        return input_list[middle+1:] + [input_list[middle]] + input_list[:middle]
    else:
        return input_list[middle:] + input_list[:middle]

user_input = input("리스트 요소를 쉼표로 구분하여 입력하세요: ").split(",")
result = swap_list_halves(user_input)
print("교환 결과:", result)

실행 결과:
1,2,3,4,5
교환 결과: ['4', '5', '3', '1', '2']

문제 4: 문자열에서 특정 문자 제거

두 문자열을 입력받아 첫 번째 문자열에서 두 번째 문자열의 모든 발생을 제거하는 함수를 작성하세요.
예시: 입력 "abcdabcde-ab" → 출력 "cdcde"

방법 1: replace() 메서드 사용

expression = input("문자열 뺄셈 표현식을 입력하세요 (예: abcdabcde-ab): ")
main_str, substr = expression.split("-")
result = main_str.replace(substr, "")
print(f"결과: {result}")

실행 결과:
abcdabcde-ab
결과: cdcde

방법 2: re.sub() 메서드 사용 (정규표현식)

import re

expression = input("문자열 뺄셈 표현식을 입력하세요 (예: abcdabcde-ab): ")
main_str, substr = expression.split("-")
result = re.sub(substr, "", main_str)
print(f"결과: {result}")

실행 결과:
abcdabcde-ab
결과: cdcde

replace() 메서드 설명

str.replace(old, new[, count]) 메서드는 기존 문자열에서 old 부분을 new로 교체합니다.

  • old: 교체될 부분 문자열
  • new: 새 문자열
  • count: (선택) 교체할 최대 횟수

예를 들어, 문자열 '안녕하세요: 파이썬 프로그래밍'에서 '하세요'를 제거하려면:

original = "안녕하세요: 파이썬 프로그래밍"
modified = original.replace("하세요", "")
print(modified)

실행 결과:
안녕: 파이썬 프로그래밍

count 매개변수를 사용하여 특정 횟수만 교체할 수도 있습니다.

re.sub() 메서드 설명

정규표현식 라이브러리의 re.sub() 메서드는 더 강력한 패턴 매칭이 가능합니다.

re.sub(pattern, repl, string, count=0, flags=0)

  • pattern: 검색할 패턴
  • repl: 교체할 문자열
  • string: 원본 문자열
  • count: 교체할 최대 횟수

두 메서드 모두 원본 문자열을 변경하지 않고, 새로운 문자열을 반환합니다. 따라서 결과를 사용하려면 변수에 할당해야 합니다.

태그: 파이썬 프로그래밍 문제 알고리즘 lambda 문자열 처리

5월 21일 10:05에 게시됨