백준 2506번: 점수계산

최창효·2022년 1월 2일
0
post-thumbnail

문제 설명

0과1이 나열된 문자열에서 1이 나오면 1점, 1이 연속해서 나오면 추가로 계속 점수를 얻는 문제입니다.
문제를 보고 다음의 두 방법이 떠올랐습니다.

  • 1이 연속으로 나올 때마다 즉시 점수를 반영합니다
  • 0이 나온 순간 뒤를 돌아 1이 몇 개 나왔는지 돌아봅니다.
    • 마지막이 1로 끝나는 경우에 점수를 합산해 줄 필요가 있습니다
    • 1이 연속해서 x개 나왔다면 총 n*(n+1)/2의 점수가 추가됩니다

정답

num = int(input())
lst = list(map(int,input().split(' ')))

point = 0 #1이 나오면 포인트가 쌓이고 0이 나오면 해당 포인트를 점수로 변환하게 만들었습니다. 
score = 0
for i in range(num):
    if lst[i] == 0: #0의 값이 나오면
        score += point*(point+1)//2 #지금까지 나온 1을 다 청산합니다.
        point = 0 #포인트를 0으로 초기화 해 줍니다.
    else:
        point +=1 #1의 값이 나오면 포인트를 1 추가합니다.
        if i == num-1: #마지막 순간까지 0이 안나오면 임의로 점수에 추가시켜 줍니다.
            score += point*(point+1)//2
        
print(score)          

느낀점

원하는대로 푼 게 아니여서 마음에 들지 않고, 특히 score += point*(point+1)//2를 두 번 사용한 게 너무 마음에 들지 않았다.
투포인터 구현을 복습하고 와야 겠다는 생각이 들었다.

profile
기록하고 정리하는 걸 좋아하는 개발자.

0개의 댓글