<백준> 1244

진기명기·2025년 9월 19일

코딩테스트<C++>

목록 보기
148/212

스위치 켜고 끄기

문제

입력
첫째 줄에는 스위치 개수가 주어진다. 스위치 개수는 100 이하인 양의 정수이다. 둘째 줄에는 각 스위치의 상태가 주어진다. 켜져 있으면 1, 꺼져있으면 0이라고 표시하고 사이에 빈칸이 하나씩 있다. 셋째 줄에는 학생수가 주어진다. 학생수는 100 이하인 양의 정수이다. 넷째 줄부터 마지막 줄까지 한 줄에 한 학생의 성별, 학생이 받은 수가 주어진다. 남학생은 1로, 여학생은 2로 표시하고, 학생이 받은 수는 스위치 개수 이하인 양의 정수이다. 학생의 성별과 받은 수 사이에 빈칸이 하나씩 있다.

출력
스위치의 상태를 1번 스위치에서 시작하여 마지막 스위치까지 한 줄에 20개씩 출력한다. 예를 들어 21번 스위치가 있다면 이 스위치의 상태는 둘째 줄 맨 앞에 출력한다. 켜진 스위치는 1, 꺼진 스위치는 0으로 표시하고, 스위치 상태 사이에 빈칸을 하나씩 둔다.

int main() {
	ios::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	int n;
	cin >> n;

	vector<int> v(n+1);

	for (int i = 1; i < n+1; i++)
	{
		cin >> v[i];
	}

	int k;
	cin >> k;

	while (k--)
	{
		int sex, number;
		cin >> sex >> number;

		for (int i = 1; i < n + 1; i++)
		{
			if (sex == 1)
			{
				if (i % number == 0)
				{
					if (v[i] == 1)
						v[i] = 0;
					else
						v[i] = 1;
				}
			}
			else
			{
				if (i == number)
				{
					int left = i - 1;
					int right = i + 1;

					while (left >= 1 && right <= n && v[left] == v[right])
					{
						left--;
						right++;
					}
					for (int j = left + 1; j < right; j++)
						v[j] = 1 - v[j];
				}
			}
		}
	}

	for (int i = 1; i <= n; i++) {
		cout << v[i] << " ";
		if (i % 20 == 0) cout << "\n";
	}
}

0개의 댓글