※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 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

+ Recent posts