문제풀이(Problem Solving)

백준, BOJ, 2684번 C++ [CPP]

게임이 더 좋아 2021. 5. 31. 00:59
반응형
728x170

역시나 그렇게 어렵지 않은 문제다.

 

 

https://www.acmicpc.net/problem/2684

 


 

다만 문자열 계산할 때

내가 짚고 넘어가야 할 부분이 있었다.

 

#맞는 풀이

#include<iostream>
#include<algorithm>

using namespace std;

int n;

string target[8] = { "TTT","TTH","THT","THH","HTT","HTH","HHT","HHH" };
int num[8];

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
    cin >> n;
    while (n--) {
        
        string test;
        cin >> test;
        for (int i = 0; i < 38; i++) {
            string s;
            s = s + test[i] + test[i+1] + test[i+2]; // 중요
            for (int j = 0; j < 8; j++) {
                if (target[j] == s) {
                    num[j]++;
                }
            }
        }

        for (int i = 0; i < 8; i++) {
            cout << num[i] << " ";
        }
        cout << "\n";

        fill(num, num + 8, 0);
    }
}

 

저기 중요부분 써놓은데 있다.

 

1) s = s + test[i] + test[i+1] + test[i+2];

2)  s = test[i] + test[i+1] + test[i+2];

 

1과 2 결과가 같을까?

 

우선 의도한 대로 작동하려면 1번처럼 써야 한다.

또는 append를 쓰거나.

 

2번의 작동 메커니즘은 어떻냐?

바로 아스키코드로 바꿔서 계산한 뒤 s에 아스키코드가 가리키는 문자를 할당한다.

즉, 정수계산이 되어버린다는 말이다.

 

유념하고 문자열 계산하자.

 

 

728x90
반응형
그리드형