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

 

이번에 볼 문제는 백준 24377번 문제인 ИГРА이다.

문제는 아래 링크를 확인하자.

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

 

24377번: ИГРА

Габи и Боби често обичат да играят в някои от по-скучните им часове в училище. Предпочитаната от тях игра е четири кутийки. В нея са дадени че

www.acmicpc.net

문제의 상황을 우리말로 서술하면 다음과 같다.

BOJ 24377: 네 상자 게임

문제)
Gabby와 Bobby는 지루한 학교 수업시간동안에 노는 것을 좋아한다. 이들은 특히 네 상자 게임을 자주 하는데, 이 게임은 네 개의 상자에 1부터 4까지의 자연수를 채워넣는 놀이이다. 처음에는 1번, 2번, 3번, 4번으로 이루어진 총 네 개의 빈 상자로 게임을 시작한다. 두 사람은 차례를 번갈아가며 빈 상자 하나를 고르고, 그 상자를 지금까지 사용되지 않은 수로 채워넣는다.
네 상자 게임의 몇 차례가 지난 뒤, Gabby와 Bobby는 이 게임을 자신들 대신 진행해 줄 수 있는 프로그램을 만들 수 있다는 것을 생각해냈다. Gabby와 Bobby를 위해 네 상자 게임의 남은 차례를 출력하는 프로그램을 작성해보자.

입력)
입력은 한 줄로 이루어져 있다.
첫째줄에 0 이상 4 이하의 값을 갖는 네 개의 정수가 공백을 사이에 두고 주어진다.
이 네 개의 숫자는 진행중인 네 상자 게임의 각각 1번, 2번, 3번, 4번 상자에 채워진 숫자를 나타낸다. 단, 0의 경우 해당 상자에 아직 수가 채워지지 않았음을 나타낸다.
0이 아닌 다른 수는 중복되어 주어지지 않으며, 적어도 둘 이상의 상자는 비어있지 않다.

출력)
두 개의 정수를 공백으로 구분하여 한 줄에 출력한다.
입력으로 빈 상자가 정확히 하나 주어졌다면, 비어있는 상자의 번호와 그 상자에 채워넣어야 하는 수를 순서대로 출력한다.
입력으로 빈 상자가 정확히 둘 주어졌다면, 그 두 상자에 채워넣어야 하는 수를 작은 수부터 순서대로 출력한다.
입력으로 빈 상자가 주어지지 않았다면, 1번 상자와 2번 상자에 채워진 수를 순서대로 출력한다.

문제에서 요구하는 대로 구현해주자.

 

빈 상자의 개수와 사용된 숫자가 무엇인지를 잘 관리하는 것으로 문제를 간단히 해결할 수 있다.

 

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

#include <iostream>
using namespace std;

int arr[5];
int visited[5];

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

	int cnt = 0;
	for (int i = 1; i < 5; i++) {
		int x; cin >> x;
		arr[i] = x;
		if (x == 0) cnt++;
		else visited[x]++;
	}

	if (cnt == 0) {
		cout << arr[1] << ' ' << arr[2];
		return 0;
	}
	
	if (cnt == 1) {
		for (int i = 1; i < 5; i++) {
			if (arr[i] == 0) cout << i << ' ';
		}
	}
	for (int i = 1; i < 5; i++) {
		if (visited[i] == 0) cout << i << ' ';
	}
}
728x90

'BOJ' 카테고리의 다른 글

[BOJ 1448 // C++] 삼각형 만들기  (0) 2022.02.12
[BOJ 24379 // C++] КИФЛИЧКИ  (0) 2022.02.11
[BOJ 24378 // C++] КАСТИНГ  (0) 2022.02.11
[BOJ 6443 // C++] 애너그램  (0) 2022.02.10
[BOJ 1947 // C++] 선물 전달  (0) 2022.02.09

+ Recent posts