프로그래머스 코딩테스트 문제를 풀면서 새롭게 알게된 문법과 코테 문제를 기록해두기.
알고리즘 문제를 풀다 보면 내가 푼 방식과 다른 사람들의 풀이를 비교하면서 새로운 문법이나 접근법을 배우게 된다. 오늘은 프로그래머스의 '문자열을 정수로 바꾸기' 문제를 풀면서 알게 된 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()를 활용해 봐야겠다!