※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 4540번 문제인 Q이다.
문제는 아래 링크를 확인하자.
https://www.acmicpc.net/problem/4540
4540번: Q
첫째 줄에 테스트 케이스의 개수가 주어진다. 각 테스트 케이스의 첫째 줄에는 아이템의 수 m과 큐 연산의 수 n이 주어진다. (1 ≤ m, n ≤ 20) 둘째 줄에는 큐에 들어있는 아이템의 이름이 주어진다
www.acmicpc.net
주어진 문제가 요구하는 것은 다음과 같다.
(1) x to y 연산: 새로운 배열의 y번째 아이템은 기존 배열의 x번째 아이템이다
(2) 나머지 아이템은 기존 배열의 순서대로 앞에서부터 채워놓는다.
반복문을 이용해 위 내용을 구현하고 문제를 해결하자.
#include <iostream>
#include <string>
#include <cstring>
using namespace std;
string s[21];
string ans[21];
int visited[21];
void solve() {
int N, Q; cin >> N >> Q;
for (int i = 1; i <= N; i++) cin >> s[i], ans[i] = "";
memset(visited, 0, sizeof(visited));
for (int q = 0; q < Q; q++) {
int x, y; cin >> x >> y;
ans[y] = s[x];
visited[x] = 1;
}
int sidx = 1, aidx = 1;
for (int q = Q; q < N; q++) {
while (visited[sidx]) sidx++;
while (ans[aidx] != "") aidx++;
ans[aidx] = s[sidx];
aidx++, sidx++;
}
for (int i = 1; i <= N; i++) cout << ans[i] << ' ';
cout << '\n';
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
int T; cin >> T;
while (T--) solve();
}
728x90
'BOJ' 카테고리의 다른 글
[BOJ 27542 // C++] 絶対階差数列 (Sequence of Absolute Differences) (0) | 2023.02.25 |
---|---|
[BOJ 16915 // C++] 호텔 관리 (0) | 2023.02.24 |
[BOJ 27541 // C++] 末尾の文字 (Last Letter) (0) | 2023.02.24 |
[BOJ 2518 // C++] 회전 테이블 (0) | 2023.02.24 |
[BOJ 2528 // C++] 사다리 (0) | 2023.02.23 |