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

 

이번에 볼 문제는 백준 25194번 문제인 결전의 금요일이다.
문제는 아래 링크를 확인하자.

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

 

25194번: 결전의 금요일

곰곰이는 올해도 운동하기를 신년 목표로 삼았지만, 지금까지 헬스장을 한 번도 가지 않았다. 운동하라고 잔소리하는 당신에게, 곰곰이는 금요일에 정확히 일을 끝마치는 시점이 있다면 헬스

www.acmicpc.net

i번째까지의 일들로 만들 수 있는 "일을 끝마치는 요일"의 집합을 알고 있을 때, 여기에 i+1번째 일을 추가해 만들 수 있는 "일을 끝마치는 요일"의 집합은 i번째까지의 요일들로 얻을 수 있는 요일과 그 요일들에 i+1번째 일을 추가로 진행해 나올 수 있는 요일들의 집합이 된다.

 

위의 과정을 이용해 N번째까지의 일들로 만들 수 있는 요일들을 구하고, 그 요일중 금요일이 있는지를 구해 문제를 해결하자.

 

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

#include <iostream>
#include <set>
#include <algorithm>
using namespace std;

set<int> cur, nxt;

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

	cur.insert(0);
	int N; cin >> N;
	while (N--) {
		int x; cin >> x;
		for (auto n : cur) {
			nxt.insert(n);
			nxt.insert((n + x) % 7);
		}
		cur.clear();
		swap(cur, nxt);
	}

	if (cur.find(4) == cur.end()) cout << "NO";
	else cout << "YES";
}
728x90

+ Recent posts