[알고리즘] 문자열 정수 변환

DongGyu Jung·2021년 11월 8일
0
post-thumbnail

※ 본 사진과 해당 게시글 내용의 문제 모두 프로그래머스[Programmers]사이트에 발췌해왔습니다.

❓ 문제

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

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

<입출력 >
"1234"	| 1234
"-1234"	| -1234

❗ 풀이

My Code

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의 자리가 되고
Index1인 끝에서 두 번째 자릿수는 (10 ** 1). 즉, 10과 곱하게 되니 10의 자리 숫자가 된다.

이렇게 += 방식 각 자릿수들을 누적합 시키게 되면 문자열을 정수 변환한 값이 완성되는 원리이다.


(2)

def strToInt(str):
    a = int(str)
    return a

..........
허허... 문자열의 "-"int()로 변환하면 음수가 되는줄 몰랐던 1인...
너무 간단하게 해결되어버렸네요....
int() 최고...!!

0개의 댓글