๐Ÿงฉ Problem Solving/[๋ฐฑ์ค€]

[๋ฐฑ์ค€] 1244 ์Šค์œ„์น˜ ์ผœ๊ณ  ๋„๊ธฐ (python ํŒŒ์ด์ฌ)

์ œ๋ด‰์•„ 2025. 1. 26. 21:17

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


์ƒ๊ฐ๋ณด๋‹ค ์˜ค๋ž˜ ๊ฑธ๋ฆฐ ๋ฌธ์ œ. ํŒฐ๋ฆฐ๋“œ๋กฌ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒŒ ์•ฝํ•œ ๊ฑฐ ๊ฐ™๋‹ค.

๊ทธ๋ฆฌ๊ณ  ํŠน์ดํ•˜๊ฒŒ ์ •๋‹ต์„ ์ˆซ์ž 20๊ฐœ์”ฉ ๋Š์–ด์„œ ์ถœ๋ ฅํ•ด์•ผ ํ•œ๋‹ค. ๋•๋ถ„์— ์‹ค์ˆ˜๋ฅผ ๋งŽ์ด ํ–ˆ๋‹ค.


์•„์ด๋””์–ด

- ์ผ๋‹จ ๋ฐฐ์—ด์˜ ์‹œ์ž‘์€ 0์ด๊ณ  ์Šค์œ„์น˜ ๋ฒˆํ˜ธ๋Š” 1๋ถ€ํ„ฐ ์‹œ์ž‘์ด๋‹ˆ๊นŒ, ์ธ๋ฑ์Šค๋ฅผ ๋จผ์ € ๋งžํ˜€์ฃผ์ž.

๊ฐ„๋‹จํ•˜๊ฒŒ ๋ฐฐ์—ด ๋งจ ์•ž์— -1 ๊ฐ™์€ ๋”๋ฏธ ๊ฐ’์„ ์ถ”๊ฐ€ํ•ด ์คฌ๋‹ค.

 

- ๋™์ผํ•œ ๊ธฐ๋Šฅ์„ ํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ์ค‘๋ณต๋˜์–ด ์‚ฌ์šฉ๋˜๋ฏ€๋กœ, ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด ์‚ฌ์šฉํ–ˆ๋‹ค. ์ฒ˜์Œ ๋ฌธ์ œ ํ’€ ๋•Œ๋Š” ๊ทธ๋ƒฅ ํ’€๊ธด ํ–ˆ๋‹ค.


์ „์ฒด ์ฝ”๋“œ

import sys

N = int(input())
switchs = [-1] + [int(x) for x in sys.stdin.readline().rstrip().split()]
students = int(input())

def click(x):
    if switchs[x] == 1:
        switchs[x] = 0
    else:
        switchs[x] = 1

for _ in range(students):
    commands = [int(x) for x in sys.stdin.readline().rstrip().split()]
    gender, num = commands[0], commands[1]

    if gender == 1: # ๋‚จ์ž๋ฉด
        for i in range(num, N + 1, num):
            click(i)
    else:
        click(num)
        for k in range(N // 2):
            if num + k > N or num - k < 1:
                break
            if switchs[num + k] == switchs[num - k]:
                click(num - k)
                click(num + k)
            else:
                break

sliced_lists = [switchs[i:i+20] for i in range(1, len(switchs), 20)]

for s in sliced_lists:
    print(" ".join(map(str, s)))

์ฝ”๋“œ ์„ค๋ช…

for _ in range(students):
    commands = [int(x) for x in sys.stdin.readline().rstrip().split()]
    gender, num = commands[0], commands[1]

    if gender == 1: # ๋‚จ์ž๋ฉด
        for i in range(num, N + 1, num):
            click(i)
    else:
        click(num)
        for k in range(N // 2):
            if num + k > N or num - k < 1:
                break
            if switchs[num + k] == switchs[num - k]:
                click(num - k)
                click(num + k)
            else:
                break

 

์„ฑ๋ณ„์ด ๋‚จ์ž๋ฉด ๊ฐ„๋‹จํ•˜๋‹ค. for๋ฌธ ์Šคํ…์„ numํฌ๊ธฐ๋งŒํผ ์ฃผ๋ฉด ๋œ๋‹ค.

์—ฌ์ž๋ฉด ์ผ๋‹จ ์„ ํƒ๋œ ์Šค์œ„์น˜ ๊ฑด๋“ค๊ณ , ์ขŒ์šฐ๊ฐ€ ๋™์ผํ•œ์ง€ ํ™•์ธํ•˜๋ฉฐ ๋ฒ”์œ„๋ฅผ ๋Š˜๋ ค์ฃผ๋ฉด ๋œ๋‹ค. 

 

sliced_lists = [switchs[i:i+20] for i in range(1, len(switchs), 20)]

for s in sliced_lists:
    print(" ".join(map(str, s)))

 

์ถœ๋ ฅ์€ for๋ฌธ์˜ ์Šคํ…์„ ์‘์šฉํ•ด ๋ดค๋‹ค.