BOJ - 1244

주의·2024년 1월 19일
0

boj

목록 보기
102/214

백준 문제 링크
스위치 켜고 끄기

❓접근법

  1. 성별이 남자인 경우는 range(현재스위치-1, N, 현재스위치)를 통해
    값을 다 바꿔주면 된다.
  2. 성별이 여자인 경우는 [현재 스위치-i, 현재 스위치+i]가 범위 안에 있을 때
    i를 계속 늘려가며 두 값이 같다면 값을 바꿔주는 식으로 진행했다.
  3. 마지막으로 문제에서 말한
    '스위치의 상태를 1번 스위치에서 시작하여 마지막 스위치까지 한 줄에 20개씩 출력한다. 예를 들어 21번 스위치가 있다면 이 스위치의 상태는 둘째 줄 맨 앞에 출력한다. 켜진 스위치는 1, 꺼진 스위치는 0으로 표시하고, 스위치 상태 사이에 빈칸을 하나씩 둔다.'라는 조건에 맞춰 출력했다.

👌🏻코드

import sys
N = int(sys.stdin.readline())
x = list(map(int, sys.stdin.readline().split()))
student = int(sys.stdin.readline())

for _ in range(student):
    a, b = map(int, sys.stdin.readline().split())
    now = b
    
    if a == 1:
        for i in range(now-1, N, now):
            if x[i] == 1:
                x[i] = 0
            else:
                x[i] = 1
                                
    else:
        i = 0
        while (now-i-1 >= 0 and now+i-1 < N):
            if x[now-i-1] == x[now+i-1]:
                if x[now-i-1] == 1:
                    x[now-i-1] = 0
                    x[now+i-1] = 0
                else:
                    x[now-i-1] = 1
                    x[now+i-1] = 1
                    
                i += 1
                
            else:
                break
                
                
count = 0
for i in x:
    if(count % 20 == 0 and count != 0):
        print()
    print(int(i), end=" ")
    count += 1

❌ 틀린 코드

N = int(input())

x = list(map(int, input().split()))

student = int(input())

for _ in range(student):
    a, b = map(int, input().split())
    
    if a % 2 != 0: # 남자인 경우
        for i in range(1, N+1):
            if i % b == 0:
                idx = i-1
            
                if x[idx] == 0:
                    x[idx] = 1
                else:
                    x[idx] = 0
                
                
    else: # 여자인 경우
        
        if b < N:
    
            for i in range(1,N):
                center = b-1
                if x[center] == 0:
                    x[center] = 1

                else:
                    x[center] = 0

                if center-i >= 0 and center+i <= len(x):


                    if x[center-i] == x[center+i]:
                        if x[center-i] == 0:
                            x[center-i] = 1
                        else:
                            x[center-i] = 0


                        if x[center+i] == 0:
                            x[center+i] = 1
                        else:
                            x[center+i] = 0

                    else:
                        break

count = 0
for switch in x:
    if(count % 20 == 0 and count != 0):
        print()
    print(int(switch), end=" ")
    count += 1

처음엔 이 코드로 제출했는데, 시간 초과가 나서 실패했다 ㅠㅠ

0개의 댓글