2023. 4. 3. 04:29ㆍ_Study/Baekjoon
프로그래머스 문제풀이 | python | ||
No. 숨어있는 숫자의 덧셈(2) |
#파이썬 #프로그래머스 #문제풀이 # 숨어있는 숫자의 덧셈(2)
https://school.programmers.co.kr/learn/courses/30/lessons/120864
이번 글에서는 python을 이용하여 문자열에서 숫자로 오고가는 방법에 중점을 둔다.
// 알고리즘
가장 중요한 목적이 무엇인지?
문자열을 슬라이싱하는 방법이다. 거기서 숫자에 해당하는 부분만 추출하고, 추출한 숫자를 다시 합쳐야한다.
왜 이런 방법을 선택했는지?
파이썬은 for i in word로 손쉽게 문자열을 쪼갤 수 있다. 이를 isdigit()함수를 이용해 숫자인 경우 따로 buffer을 만들어 모으고, join()함수를 사용하여 다시 합치면 숫자와 문자열의 변환을 간단하게 할 수 있는 파이썬의 특성을 살릴 수 있다.
// 계획하기
함수명 | 설명 | ||
1. | |||
2. | |||
3. |
함수는 따로 사용하지 않기로 했다.
// 구현하기
-> How?
어떻게 구현?
answer = 0
buffer = [] 리스트 생성
count =0 # 다음번이 숫자인지 확인하는 변수, count = 0 이면 문자가 지나갔다. 1 -> 0 의 경우 숫자가 지나갔다.
for i in my_string:
if(숫자라면):
count += 1
buffer에 숫자를 더한다. (그래야 숫자 순서가 알맞다)
else:
if(count 가 0이 아니라면 숫자가 buffer에 담겨져있다 이를 조합해야한다)
buffer을 join으로 다시 숫자로 바꾼뒤 더한다.
buffer을 다시 비운다.
count = 0 초기화
->Why?
왜 이런 방법을?
숫자인 경우, 숫자가 아닌 경우를 나누고, 버퍼를 이용해야하는데 숫자로 만들어 미리 더하는 경우 순서에 따라 문제가 발생했다. 예를 들어 34 인경우 첫 for 문에서 이 숫자가 3인지 30인지 300인지도 모르는채 계산을 해야하는 복잡함과, 3으로 계산하고 뒤에서 부터 40으로 계산되어 43이 더해지는 등 자잘한 오류가 발생해서. 차라리 배열로 만들어서 합쳐버리자는 생각을 했다.
// 수정하기
예전 코드는 테스트케이스 오류가 발생했었다. 이는 숫자로 끝나는 경우 반복문이 종료되어 buffer을 담지 못하여 발생하는 오류이다.
이를 깔끔하게 해결하는 방법으로 python의 특성을 활용하였다.
my_string이라는 문자열 뒤에 아무 문자열이나 붙이면 for 문을 한 번 더 돌면서 buffer값을 끝까지 넣게 된다.
// 완성코드
import math
def solution(my_string):
answer = 0
buffer = []
count = 0
my_string+='a' #아무 글자나 추가해서 늘리기
for i in my_string:
#다음번이 숫자인지 확인 해야한다.
if (i.isdigit()):
count += 1
buffer.append(i)
#buffer += int(i) * int(math.pow(10, count) // 10)
else:
if(count != 0):
buffer = "".join(buffer)
answer += int(buffer)
buffer = []
count = 0
return answer
'_Study > Baekjoon' 카테고리의 다른 글
[11659] 백준 구간 합 구하기 1 python (0) | 2023.04.25 |
---|---|
[11004] K번째 수 #파이썬 #백준 #퀵정렬 (0) | 2023.04.04 |
백준, 프로그래머스 자동 커밋, 자동 올리기, 동기화 잔디채우기, 빨간 체크 (2) | 2023.03.15 |
프로그래머스 파이썬 문자 반복 출력하기 (0) | 2023.02.24 |
프로그래머스 옷가게 할인 받기 13,14 case 오류 파이썬 (0) | 2023.02.24 |