(간단한 코드)리트코드 682. Baseball Game
이 문제는 숫자와 문자 그리고 기호가 섞여 있는 리스트를 통해 각 조건을 만족시키면서 점수를 계산 하는 것을 의미한다.
이 문제를 푸는 방법은 생각보다 간단하다.
그냥 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하는 코드를 넣으면 웬만하면 문제를 확인할 수 있다.