정화 코딩

[C++] 간판 (백준 5534번) 본문

PS

[C++] 간판 (백준 5534번)

jungh150c 2024. 10. 7. 14:15

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

 

#include <iostream>
#include <vector>
using namespace std;

int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);

    int n;
    cin >> n;
    string s;
    cin >> s;
    int ss = s.size();

    int ans = 0;
    for (int i = 0; i < n; i++) {
        string st;
        cin >> st;
        int sts = st.size();
        bool psb = false;
        for (int j = 0; j < sts; j++) {
            if (st[j] != s[0]) continue;
            int jmp = 1;
            int idx = 1;
            while (true) {
                if (st[j + idx * jmp] == s[idx]) {
                    idx++;
                    if (idx >= ss) {
                        psb = true;
                        break;
                    }
                } else {
                    jmp++;
                    idx = 1;
                    if (jmp >= sts) break;
                }
            }
            if (psb) break;
        }
        if (psb) ans++;
    }

    cout << ans << '\n';
}

처음에 제출했던 코드. 분명 다 맞는 것 같은데 왜 틀린건지 모르겠어서 좀 헤맸다. (WA)

 

#include <iostream>
#include <vector>
using namespace std;

int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);

    int n;
    cin >> n;
    string s;
    cin >> s;
    int ss = s.size();

    int ans = 0;
    for (int i = 0; i < n; i++) {
        string st;
        cin >> st;
        int sts = st.size();
        bool psb = false;
        for (int j = 0; j < sts; j++) {
            if (st[j] != s[0]) continue;
            int jmp = 1;
            int idx = 1;
            while (true) {
                if (j + idx * jmp < sts && st[j + idx * jmp] == s[idx]) { //수정
                    idx++;
                    if (idx >= ss) {
                        psb = true;
                        break;
                    }
                } else {
                    jmp++;
                    idx = 1;
                    if (jmp >= sts) break;
                }
            }
            if (psb) break;
        }
        if (psb) ans++;
    }

    cout << ans << '\n';
}

인덱스 확인해주는 부분을 추가하니 맞았다..! (AC) 왜 OutOfBound도 아니고 틀렸습니다가 뜬걸까? 암튼 결론은.. 인덱스 체크 잘 하자...

 

'PS' 카테고리의 다른 글

[C++] 스도쿠 (백준 2239번)  (0) 2024.10.14
[C++] 도시 분할 계획 (백준 1647번)  (0) 2024.10.07
[C++] 용액 (백준 2467번)  (1) 2024.09.19
[C++] 구슬 탈출 2 (백준 13460번)  (0) 2024.09.19
[C++] 이번학기 평점은 몇점?  (0) 2024.09.16
Comments