W.I.L 알고리즘..

won·2022년 10월 16일
0

하루에 2-3문제 정도 알고리즘을 공부하고 있다.
말이 두세개지 하나에 1시간이 걸릴지 10시간이 걸릴지 아무도 모른다.
물론 시간이 넉넉한 편이 아니라 몇시간 이상 붙들고 있지 않지만
괜히 오기가 생기는 문제가 꼭 하나씩 있다.

그 중에 하나가

숫자들이 공백으로 구분된 문자열이 주어집니다. 문자열에 있는 숫자를 차례대로 더하려고 합니다. 이 때 “Z”가 나오면 바로 전에 더했던 숫자를 뺀다는 뜻입니다. 숫자와 “Z”로 이루어진 문자열 s가 주어질 때, 머쓱이가 구한 값을 return 하도록 solution 함수를 완성해보세요.

바로 이 문제였다.
나는 이렇게 풀었다. 만약 s리스트의 i 가 문자열 'Z'라면
z 앞에 있는 s[i-1]의 값을 pop으로 제거한다.

def solution(s):
    s = s.split()
    new_list = []
    for i in range(len(s)):
        if s[i] == 'Z':
            new_list.pop(s[i-1])
        else:
            new_list.append(int(s[i]))

    return sum(new_list)

이렇게 풀었을때 정답률을 85% 였다.
왜일까 생각해보니 문자열 'Z'가 두번 연속으로 나올때도 생각해야 한다.
그래서 if문을 하나 더 사용하여 z가 나왔을때 그 앞에도 문자열 z면 continue를 하게 해주었는데도 정답률을 변하지 않았다.

진짜 왤까...하며 틈틈히 고민하다가 결국 답을 봤는데
조금 허무하달까...
내가 문제를 제대로 이해하지 못했던 것이었다.
z가 두 번 나오면 continue하고 넘어가는게 아니라 z가 두번이니까 앞의 숫자 두개를 없애라는 말이었다보다.

결국 이거였다...

for i in s:
 if s =='Z'
 	new_list.pop()
 else:
 	new_list.append(s)

^^ * 그런데 내가 또 몰랐던 것은 나는 pop()함수에 인자가 꼭 필요하다고 생각했는데 아니었다. pop() 이렇게 인자가 없으면 배열의 마지막 숫자를 없앤다고 한다.
이렇게 또 배웁니다...

profile
어찌저찌 굴러가는 개발자

0개의 댓글