리트코드 알고리즘/리트코드 easy

(간단한 코드)리트코드 682. Baseball Game

문학적 딥러닝 2024. 12. 18. 04:34

 

이 문제는 숫자와 문자 그리고 기호가 섞여 있는 리스트를 통해 각 조건을 만족시키면서 점수를 계산 하는 것을 의미한다.

 

이 문제를 푸는 방법은 생각보다 간단하다.

 

그냥 if문을 주구장창 쓰면 된다.

class Solution:
    def calPoints(self, operations: List[str]) -> int:
        score = []
        for lead in operations:
            if lead == '+':
                score.append(score[-2]+score[-1])
            elif lead == 'C':
                score.pop()
            elif lead == 'D':
                score.append(score[-1]*2)
            else:
                score.append(int(lead))
        return sum(score)

 

쌩초짜 였던 시절 아마 누군가의 답을 배꼈던 코드였을 것이다.

 

여기서 사람들이 오해할 수 있는 것 중에 하나가, if문을 많이 쓰면 코드가 길어지는(지저분해지는) 것은 맞지만

 

그렇다고 시간이 엄청 오래 걸리는 느린 코드가 된다는 것은 아니다.

 

코드를 보기 편하게 짜도록 노력해야 하는 것은 맞지만, 그렇다고 모든 코드를 보기 좋게 짤 수 있는 것은 아니다.

 

나중에 답을 보지 않고 혼자 짠 코드는 저것 보다 더 보기 안 좋았다.

class Solution:
    def calPoints(self, operations: List[str]) -> int:
        ans = []
        for op in operations:
            if op.isalpha():
                if op == 'D':
                    ans.append(ans[-1]*2)
                else:
                    ans.pop()
            elif op == '+':
                ans.append(ans[-2]+ans[-1])
            else:
                ans.append(int(op))
        return sum(ans)

 

if문 안에 또 if문이 섞여 있다. 이유는 "if문이 처리하는 조건의 순서"에서 발생했다.

 

나는 우선 "숫자"를 해결하려고 했다.

근데 웃긴 것은 '-2'는 숫자라고 인식을 안한다

그러다보니 계속 결과가 이상하게 나왔다.

 

들어본적이 있듯이 파이썬은 한줄 한줄 실행하는 언어여서, if문과 elif의 순서에 따라 결과가 충분히 달라질 수 있다.

그래서 맨 처음에 배꼈던 타인의 코드에서는 숫자를 제일 마지막 if문(여기서는 else)에 넣은 것이다.

class Solution:
    def calPoints(self, operations: List[str]) -> int:
        score = []
        for lead in operations:
            if lead == '+':
                score.append(score[-2]+score[-1])
            elif lead == 'C':
                score.pop()
            elif lead == 'D':
                score.append(score[-1]*2)
            else: # -> 여기가 리스트 안에서 기호와 알파벳을 제외한 나머지 부분을 처리하는 곳
                score.append(int(lead))
        return sum(score)

 

어디서 문제가 발생하는지 알기 위해서는 print를 하는게 정말로 중요하다(이 말은 나도 처음에 많이 들었지만, 이를 스스로 하게 끔 되기에는 적지 않은 시간이 필요했다). 

class Solution:
    def calPoints(self, operations: List[str]) -> int:
        ans = [] # 우리가 저장하고 최종적으로 사용하고자 하는 리스트
        for op in operations:
            print(ans) #for문을 사용할 때는 여기다가 print를 찍으면 된다.
            if op.isalpha():
                if op == 'D':
                    ans.append(ans[-1]*2)
                else:
                    ans.pop()
            elif op == '+':
                ans.append(ans[-2]+ans[-1])
            else:
                ans.append(int(op))
        return sum(ans)

 

이런식으로 print를 찍는다. 이유는 for문은 결국 코드를 반복하기 때문에, 초반에 print하는 코드를 넣으면 웬만하면 문제를 확인할 수 있다.