지우너

[코드트리] 씨 오 더블유 C++ 본문

Problem Solving

[코드트리] 씨 오 더블유 C++

지옹 2024. 8. 16. 12:45

문제

https://www.codetree.ai/missions/8/problems/c-o-w?&utm_source=clipboard&utm_medium=text

 

코드트리 | 코딩테스트 준비를 위한 알고리즘 정석

국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요.

www.codetree.ai

 

코드

#include <iostream>
#define MAXLEN 100000
using namespace std;

char str[MAXLEN];
long long lC[MAXLEN];// 왼쪽에서 부터 C의 개수
long long rW[MAXLEN];// 오른쪽에서부터 W의 개수

int main() {
    int n;
    cin >> n;
    for(int i=0; i<n; ++i){
        cin >> str[i];
    }

    // left C
    lC[0]=(str[0]=='C')? 1:0;
    for(int i=1; i<n; ++i){
        lC[i]=(str[i]=='C')? lC[i-1]+1:lC[i-1];
    }
    // right W
    rW[n-1]=(str[n-1]=='W')? 1:0;
    for(int i=n-2; i>=0; --i){
        rW[i]=(str[i]=='W')? rW[i+1]+1:rW[i+1];
    }

    // answer
    long long answer=0;
    for(int i=1; i<n-1; ++i){
        if(str[i]=='O'){
            answer+=lC[i-1]*rW[i+1];
        }
    }
    cout << answer <<'\n';
    return 0;
}