[BOJ][Python]스위치 켜고 끄기

MEIN_FIGUR·2021년 7월 20일
0

백준_문제풀이

목록 보기
3/21


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

📌풀이


내가 쓴 풀이(성공)

switch_count = int(input())
switch = list(map(int, input().split()))
number_of_people = int(input())

for case in range(number_of_people):
    gender, switch_num = map(int,input().split())
    #남학생인 경우
    if gender == 1:
        for idx in range(switch_count) :
            if (idx+1) % switch_num == 0 :
                switch[idx] = 0 if switch[idx] else 1
    #여학생인 경우
    else :
        idx = 1
        while True:
            #인덱스가 왼쪽 끝에 도달한 경우
            if (switch_num - 1 - idx) < 0 :
                idx -= 1
                break
            #인덱스가 오른쪽 끝에 도달한 경우
            elif (switch_num - 1 + idx) == switch_count:
                idx -= 1
                break  
            #양쪽 값이 다른 경우
            elif switch[switch_num - 1 - idx] != switch[switch_num - 1 + idx] :
                idx -= 1
                break
            idx += 1
            
        #해당하는 범위의 모든 값을 변경시켜줌    
        for num in range((switch_num - 1 - idx) , (switch_num + idx)) :
            switch[num] = 0 if switch[num] else 1
            
#스위치의 개수가 20개를 넘는 경우와 아닌 경우를 분리            
if switch_count > 20:            
    for i in range(switch_count//20):
        print(' '.join(list(map(str,switch[20*i : 20*i + 20]))))
    print(' '.join(list(map(str,switch[20*i + 20:]))))
#스위치의 개수가 20개를 넘지 않는 경우
else :
    print(' '.join(list(map(str,switch))))
  • 남학생인 경우, 여학생인 경우를 분리하여 생각
  • 남학생인 경우, 인덱스 + 1 이 스위치 넘버와 같을 때 값을 변경
  • 여학생인 경우, 양쪽 값이 같아지지 않는 곳 까지의 인덱스 값을 먼저 확인
    • 이후 for문을 활용해 한번에 값을 바꿔줌
  • 스위치의 개수가 20개를 넘는 경우와 아닌 경우를 분리하여 print

📌후기


elsewhile문 쪽을 보완가능할 것 같다!

not을 활용하면 조건 표현식보다 더 간단하게 표현할 수 있을 것 같다!

profile
Growing Developer

0개의 댓글