NIRVANA

[DAY-2] 프로그래머스 문자열을 정수로 바꾸기 본문

Coding test(Python3)/스터디

[DAY-2] 프로그래머스 문자열을 정수로 바꾸기

녜잉 2024. 5. 19. 17:38

문제 

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

 

제한 조건

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

 

문제 풀이 접근법1

1) int()함수를 사용하여 문자열 s를 숫자로 변경한다. 

def solution(s):
   
    return int(s)

 

 

int()함수를 사용할 때 '-'부호가 있으면 변환이 안되는 줄 알았는데

찾아보니까 된다고 해서 설마..? 하면서 했는데 엥 진짜 됨...

참고: https://engineer-mole.tistory.com/329

 

[python] 문자열을 숫자로 변환하는 int()함수가 적용되지 않는 경우와 해결법

※ 일본의 한 블로그 글을 번역한 포스트입니다. 오역 및 의역, 직역이 있을 수 있으며 틀린 내용은 지적해주시면 감사하겠습니다. Python 에서는 int()이나 float()를 이용하여 숫자의 문자열을 숫자

engineer-mole.tistory.com

 

문제 풀이 접근법2

1) 문자열 s에서 count()함수를 사용하여 '-'의 존재 여부를 판단한다

2) '-'가 있을 경우 int()함수를 사용하여 정수로 변환한 값을 0에서 빼내어 음수값이 나올 수 있도록한다.

* 그냥 int(s)로 하면 -1234에 또 마이너스가 붙어서 양수가 되길래 부호 부분은 제외하고 int형으로 변경했다. 

3) '-'가 없을 경우 int()함수를 사용하여 정수로 변환한 뒤 반환한다. 

def solution(s):
    answer = 0
    
    if s.count('-') > 0:
        answer = 0-int(s[1:])
    else:
        answer = int(s)

    return answer

 

 


 

다른 분들 문제 풀이

def strToInt(str): 
    result = 0
    for idx, number in enumerate(str[::-1]): 
        if number == '-':
            result *= -1
        else:
            result += int(number) * (10 ** idx)
    return result


# 아래는 테스트로 출력해 보기 위한 코드입니다.
print(strToInt("-1234"));

3행에서 enumerate를 사용하여 str[::-1](결과값: str을 반대로 뒤집음)의 원소와 해당 원소의 인덱스 넘버를 반환한다. 

4행에서 if문을 사용하여 만약 원소가 '-'라면 result에 -1을 곱한다. 

5행에서 else를 통해 만약 원소가 '-'가 아닐 경우, result에 문자열 원소를 int형으로 바꾼 값과 10의 지수(10^idx)를 곱한 값을 더한다.

즉, 위의 코드 결과는 (1*10^3) + (2*10^2) + (3*10^1) + (4*10^0) = (1*1000) + (2*100)+(3*10)+(4*1) = 1234가 된다. 

 

진짜 흥미로운 접근인듯

 


 

💡 알게 된 것

int()함수를 사용하여 문자열을 정수형으로 변경할 때, 마이너스 부호('-')가 있어도 변환 가능하다.