문제
동전처럼 생긴 돌의 양면은 각각 흰색과 검은색으로 되어있고, 게임의 규칙은 다음과 같다.
i번째 돌을 사이에 두고 마주보는 j개의 돌에 대해, 각각 같은 색이면 뒤집고, 다른 색이면 그대로 둔다.
주어진 돌을 벗어나는 경우 뒤집기는 중지된다.
입력
첫 줄에 게임의 개수 T, 다음 줄부터 게임별로 첫 줄에 N, M, 다음 줄에 N개 돌의 초기상태, 이후 M개의 줄에 걸쳐 i, j가 주어진다.
(1<=T<=50, 3<=N<=20, 1<=M<=10, 1<=i, j<=N)
출력
#과 게임번호, 빈칸에 이어 빈칸으로 구분된 돌의 상태를 출력한다.
내가 쓴 코드
T = int(input())
for t in range(T):
N, M = map(int, input().split())
stone = list(map(int, input().split()))
for m in range(M):
i, j = map(int, input().split())
i -= 1
for num in range(1, j + 1):
s, e = i - num, i + num
# 범위가 넘어가면 0 ~ N
if not(s >= 0 and e < N): break
# 같은 색이면 뒤집기
if stone[s] == stone[e]:
if stone[s] == 0:
stone[s] = 1
stone[e] = 1
else:
stone[s] = 0
stone[e] = 0
print(f'#{t+1}', end=' ')
print(*stone)
출력 결과
#1 1 1 1 1 0
#2 1 1 1 0 0
#3 1 0 0 0 0 0 1 0 1 0
728x90
반응형
'Algorithm > Python' 카테고리의 다른 글
| [BOJ #2628] 종이자르기 (0) | 2024.03.03 |
|---|---|
| [BOJ #11650] 좌표 정렬하기 (1) | 2024.02.29 |
| [SWEA #20396] 돌 뒤집기 게임 1 (2) | 2024.02.29 |
| [SWEA #11010] 배열2 - 대각 최대값 (1) | 2024.02.29 |
| [SWEA #11013] 배열1 - 3분할 (2) | 2024.02.29 |