문자열을 정수로 바꾸기
문제 설명
문자열 s를 숫자로 변환한 결과를 반환하는 함수, solution을 완성하세요.
제한 조건
- s의 길이는 1 이상 5이하입니다.
- s의 맨앞에는 부호(+, -)가 올 수 있습니다.
- s는 부호와 숫자로만 이루어져있습니다.
- s는
0
으로 시작하지 않습니다.
입출력 예
예를들어 str이
str은 부호(+,-)와 숫자로만 구성되어 있고, 잘못된 값이 입력되는 경우는 없습니다.
1234이면 1234를 반환하고,
-1234이면 -1234를 반환하면 됩니다.
str은 부호(+,-)와 숫자로만 구성되어 있고, 잘못된 값이 입력되는 경우는 없습니다.
문제풀이 IDEA
문자열을 정수로 바꾸는 방법은 parseInt를 이용하면 손쉽게 바꿀수 있다
하지만 이러한 method를 사용하지 않고 바꾸는 방법이라 한다면
ascii code를 가져와서 연산한 값을 int로 쓰고 출력을 해준다면 되지 않을까?
나의 풀이 ⭐ (하지만 프로그래머스 채점 코드에서 실패가 뜨는데 input값을
알 수 없어서 어느 부분이 잘못된건지 알수 없다 ㅠㅠ)
def solution(s):
li =[]
for i in range(0,len(s)): len(s)만큼 for문을 돌려서
li.append(ord(s[i])) ord를 이용해 ASCII코드로 변환 후 li에 저장
if li[0] == 45: ASCII Code값 45는 -를 나타내므로
li[0]=-1 int인 -1로 바꿔준다
sum = 0
if li[0] == -1: 그리고 li에 -1이 첫번째 index라면
for i in range(1,len(li)): range를 1부터 하여
sum = sum*10 + (li[i]-48) sum*10으로 index가 증가할때마다 자리수를 올려주고
li[i] -48로 아스키 코드 - 48을 하여 해당 숫자를 표현
return sum*li[0] (3이 아스키 코드 51이므로-48을 해서 3을 표현함)
else:
for i in range(0,len(li)):
sum = sum*10 + (li[i]-48)
return sum
눈여겨 보아야 할 개념
ASCII 코드로 변환하는 ord()를 사용하였고
위에서 for문과 li를 쓰는 부분에서 enumerate를 쓴다면 좀더 코드가 간결하고 이쁘게 정리가 될것 같다
아직 enumerate가 손에 익지 않았는데 의도적으로 사용을 해보도록 하자
enumerate 에 대한 예시
>>> for i,name in enumerate(['a', 'b', 'c']):
print(i,name)
0 a
1 b
2 c
출처 : 프로그래머스(https://programmers.co.kr)
댓글 없음:
댓글 쓰기