[BOJ] 17389 - 보너스 점수
사용 언어: Python3
문제
코드
내 풀이
N = int(input())
S = list(input())
score = 0
bonus = 0
# 점수 = 기본 점수 + 보너스 점수
for i in range(N):
if S[i]=='O':
score += (i+1) # 기본점수 (1번부터 시작)
score += bonus # 보너스 점수
bonus += 1
else:
bonus = 0
print(score)
다른 풀이
N, S = input(), input() # N과 S 모두 문자열(string)!
score, bonus = 0, 0
for i, x in enumerate(S): # 인덱스와 값 반환
if x == 'O':
score += (i+1)
score += bonus
bonus += 1
else:
bonus = 0
print(score)
# print("{}점".format(score)) # format 연습
enumerate
를 활용할 수 있다.- 문제에서
1 <= N <= 10000
으로 주어졌으니, 시간복잡도는O(N)
이고, 길어봤자 10000번 계산하겠구나..!
최적화
N, S = input(), input()
score, bonus = 0, 0
for i, x in enumerate(S): # 인덱스와 값 반환
if x == 'O':
score, bonus = score + i + 1 + bonus, bonus + 1 # ✅
else:
bonus = 0
print(score)
- 지금은 원래 길지 않은 코드라 별 차이 없어보이지만,
더욱 복잡한 코드에서는 이렇게 최적화를 반복함으로써 코드를 줄일 수 있다!
💛 개인 공부 기록용 블로그입니다. 👻