From 66e9cc1b835a9b363dc94571905f93be03f77ace Mon Sep 17 00:00:00 2001 From: nkey Date: Mon, 26 Jan 2026 13:28:19 +0900 Subject: [PATCH] =?UTF-8?q?1244-s4=20=EC=84=B1=EA=B3=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- workbook_8708/1244-s4.py | 64 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 workbook_8708/1244-s4.py diff --git a/workbook_8708/1244-s4.py b/workbook_8708/1244-s4.py new file mode 100644 index 0000000..cd00c88 --- /dev/null +++ b/workbook_8708/1244-s4.py @@ -0,0 +1,64 @@ +# 스위치 켜고 끄기 + +import sys + +input = sys.stdin.readline + +def work_mode1(s, s_state, s_num): + mul = 1 + idx = s_num * mul + while idx <= s: + s_state[idx] = 1 - s_state[idx] + mul += 1 + idx = s_num * mul + return + +def work_mode2(s, s_state, s_num): + gap = 1 + s_state[s_num] = 1 - s_state[s_num] + while s_num + gap <= s and s_num - gap >= 1: + if s_state[s_num + gap] != s_state[s_num - gap]: + break + s_state[s_num + gap] = 1 - s_state[s_num + gap] + s_state[s_num - gap] = 1 - s_state[s_num - gap] + gap += 1 + return + +WORK = { + 1: work_mode1, + 2: work_mode2 +} + +def solution(): + s = int(input().rstrip()) + s_state = [-1] + list(map(int, input().rstrip().split())) + n = int(input().rstrip()) + + for _ in range(n): + mode, s_num = map(int, input().rstrip().split()) + now_work = WORK[mode] + now_work(s, s_state, s_num) + + s_state = s_state[1:] + + for i in range(s//20+1): + start, end = i*20, (i*20)+20 + print(*s_state[start:end]) + + return + + +solution() + + +""" +걸린 시간: 16분 + +시간 복잡도: 남자, 여자 둘 다 한 턴에 스위치 전체 길이인 s에 대해 O(s)이므로 전체 시간 복잡도는 학생 수가 n일 때, O(s*n) 이다. + +해설: 남자(mode1), 여자(mode2)로 작업을 나눠서 배수는 1,2,3 올라가면서 시작 버튼에 곱해주고, 옆으로 확인은 gap을 +1 해주면서 +확인한다. while 반복문의 기본 규칙은 1과 s 사이의 범위이고, mode2에서 추가 escape는 보고 있는 두 스위치의 상태가 다를 때이다. +메인 함수에서는 mode에 맞게 work 함수를 할당 받은 후 작업을 진행하고, 20단위로 끊어서 출력한다. +추가로 worker 클래스를 만들어서 상속 받아서 하면 좀 더 안전한 코드가 될 것 같다. + +""" \ No newline at end of file