※ 본 사진과 해당 게시글 내용의 문제 모두 프로그래머스[Programmers]사이트에 발췌해왔습니다.
문자열 s를 숫자로 변환한 결과를 반환하는 함수, solution을 완성하세요.
제한 조건 :
s의 길이는 1 이상 5이하입니다.
s의 맨앞에는 부호(+, -)가 올 수 있습니다.
s는 부호와 숫자로만 이루어져있습니다.
s는 "0"으로 시작하지 않습니다.
<입출력 예>
"1234" | 1234
"-1234" | -1234
def solution(s):
if s[0] == '-' :
answer = (0-abs(int(s)))
else :
answer = int(s)
return answer
부호를 판별하기 위해서 문자열의 첫번째 값을 s[0]
으로 비교해준다.
우선 음수일 경우 ( if s[0] == '-':
),
0에 abs(ins(s))
값을 빼주어 정수화한 s를 음수로 만들어준다.
(1)
def strToInt(str):
result = 0
for idx, number in enumerate(str[::-1]):
if number == '-':
result *= -1
else:
result += int(number) * (10 ** idx)
return result
독특하게도 역순 인덱싱 , enumerate()
, 제곱을 활용한 풀이다.
우선 result변수를 0으로 설정하고
for문을 시작하는데
enumerate(str[::-1])
를 해석해보자면
가장 뒷자리 값 ~ 가장 앞자리 값. 즉, 1의 자리 값 ~ 10의 제곱 자리 값에 0부터 시작하는 인덱스(Index)값을 짝지어준다.
놀라운건 조건문에서 시작되는데
우선 첫 번째 조건문 if number == '-':
은 반전으로 for문의 가장 마지막 적용 순서이다.
아래 else조건문에서 result에 누적된 값이 모두 입력된 후,
숫자 역순에 index를 부여한 enumerate에서 마지막 index를 가진 부호값이 for문의 number로 올 때 적용시키는 if문인 것이다.
음수( - 가 붙어있는)일 경우에는 단순하게 -1을 곱하면 음수가 되고
애초에 양수인 값은 부호가 없기 때문에 상관없다.
다시 else조건문으로 내려가 보자면
int(number)
는 당연한 과정이니 넘어가고 * (10 ** idx)
가 중요한데
1의 자리인 경우. 즉, str의 가장 마지막 자릿 수의 Index가 0인 경우는
10 ** 0
로 1이 된다.
이 값이 int(number)
와 곱하게되면 문자열 숫자의 마지막 자릿값은 1의 자리가 되고
Index가 1인 끝에서 두 번째 자릿수는 (10 ** 1)
. 즉, 10과 곱하게 되니 10의 자리 숫자가 된다.
이렇게 +=
방식 각 자릿수들을 누적합 시키게 되면 문자열을 정수 변환한 값이 완성되는 원리이다.
(2)
def strToInt(str):
a = int(str)
return a
..........
허허... 문자열의 "-"가 int()
로 변환하면 음수가 되는줄 몰랐던 1인...
너무 간단하게 해결되어버렸네요....
int()
최고...!!