Notice
Recent Posts
Recent Comments
Link
나의 개발일지
[프로그래머스] Lv.0 숨어있는 숫자의 덧셈 (2) [Python, 파이썬] 본문
나의 코드
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" 일 때
- for 문으로 문자열 my_string의 문자들을 loop 한다.
- if 조건에서 i.isnumeric()로 문자가 숫자로 이루어져 있는지 체크
- isnumeric()은 숫자로 된 문자면 True, 아니면 False를 반환 (더 많은 설명이 필요하지만 간단한 설명)
- True 면 tmp변수에 tmp * 10 + int(i)로 연산을 해서 대입
- 바로 answer에 대입하지 않고 tmp에 이런 연산을 하는 이유는
- 123처럼 연속적으로 나오는 숫자는 하나의 숫자로 치기 때문
- tmp = 0이고 문자열에 1이 나오면 tmp = 0 * 10 + 1으로 tmp는 1이 된다.
- 다음 2가 나오면 tmp = 1 * 10 + 2로 12가 된다.
- 다음 3이 나오면 tmp = 12 * 10 + 3으로 123이 된다.
- 이렇게 연속적으로 나오면 1, 2, 3 각각의 숫자가 아닌 123이라는 숫자를 만들기 위함
- 그다음 문자가 숫자가 아니게 되면 else 조건에서 answer에 123을 더하고 tmp 초기화
- 연속적으로 나오지 않아도 tmp = 0 * 10 + i처럼 하나의 숫자만 tmp에 들어가고 else에서 answer에 더함
- False 면 answer에 tmp를 더하고 tmp를 0으로 초기화
- for 문 밖에서 answer += tmp를 마지막으로 또 하는 이유
- 현재 my_string = "aBc1f5jk123wq23"처럼 마지막에 숫자가 나오는 경우를 고려
- else 조건은 숫자로 된 문자 다음이 숫자가 아니면 answer에 대입하는 조건
- 마지막에 숫자가 나오면 else 조건에 안 맞기 때문에 answer에 23을 더하지 않음
- 이런 경우를 고려해 마지막 리턴 전 answer += tmp를 통해 23을 더해주고 리턴을 하기 위함
'프로그래머스' 카테고리의 다른 글
[프로그래머스] Lv.1 K번째 수 [Python, 파이썬] (0) | 2023.02.16 |
---|---|
[프로그래머스] Lv.0 소인수분해 [Python, 파이썬] (0) | 2022.12.29 |
[프로그래머스] Lv.0 공 던지기 [Python, 파이썬] (0) | 2022.12.27 |
[프로그래머스] Lv.0 가까운 수 [Python, 파이썬] (0) | 2022.12.22 |
[프로그래머스] Lv.0 옹알이 (1) [Python, 파이썬] (1) | 2022.12.22 |
Comments