티스토리 뷰

코딩테스트/백준

백준-1244(파이썬)

김쓰로그 2022. 9. 30. 14:56

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

 

1244번: 스위치 켜고 끄기

첫째 줄에는 스위치 개수가 주어진다. 스위치 개수는 100 이하인 양의 정수이다. 둘째 줄에는 각 스위치의 상태가 주어진다. 켜져 있으면 1, 꺼져있으면 0이라고 표시하고 사이에 빈칸이 하나씩

www.acmicpc.net

문제생각

제한시간도 충분하고 입력받는 수나 리스트의 크기가 그렇게 크지 않아서 간단한 구현 문제라고 생각하였습니다.

(정답비율이 19프로라서 문제 풀기 전에 겁먹었습니다...ㅎ)

 

남학생의 경우에는 단순히 반복문을 돌려 배수를 찾아 이를 바꿔주기만하면 끝납니다.

여학생의 경우에는 좌우대칭을 확인해야하는데 저는 투 포인터 방식을 사용하여 확인하고 바꿔주었습니다.

 

여기서 투 포인터 방식이란 두개의 포인터를 두고 각 포인터의 위치를 변경하며 해당인덱스의 값을 확인하는 방법입니다.

검색해보시면 더욱 자세하게 알 수 있습니다..ㅎㅎ

 

문제코드

switchNum=int(input())
status=list(map(int, input().split())) #0:OFF, 1:ON
studNum=int(input())
student=[list(map(int, input().split())) for _ in range(studNum)] #남:1, 여:2

dic={0:1, 1:0} #바꾸기 위한 dictionary
for s in student:
    if s[0]==1:
        for i in range(switchNum):
            if (i+1)%s[1]==0:
                status[i]=dic[status[i]]
    elif s[0]==2:
        status[s[1]-1]=dic[status[s[1]-1]]
        p1, p2=s[1]-2, s[1]
        
        while p1>=0 and p2<switchNum:
            if status[p1]==status[p2] and p1!=p2:
                status[p1]=dic[status[p1]]
                status[p2]=dic[status[p2]]
            else:
                break
            p1-=1
            p2+=1

print(status[0], end=' ')
for i in range(1, switchNum):
    if i%20==0:
        print()
    print(status[i], end=' ')

"아직 실력이 부족하여 문제 해결에 있어 코드가 매끄럽지 못한 점 양해부탁드립니다..ㅎ"

 

'코딩테스트 > 백준' 카테고리의 다른 글

백준-11660(파이썬)  (0) 2022.10.02
백준-11659(파이썬)  (1) 2022.09.30
백준-19637(파이썬)  (0) 2022.09.30
백준-2108(파이썬)  (0) 2022.08.29
백준-7568(파이썬)  (0) 2022.08.29
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함