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

 

이번에 볼 문제는 백준 14670번 문제인 병약한 영정이다.
문제는 아래 링크를 확인하자.

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

 

14670번: 병약한 영정

프로그램의 입력은 표준 입력으로 받는다. 입력의 첫 줄에는 약의 종류의 개수 N이 입력된다. (1 ≤ N ≤ 100) 그 다음 N개의 줄에는 각각 약의 효능과 약의 이름이 숫자로 주어진다. (0 ≤ Me, Mn ≤ 10

www.acmicpc.net

 

약의 효능(정수)에 대응되는 약의 번호(정수)를 저장한 배열을 만들어 문제를 해결하자. 약의 효능과 번호는 0 이상 100 이하의 정수로 나타내므로 이와 같은 배열을 만드는 것은 항상 가능하다.

 

주어지는 모든 증상에 대응되는 약이 있을 때만 출력해야 하므로, 글쓴이는 각 증상에 대응되는 약의 번호를 저장하는 벡터 및 모든 증상에 대응되는 약이 있는지를 확인하기 위한 변수를 활용해 문제를 해결했다.

 

약의 효능과 번호의 값이 각각 0이 될 수 있다는 점에 유의하자. 특히 배열의 값이 0으로 초기화되어 있다면 약의 번호가 0인 상황과 대응되는 약이 없는 상황을 구분할 수 없어 문제를 해결할 수 없을 것이다.

 

아래는 제출한 소스코드이다.

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

int N, Q;
int A[101];
vector<int> ans;

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

	memset(A, 0xff, sizeof(A));

	cin >> N;
	while (N--) {
		int x, y; cin >> x >> y;
		A[x] = y;
	}
	cin >> N;
	while (N--) {
		bool chk = 1;
		ans.clear();
		cin >> Q;
		while (Q--) {
			int x; cin >> x;
			if (A[x] < 0) chk = 0;
			else ans.emplace_back(A[x]);
		}
		if (chk) {
			for (auto &x : ans) cout << x << ' ';
			cout << '\n';
		}
		else cout << "YOU DIED\n";
	}
}
728x90

'BOJ' 카테고리의 다른 글

[BOJ 26267 // C++] 은?행 털!자 1  (0) 2024.03.06
[BOJ 20157 // C++] 화살을 쏘자!  (1) 2024.03.05
[BOJ 16506 // C++] CPU  (0) 2024.03.03
[BOJ 26424 // C++] Coloring Game  (0) 2024.03.02
[BOJ 29812 // C++] 아니 이게 왜 안 돼  (0) 2024.03.01

+ Recent posts