문자열을 정수로 바꾸기
문제 링크
나의 풀이
def solution(s):
answer = 0
answer = int(s)
return answer
- 따로 부연 설명은 필요하지 않을 듯 하다. int() 를 통해 정수형으로 변환하되 - 도 적용이 된다는걸 다시금 알았다.
문제에서 int() 함수를 사용하지 말라고 했으면 어떤 방식으로 풀었어야 했나? 에 대한 생각은 해볼 필요가 있다. 다른 사람의 풀이를 통해 파악해보고자 한다.
다른 사람의 풀이
def strToInt(str):
result = 0
for idx, number in enumerate(str[::-1]):
if number == '-':
result *= -1
else:
result += int(number) * (10 ** idx)
return result
- str[::-1]으로 문자열을 역배열 하고, enumerate 함수를 이용하여 한 글자당 인덱스를 배정해서 각 자리에 10의 지수만큼 곱해서 더해주었다. 이 풀이에도 중간에 int()가 들어갔지만 이 부분은 지난 글(시저 암호)에서 학습한 아스키코드 개념을 적용하면 int()를 사용하지 않고 처음부터 끝까지 풀이할 수 있을 것이라 생각한다. 이런 방식으로 직접 풀이한 것은 추후 따로 글 작성하겠다.
def strToInt(str):
result = 0
size=len(str)
temp = 0
if str [0] == '-' :
sign = -1
else :
sign = 1
for i in range(0, size) :
if str[i] == '1' :
temp = 1
elif str[i] == '2' :
temp = 2
elif str[i] == '3' :
temp = 3
elif str[i] == '4' :
temp = 4
elif str[i] == '5' :
temp = 5
elif str[i] == '6' :
temp = 6
elif str[i] == '7' :
temp = 7
elif str[i] == '8' :
temp = 8
elif str[i] == '9' :
temp = 9
else :
temp = 0
for i in range(size-i-1) :
temp = temp * 10
result = result + temp
result = result * sign
return result
- 코드의 간결성을 추구하는 파이썬의 이념에는 위배되는 코드구성 일지도 모르겠지만 공부하는 입장에서는 이런 코드 구성도 고려해야한다고 생각한다. 성능측면에서는 다른 결과가 나올수도 있다.