Baekjoon/IM Level

[백준] 1244 스위치 켜고 끄기 (실버4)

hellosonic 2023. 3. 10. 19:57

문제요약

나의 코드 및 설명

  • def switching(a, b):
    a, b를 변수로 하는 메서드 생성. a = 1(남학생)일 경우 스위치의 범위 내에서 받은 수의 배수에 해당하는 스위치의 상태를 변경하도록 코드를 작성하였다. 
    a = 2(여학생)일 경우, 받은 수의 스위치 상태를 변경하고, 좌/우의 스위치 상태를 살펴서 상태가 같다면 스위치 상태를 변경하도록 코드를 작성하였다.
    스위치의 상태를 변경하기 위해 <현재 스위치의 상태 - 1> 의 절대값을 갖도록 코드를 작성하였다. 
    ex) <0 - 1> 의 절대값 = 1 / <1 - 1> 의 절대값 = 0
  • switch_zero : 스위치 번호와 인덱스 번호를 맞추기 위해 작성하였다.
  • switch, switch_status : switch에 스위치 상태를 리스트로 저장하고,  switch_zero와 switch를 더해줌으로써 인덱스 번호와 스위치 번호가 일치하도록 작성하였다.
  • switch_status.pop(0) : 인덱스 번호와 스위치 번호가 일치하도록 작성한 인덱스 0을 삭제한다.
def switching(a, b):
    #남학생
    if a == 1:
        for i in range(1, len(switch_status)):
            if i % b == 0:
                switch_status[i] = abs(switch_status[i] - 1)
            else:
                continue
    #여학생
    elif a == 2:
        switch_status[b] = abs(switch_status[b] - 1)
        j = 1
        while True:
            if b-j == 0 or b+j == len(switch_status):
                break
            else:
                if switch_status[b-j] == switch_status[b+j]:
                    switch_status[b-j] = abs(switch_status[b-j] - 1)
                    switch_status[b+j] = abs(switch_status[b+j] - 1)
                    j += 1
                else:
                    break

n = int(input())
switch_zero = [0]
switch = list(map(int, input().split()))
switch_status = switch_zero + switch

how_many_students = int(input())

for _ in range(how_many_students):
    sex, num = map(int, input().split())
    switching(sex, num)
switch_status.pop(0)

for i in range(len(switch_status)):
    if i != 0 and i % 20 == 0:
        print()
    print(switch_status[i],end =" ")
    if i == len(switch_status) - 1:
        print()

피드백

약 2주 반 전, 뜻대로 코드 작성이 되지 않아 헤맸었는데, 현재는 술술 작성하는데에 성공하였다. 열심히 한 만큼 실력이 향상했다고 느낄 수 있었고, 제대로 성장하고 있다는 확신을 갖게되는 좋은 계기가 되었다.