2019년 1월 13일 일요일

#6 알고리즘 연습- 문자열을 정수로 바꾸기 /PYTHON & ord,enumerate


문자열을 정수로 바꾸기


문제 설명
문자열 s를 숫자로 변환한 결과를 반환하는 함수, solution을 완성하세요.
제한 조건
  • s의 길이는 1 이상 5이하입니다.
  • s의 맨앞에는 부호(+, -)가 올 수 있습니다.
  • s는 부호와 숫자로만 이루어져있습니다.
  • s는 0으로 시작하지 않습니다.
입출력 예
예를들어 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)

댓글 없음:

댓글 쓰기

가장 많이 본 글