[문제 위치]
https://www.acmicpc.net/problem/9626
[문제 풀이]
이 문제는 구현(체스 패턴+오버레이) 를 통해 해결하는 문제이다.
퍼즐의 바깥을 위 U, 왼 L, 오 R, 아래 D만큼 테두리로 확장하면 전체 격자 크기는 (M+U+D)×(N+L+R)이고, 테두리는 체스판 무늬로 #와 .을 번갈아 배치하면 된다. 퍼턴은 (행+열)의 합이 짝수면 #, 홀수면 .이므로 이 규칙으로 전체를 채운 뒤, 원래 퍼즐 문자를 (U,L)에서 시작해 격자 위에 그대로 덮어쓰기해서 출력하게 해결한다
아래는 이를 구현한 코드이다.
#include <bits/stdc++.h>
using namespace std;
#define FASTIO ios::sync_with_stdio(false); cin.tie(nullptr);
int main(){
FASTIO;
int M, N;
if(!(cin >> M >> N)) return 0;
int U, L, R, D;
cin >> U >> L >> R >> D;
int H = M + U + D;
int W = N + L + R;
vector<string> g(H, string(W, '.'));
// 체스판 패턴 채우기: (r+c) 짝수 => '#', 홀수 => '.'
for(int r = 0; r < H; ++r){
for(int c = 0; c < W; ++c){
g[r][c] = (( (r + c) & 1 ) ? '.' : '#');
}
}
// 원래 퍼즐을 (U, L) 위치부터 오버레이
for(int i = 0; i < M; ++i){
string s; cin >> s; // 길이 N
for(int j = 0; j < N; ++j){
g[U + i][L + j] = s[j];
}
}
for(int r = 0; r < H; ++r){
cout << g[r] << '\n';
}
return 0;
}'문제 풀이 > 문제 풀이(BOJ)' 카테고리의 다른 글
| [Silver V] (중략) - 21966 (0) | 2025.12.31 |
|---|---|
| [Silver V] Potato - 28464 (0) | 2025.12.31 |
| [Silver V] 또 수열 문제야 - 31229 (0) | 2025.12.29 |
| [Silver V] 부울 행렬의 곱 - 14492 (0) | 2025.12.23 |
| [Silver V] 미아 노트 - 20114 (0) | 2025.12.21 |