문제
소스코드
#include<iostream>
#include<string>
#include<algorithm>
#include<string_view>
constexpr int MAX_N = 10001;
std::string_view RIGHT_ANSWER = "O";
std::string_view WRONG_ANWER = "X";
int main() {
int bonus_score{};
int total_score{};
int N{};
std::string S;
std::cin >> N;
std::cin >> S;
for (int i = 0; i < S.size(); ++i)
S[i] = std::toupper(S[i]);
for (int i = 0; i < N; ++i) {
if (S[i] == *(RIGHT_ANSWER.data())) {
total_score += (i + 1) + bonus_score++;
}
else
bonus_score = 0;
}
std::cout << total_score << "\n";
}
후기
이 문제를 풀기 위해서는 두 가지의 문제를 해결해야 한다.
1. 소문자와 대문자를 구별해야 한다.
소문자 o와 대문자 O를 구별하기 위해 std::toupper() 메서드를 사용하였다.
2. 해당 String에 들어있는 값을 읽어서 점수를 매겨야 한다.
*std::string_view 자료구조를 사용해서 인덱스를 하나씩 검사해서 O(대문자 O)이면 점수를 더하게 하였다.
정답 비율에 알 수 있듯이 그렇게 어려운 문제는 아니다. 정말 문제 이름 그대로 보너스 느낌의 문제이다.
std::string_view에 적응하기 위해 사용할 수 있을 거 같은 문제이면 사용해서 쓰고 있다. 최신 표준의 자료구조를 배우고 그걸 쓰기 위한 노력도 중요하다고 생각한다.
* std::string_view는 C++17 표준 자료구조 이기 때문에 해당 코드는 C++17 이상을 지원하는 컴파일러에만 작동합니다.
출처 및 레퍼런스
문제 링크:https://www.acmicpc.net/problem/17389
'온라인 코딩 > 기타(Other)' 카테고리의 다른 글
[백준] 16165번 걸그룹 마스터 준석이 (0) | 2020.03.22 |
---|---|
[백준] 17224번 APC는 왜 서브태스크 대회가 되었을까? (0) | 2020.03.19 |
[구름 IDE] 비타알고 시즌2 시공의 폭풍 속으로 (★1) (0) | 2020.03.11 |
[백준] 10818번 최소,최대 (0) | 2020.03.03 |
[백준] 15979번 행복 (0) | 2020.01.17 |