본문 바로가기

백준

백준9517 - 아이 러브 크로아티아

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

 

9517번: 아이 러브 크로아티아

문제 "I love Croatia"는 네델란드의 인기 티비 프로그램 "I love my country"의 포맷 라이센스를 수입해 만든 크로아티아의 티비쇼이다. 이 티비쇼에서 가장 인기있는 게임은 "Happy Birthday"이며, 이 게임에 대한 문제를 풀게 된다. 플레이어 8명이 오른쪽 그림과 같이 원을 이루어서 앉아있다. 한 사람은 게임이 시작한지 3분 30초가 지나면 터지는 폭탄을 들고 있다. 폭탄을 들고있는 사람에게 질문을 하면서 게임은 시작된다.

www.acmicpc.net

푸는 걸 미루다가 오랜만에 구현 문제를 풀고 싶어서 손을 댄 문제다. 주의할 점은 모든 입력이 끝난 뒤에 결과를 출력해야 된다는 것이다. 그리고 8번 사람의 왼쪽은 1번이기 때문에 8번이 정답을 맞춘 경우 반드시 1번으로 초기화 해주어야 한다. 질문을 기준으로 반복문을 돌렸고 문제를 풀어낸 시간이 누적시간 210초를 넘었다면 그 사람 앞에서 폭탄이 터진다.

 

ex1.)

5

6

70 T

50 P

30 N

50 T

30 P

80 T

 

70 -> 5통과
120 -> 6불통
150 -> 6불통
200 -> 6통과
230 -> 7통과지만 시간 오버로 터짐

 

ex2.)

7
5
70 P
50 P
30 T
90 T
10 N

70 -> 7불통
120 -> 7불통
150 -> 7통과
240 -> 8통과지만 시간 오버로 터짐

 

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

vector<pair<int,char>> v; //v의 인자로 문제 푼 시간과 문제를 푼 결과를 담는다.
int n; //처음 폭탄을 들고 있는 사람
int q; //질문의 수
int time; //시간
int all = 0; //모든 시간
int k = 0; //입력한 정보를 순회하는 변수
char res; //정답을 맞추거나 패스한 정보

int main() {
	cin >> n; //폭탄 들고 있는 사람 입력

	//주어진 문제의 갯수를 입력하고, 문제를 푼 시간과 문제를 푼 결과를 입력한다.
	cin >> q; 
	for (int i = 0; i < q; i++) {
		cin >> time >> res;
		v.push_back(make_pair(time, res));
	}

	//210초를 넘어가기 전까지 반복문을 돌려서 폭탄을 넘긴다.
	while (1) {
		all = all + v[k].first; //문제푼 시간을 계속 누적한다.
		if (all >= 210) { //210초가 넘어가면
			break; //반복문 종료
		}
		if (n == 8) { //8번 사람이면 
			if (v[k].second == 'T') { //문제를 맞춘 경우
				n = 1; //1번 사람한테 폭탄을 넘긴다.
			}
		}
		else { //나머지 번호 사람들은
			if (v[k].second == 'T') { //문제를 맞춘 경우
				n = n + 1; //나보다 +1이 된 사람에게 폭탄을 넘긴다.
			}
		}
		k++; //k를 증가시켜 다음 문제 결과로 넘어간다.
	}

	cout << n;
}