파이썬 enumerate 내장함수

dongmin·2026년 3월 13일

프로그래머스 코딩테스트 문제를 풀면서 새롭게 알게된 문법과 코테 문제를 기록해두기.

[프로그래머스] 문자열을 정수로 바꾸기 (feat. 파이썬 enumerate)

알고리즘 문제를 풀다 보면 내가 푼 방식과 다른 사람들의 풀이를 비교하면서 새로운 문법이나 접근법을 배우게 된다. 오늘은 프로그래머스의 '문자열을 정수로 바꾸기' 문제를 풀면서 알게 된 enumerate() 함수에 대해 정리해 보려고 한다.

📌 문제 설명

문자열 s를 숫자로 변환한 결과를 반환하는 함수, solution을 완성하는 문제다.

제한 조건

  • s의 길이는 1 이상 5 이하입니다.
  • s의 맨 앞에는 부호(+, -)가 올 수 있습니다.
  • s는 부호와 숫자로만 이루어져 있습니다.
  • s는 "0"으로 시작하지 않습니다.

입출력 예

  • str이 "1234"이면 1234를 반환
  • str이 "-1234"이면 -1234를 반환

💻 나의 풀이

def solution(s):
    str_s = int(s)
    return str_s

나는 파이썬의 내장 함수인 int()를 사용하여 아주 간단하게 풀었다.


💡 다른 사람의 풀이 (알고리즘적 접근)

def strToInt(str): 
    result = 0
    # 문자열을 뒤집어서 1의 자리부터 계산
    for idx, number in enumerate(str[::-1]):
        if number == '-':
            result *= -1
        else:
            # 문자열 숫자를 정수로 바꾸고 10의 idx 승을 곱해 자릿수를 맞춤
            result += int(number) * (10 ** idx)
    return result

## 테스트 코드
print(strToInt("-1234"))

이 코드는 다음과 같은 원리로 동작한다:

  • str[::-1]을 이용해 문자열을 뒤집는다. (예: "-1234" ➡️ "4321-")

  • enumerate()를 사용해 인덱스(idx)와 값(number)을 동시에 뽑아낸다.

  • 10 ** idx를 곱해서 1의 자리, 10의 자리, 100의 자리를 만들어 더해준다.

  • 마지막에 - 부호를 만나면 전체 결과에 -1을 곱해 음수로 만들어준다.

🔎 enumerate() 함수란?
반복문(for문)을 사용할 때, '현재 요소가 몇 번째 인덱스인지' 함께 알아야 하는 경우가 있다. 이때 사용하는 것이 파이썬의 내장 함수인 enumerate()이다.

enumerate는 '열거하다'라는 뜻으로, 리스트나 문자열 같은 반복 가능한(iterable) 객체를 입력받아 인덱스(index)와 요소(value)를 튜플(tuple) 형태로 반환해 준다.

📝 기본 사용법

Python
text = "ABC"

# 일반적인 for문
for letter in text:
    print(letter)
# 출력: A, B, C

# enumerate를 사용한 for문
for idx, letter in enumerate(text):
    print(idx, letter)
# 출력: 
# 0 A
# 1 B
# 2 C

✨ 왜 사용할까?

만약 enumerate()를 모른다면 인덱스를 구하기 위해 아래처럼 코드를 짜야 한다.

# C나 Java 스타일의 방식 (비추천)
text = "ABC"
i = 0
for letter in text:
    print(i, letter)
    i += 1

이렇게 외부 변수 i를 만들고 수동으로 +1을 해주는 것은 코드가 길어지고 실수를 유발할 수 있다. enumerate()를 사용하면 코드가 훨씬 간결해지고 가독성이 높아진다.


🎯 요약

다른 사람의 풀이는 enumerate를 활용해 인덱스(idx)를 10의 거듭제곱(자릿수) 으로 활용한 아주 똑똑한 알고리즘이었다. 실무에서는 내장 함수 int()를 쓰는 것이 맞겠지만, 코딩 테스트나 알고리즘 공부를 할 때는 이렇게 로직을 직접 구현해 보는 것도 큰 도움이 되는 것 같다. 앞으로 인덱스와 값을 동시에 다뤄야 할 때는 잊지 말고 enumerate()를 활용해 봐야겠다!

0개의 댓글