최대 1 분 소요

사용 언어: Python3

문제

백준 17389

스크린샷 2023-03-27 오후 5 14 43 스크린샷 2023-03-27 오후 5 15 00

코드

내 풀이

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)
  • 지금은 원래 길지 않은 코드라 별 차이 없어보이지만,
    더욱 복잡한 코드에서는 이렇게 최적화를 반복함으로써 코드를 줄일 수 있다!


💛 개인 공부 기록용 블로그입니다. 👻

맨 위로 이동하기