혼공학습단/혼공파

[혼공파] 띠 계산 프로그램: 세 가지 구현 방식 비교

sunghoyaaa 2025. 1. 19. 14:43

혼자 공부하는 파이썬 (개정판)

이 게시글은 혼공학습단(혼공파) 13기의 2주차 과제를 포함하고있습니다.

1. if - elif 문을 활용한 구현

str_input = input("태어난 해를 입력해주세요> ")
birth_year = int(str_input)

if birth_year % 12 == 0:
    print('원숭이 띠입니다.')
elif birth_year % 12 == 1:
    print('닭 띠입니다.')
elif birth_year % 12 == 2:
    print('개 띠입니다.')
elif birth_year % 12 == 3:
    print('돼지 띠입니다.')
elif birth_year % 12 == 4:
    print('쥐 띠입니다.')
elif birth_year % 12 == 5:
    print('소 띠입니다.')
elif birth_year % 12 == 6:
    print('호랑이 띠입니다.')
elif birth_year % 12 == 7:
    print('토끼 띠입니다.')
elif birth_year % 12 == 8:
    print('용 띠입니다.')
elif birth_year % 12 == 9:
    print('뱀 띠입니다.')
elif birth_year % 12 == 10:
    print('말 띠입니다.')
elif birth_year % 12 == 11:
    print('양 띠입니다.')

설명
if-elif 구조는 조건을 순차적으로 평가하며, 첫 번째로 True가 되는 조건을 실행합니다. 조건의 흐름이 명확하여 로직을 이해하고 수정하기 쉽습니다.

장점

  • 각 조건이 독립적으로 작성되어 논리적 흐름이 분명합니다.
  • 조건을 추가하거나 수정하기 용이합니다.

단점

  • 조건문이 많아질수록 코드가 길어지고 유지보수가 어려워질 수 있습니다.
  • 조건이 많아지면 성능 면에서 비효율적일 수 있습니다.

2. 리스트를 활용한 구현

str_input = input("태어난 해를 입력해주세요> ")
birth_year = int(str_input)

animals = [
    '원숭이', '닭', '개', '돼지', 
    '쥐', '소', '범', '토끼', 
    '용', '뱀', '말', '양'
]

animal = animals[birth_year % 12]
print(f'{animal} 띠입니다.')

설명
리스트를 사용하면 태어난 해 % 12 값을 인덱스로 활용하여 동물 이름을 바로 조회할 수 있습니다. 조건문을 반복적으로 작성하지 않아도 되므로 코드가 간결하고 효율적입니다.

장점

  • 코드가 간단하며, 조건을 인덱스 기반으로 처리하기 때문에 가독성이 높습니다.
  • 조건과 결과가 고정된 규칙을 따를 경우 효율적으로 사용할 수 있습니다.

단점

  • 연속적이지 않은 조건을 처리하기에는 적합하지 않습니다.
  • 리스트 인덱스 범위를 벗어난 경우 예외가 발생할 수 있으므로 주의가 필요합니다.

3. 딕셔너리를 활용한 구현

str_input = input("태어난 해를 입력해주세요> ")
birth_year = int(str_input)

animal_dict = {
    0: '원숭이',
    1: '닭',
    2: '개',
    3: '돼지',
    4: '쥐',
    5: '소',
    6: '범',
    7: '토끼',
    8: '용',
    9: '뱀',
    10: '말',
    11: '양'
}

animal = animal_dict[birth_year % 12]
print(f'{animal} 띠입니다.')

설명
딕셔너리는 키-값 쌍으로 구성된 자료구조로, 특정 키에 해당하는 값을 빠르게 검색할 수 있습니다. 조건과 결과가 명확히 매핑되어야 하는 경우 딕셔너리를 사용하면 효율적입니다.

장점

  • 조건과 결과를 명확히 매핑할 수 있어 가독성이 뛰어납니다.
  • 특정 키를 빠르게 검색할 수 있어 성능이 우수합니다.

단점

  • 데이터 초기화가 필요하며, 조건이 동적이거나 복잡한 경우에는 적합하지 않을 수 있습니다.

4. 세 가지 방식 비교

방식 장점 단점
if-elif 단순하고 직관적 조건이 많아질수록 코드 길이가 길어지고 유지보수가 어려울 수 있음
리스트 간결하고 규칙적인 조건 처리에 적합 연속적이지 않은 조건을 처리하기에는 부적합, 범위 초과 주의 필요
딕셔너리 조건과 결과를 명확히 매핑할 수 있고 확장성이 높음 초기 데이터 구성 필요, 동적 조건 처리에 적합하지 않음

5. 어떤 방법을 선택할까?

  • if-elif: 조건이 적고 논리적인 흐름을 순차적으로 표현해야 하는 경우.
  • 리스트: 조건이 숫자 인덱스를 기반으로 규칙적이고 간단한 경우.
  • 딕셔너리: 조건과 결과가 명확히 매핑되는 경우. 특히 대량의 데이터 검색이 필요한 경우.
728x90