uju's Tech

[Baekjoon] 보너스 점수 : 17389 본문

Baekjoon

[Baekjoon] 보너스 점수 : 17389

ujusy 2020. 7. 18. 15:40

<본 포스팅은공부목적으로 작성되었습니다. 혹시 틀린 부분이 있거나 문제가 되는 부분이 있다면 답글 달아주세요!>

보너스 점수 : 17389


문제

숭고한 알고리즘 캠프 퀴즈 타임이 시작되었다! PS 기초, 동적 계획법, 파라메트릭 서치, 욱제의 생일, 탐색, 그리디, 최단경로 알고리즘, 구데기컵, 서로소 집합, 최소 신장 트리, 최소 공통 조상, 세그먼트 트리, 코드포스에서 C++로 높은 수준의 난수를 생성하는 방법, 최대 유량, 볼록 껍질, 스타트링크 사무실에 있는 게임용 컴퓨터의 RAM의 총 용량 등등 수많은 주제를 총망라하고 있는 이 미니 대회는 수많은 참가자들의 도전으로 오늘도 빛나고 있고, 제출된 OX표의 개수는 셀 수 없을 정도이다.

운영진들은 이 OX표들을 채점하고, 점수를 계산해낸 다음, 시상식을 진행하며 화기애애하게 행사를 마무리해야 한다. 숭고한 알고리즘 캠프 퀴즈 타임에서 OX표의 점수는 다음과 같이 계산된다.

  • OX표에 N개의 문제들이 있을 때, 1번 문제, 2번 문제, ..., N번 문제 순으로 채점된다.
  • 문제는 뒤로 갈수록 어려워지기 때문에, i번 문제의 기본 점수는i점이다.
    • 문제를 맞히면 그 문제의 기본 점수(즉 i 번 문제의 경우 i 점)를 획득하며, 틀리면 얻지 못한다.
  • 기본 점수와 별개로, '보너스 점수'라는 값이 존재한다. 이는 처음에는 0점이다.
    • 문제를 맞히면 그 때의 '보너스 점수'를 획득하고, '보너스 점수'의 값이 1점 증가한다.
    • 문제를 틀리면 '보너스 점수'를 얻지 못하고, '보너스 점수'의 값이 0점으로 초기화된다.

민성이는 얼떨결에 숭고한 알고리즘 캠프 퀴즈 타임의 OX표를 채점해야 하는 업무를 맡게 되었다. 수많은 OX표를 볼 생각에 머리가 지끈거리는 민성이는 프로그램을 세워 이를 자동화하려고 한다. 시상식까지 4시간밖에 남지 않은 민성이를 도와 점수를 계산해주자.

입력

첫 번째 줄에 OX표의 길이인 자연수 N이 주어진다. (1 ≤ N ≤ 10,000)

두 번째 줄에 OX표를 의미하는 문자열 S가 주어진다. SO(알파벳 대문자 O, ASCII 코드 79)와

X

(알파벳 대문자 X, ASCII 코드 88)로만 구성되어 있으며, 길이는 N이다.

문자열 Si 번째 글자가  O이면 해당 참가자가 i 번째 문제를 맞혔음을 의미하고,

X

이면 틀렸음을 의미한다.

출력

첫 번째 줄에 입력으로 들어온 OX표의 점수를 출력한다.

Think

X와O가 문자열로 주어지고 문제에서 해당 아스키 코드 까지 알려준다.

Ord 내장함수를 이용해 문자를 해당하는 아스키 코드로 변환하여 반환해준다. 이를 이용해서 score 변수에 bonus 함수와 해당 인덱스 를 누적시켜 더해주면 될 것 같다. 아주 간단한 문제이다. ㅎㅎ

Code

import sys

N = int(sys.stdin.readline())
S = list(sys.stdin.readline()[:-1])
score = 0
bonus = 0
for i in range(len(S)):
    if ord(S[i]) == 79:
        score = score + i + bonus + 1
        bonus += 1
    else:
        bonus = 0
print(score)

'Baekjoon' 카테고리의 다른 글

[Baekjoon] 기타줄 : 1049  (0) 2020.07.29
[Baekjoon] 수 찾기: 1920  (0) 2020.07.18
[Baekjoon] The candy war : 9037  (0) 2020.07.18
[Baekjoon]맥주 99명 : 17293  (0) 2020.07.18
[Baekjoon] 수빈이와 수열 : 10539  (0) 2020.07.18
Comments