본문 바로가기

문제 풀이/문제 풀이(BOJ)

[Silver V] 미아 노트 - 20114

[문제 위치]

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

[문제 풀이]

이 문제는 구현(블록 스캔) 를 통해 해결하는 문제이다.
각 문자는 높이 H, 너비 W의 블록으로 늘어나 있고 블록 내부 문자는 모두 동일하며 일부는 ‘?’로 지워졌다. 그러므로 각 블록을 훑어 ‘?’가 아닌 문자를 하나라도 찾으면 그 문자가 원래 문자이고, 전부 ‘?’이면 ‘?’을 출력하면 된다
아래는 이를 구현한 코드이다.

#include <bits/stdc++.h>
using namespace std;

#define FASTIO ios::sync_with_stdio(false); cin.tie(nullptr);

int main() {
    FASTIO;
    int N, H, W;
    if (!(cin >> N >> H >> W)) return 0;

    vector<string> g(H);
    for (int i = 0; i < H; ++i) cin >> g[i]; // 각 행 길이 = N*W

    string ans;
    ans.reserve(N);

    for (int i = 0; i < N; ++i) {
        char pick = '?';
        int start = i * W;
        bool found = false;
        for (int c = start; c < start + W && !found; ++c) {
            for (int r = 0; r < H; ++r) {
                if (g[r][c] != '?') {
                    pick = g[r][c];
                    found = true;
                    break;
                }
            }
        }
        ans.push_back(pick);
    }

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