[백준] 1244. 스위치 켜고 끄기 (Python)

yuuforest·2023년 7월 13일

구현

목록 보기
4/9
post-thumbnail

백준 문제 풀이 - 구현

📰 문제


문제 확인 🏃


💡 입출력 예제


8
0 1 0 1 0 0 0 1
2
1 3
2 3

>> 1 0 0 0 1 1 0 1
8
0 1 0 1 0 0 0 1
2
1 8
2 7

>> 0 1 0 1 0 1 1 1

💬 풀이


🎵 첫번째 풀이

# 스위치 개수
switch_count = int(input())                         
# 각 스위치의 상태 (1 켜져있음 0 꺼져있음)
switch_state = list(map(int, input().split()))
switch_state.insert(0, 0)  
# 학생 수   
student_count = int(input())                     
# 학생의 성별, 학생이 받은 수
student_switch = [list(map(int, input().split())) for _ in range(student_count)]

for gender, number in student_switch:
    
    if gender == 1:     # 남학생
        number_up = number
        while number_up < len(switch_state):
            switch_state[number_up] = 1 if switch_state[number_up] == 0 else 0
            number_up += number

    else:               # 여학생
        switch_state[number] = 1 if switch_state[number] == 0 else 0
        left = number - 1
        right = number + 1 
        while left > 0 and right < switch_count+1 and switch_state[left] == switch_state[right]:
            switch_state[left] = 1 if switch_state[left] == 0 else 0
            switch_state[right] = 1 if switch_state[right] == 0 else 0
            left -= 1
            right += 1

for num in range(1, len(switch_state)):
    print(switch_state[num], end = " ")
    if num % 20 == 0:print()

🎵 두번째 풀이

switch_count = int(input())                         # 스위치 개수                 
switch_state = list(map(int, input().split()))      # 각 스위치의 상태 (1 켜져있음 0 꺼져있음)
switch_state.insert(0, 0)    
student_count = int(input())                        # 학생 수                      

for student in range(student_count):
    gender, number = map(int, input().split())      # 입력받으면서 스위치 변경
    s = 1

    if gender == 1:     # 남학생
        while number * s < len(switch_state):
            switch_state[number * s] = abs(switch_state[number * s] - 1)
            s += 1

    else:               # 여학생
        switch_state[number] = abs(switch_state[number] - 1)
        while number - s > 0 and number + s < switch_count+1 and switch_state[number - s] == switch_state[number + s]:
            switch_state[number - s] = abs(switch_state[number - s] - 1)
            switch_state[number + s] = abs(switch_state[number + s] - 1)
            s += 1

for num in range(1, len(switch_state)):
    print(switch_state[num], end = " ")
    if num % 20 == 0:print()

🎵 세번째 풀이

변수를 짧게 써보기

sc = int(input())                                # 스위치 개수                 
state = [0] + list(map(int, input().split()))    # 각 스위치의 상태 (1 켜져있음 0 꺼져있음)   
student = int(input())                           # 학생 수                      

for num in range(student):
    ge, sw = map(int, input().split())      # 입력받으면서 스위치 변경
    s = 1

    if ge == 1:         # 남학생
        while sw * s < sc + 1:
            state[sw * s] = abs(state[sw * s] - 1)
            s += 1

    else:               # 여학생
        state[sw] = abs(state[sw] - 1)
        while sw - s > 0 and sw + s < sc + 1 and state[sw - s] == state[sw + s]:
            state[sw - s] = abs(state[sw - s] - 1)
            state[sw + s] = abs(state[sw + s] - 1)
            s += 1

for num in range(1, sc+1):
    print(state[num], end = " ")
    if num % 20 == 0:print()


✒️ 생각


확실히 변수를 짧게 쓰면 코드가 더 깔끔하게 느껴지기도 하고, 변수 이름을 정할때 시간을 덜 쓰기도 하네 음. 좋아

profile
🐥 Backend Developer 🐥

0개의 댓글