나의 개발일지

[프로그래머스] Lv.0 숨어있는 숫자의 덧셈 (2) [Python, 파이썬] 본문

프로그래머스

[프로그래머스] Lv.0 숨어있는 숫자의 덧셈 (2) [Python, 파이썬]

YoonJuHan 2022. 12. 27. 12:34
나의 코드
def solution(my_string):
    answer = 0
    tmp = 0
    for i in my_string:
        if i.isnumeric():
            tmp = tmp * 10 + int(i)
        else:
            answer += tmp
            tmp = 0
    answer += tmp
    return answer
  • my_string = "aBc1f5jk123wq23" 일 때
  1. for 문으로 문자열 my_string의 문자들을 loop 한다.
  2. if 조건에서 i.isnumeric()로 문자가 숫자로 이루어져 있는지 체크
    1. isnumeric()은 숫자로 된 문자면 True, 아니면 False를 반환 (더 많은 설명이 필요하지만 간단한 설명)
  3. True 면 tmp변수에 tmp * 10 + int(i)로 연산을 해서 대입
    1. 바로 answer에 대입하지 않고 tmp에 이런 연산을 하는 이유는
    2. 123처럼 연속적으로 나오는 숫자는 하나의 숫자로 치기 때문
    3. tmp = 0이고 문자열에 1이 나오면 tmp = 0 * 10 + 1으로 tmp는 1이 된다.
    4. 다음 2가 나오면 tmp = 1 * 10 + 2로 12가 된다.
    5. 다음 3이 나오면 tmp = 12 * 10 + 3으로 123이 된다.
    6. 이렇게 연속적으로 나오면 1, 2, 3 각각의 숫자가 아닌 123이라는 숫자를 만들기 위함
    7. 그다음 문자가 숫자가 아니게 되면 else 조건에서 answer에 123을 더하고 tmp 초기화
    8. 연속적으로 나오지 않아도 tmp = 0 * 10 + i처럼 하나의 숫자만 tmp에 들어가고 else에서 answer에 더함
  4. False 면 answer에 tmp를 더하고 tmp를 0으로 초기화
  5. for 문 밖에서 answer += tmp를 마지막으로 또 하는 이유
    1. 현재 my_string = "aBc1f5jk123wq23"처럼 마지막에 숫자가 나오는 경우를 고려
    2. else 조건은 숫자로 된 문자 다음이 숫자가 아니면 answer에 대입하는 조건
    3. 마지막에 숫자가 나오면 else 조건에 안 맞기 때문에 answer에 23을 더하지 않음
    4. 이런 경우를 고려해 마지막 리턴 전 answer += tmp를 통해 23을 더해주고 리턴을 하기 위함
Comments