티스토리 뷰
🚀접근하기
문제 설명이 길어서 읽고 이해하는데 시간이 좀 걸렸던 문제. 그러나 그냥 설명해주는대로 조건을 나눠 작성해주면 되는 문제였다.
🎉코드
import sys
n=int(sys.stdin.readline())
switch = list(map(int , sys.stdin.readline().split(" ")))
stu = int(sys.stdin.readline())
for i in range(stu):
n1, n2 = map(int,sys.stdin.readline().split(" "))
if n1 == 1:
for i in range(n2, n+1, n2):
switch[i-1] = switch[i-1]^1
elif n1 == 2:
cnt = 1
while True:
m1 = n2 - cnt
m2 = n2 + cnt
if m1 > 0 and m2 <= n:
if switch[m1-1] == switch[m2-1]:
cnt+=1
continue
else:
break
else:
break
for i in range(m1+1, m2):
switch[i-1] = switch[i-1]^1
cnt = 0
for i in range(len(switch)):
print(switch[i], end=' ')
cnt += 1
if cnt == 20:
print()
cnt = 0
배열이 0부터 시작하고 스위치는 1부터 시작하니까 생각보다 코드 작성하는데 너무 헷갈렸다 ㅋㅋ ㅠㅠ
남자, 여자 별로 조건을 나눠서 코드를 작성해주었는데, 여자 학생 부분이 조금 까다로웠다.
cnt = 1로 설정해두고 조건에 맞는 경우(첫번째 if문에 만족하며, 두번째 if문 (좌우가 대칭인 경우)에도 만족하는 경우)엔 cnt를 1씩 증가해주었다. 아닌 경우에는 break로 무한 반복문을 빠져나오게 했다.
그런데 여기서 while문 처음에 cnt 값에 따라 m1, m2를 설정해두고 조건을 만족하는지 확인하기 때문에 조건이 맞지 않아도 m1, m2는 업데이트된다. 이 점을 방지하기 위해 그 다음 for문에서 m1+1, m2 이렇게 범위를 설정해주어 다시 그 전 (cnt를 통해 m1,m2를 업데이트 하기 전)으로 되돌려준 다음에 반복문을 돌려주게 작성하였다.
마지막 부분에 한줄에 20개씩 출력하는 것도 처음이라 조금 어려웠는데, 여기서도 cnt (위의 cnt와는 다른 cnt)를 0으로 설정해준 다음 20이 되면 한줄씩 띄고, 다시 cnt를 0으로 초기화.. 이렇게 반복해서 20개씩 출력하게 해주었다.
💪다짐
if 문이 있으면 후에 꼭! 작성해 주어야 할 else 문이 있는지 확인해주는 것을 잊지 않기로 다짐하였다.
'알고리즘' 카테고리의 다른 글
백준 파이썬 2579 계단 오르기 (0) | 2023.09.19 |
---|---|
백준 파이썬 10798 세로 읽기 (0) | 2023.09.12 |
백준 파이썬 1748 수 이어쓰기1 (0) | 2023.09.12 |
백준 파이썬 10811 바구니 뒤집기 (1) | 2023.09.07 |
백준 파이썬 2004 조합 0의 개수 (0) | 2023.08.15 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- DP
- SQLD
- 백준 파이썬
- 커뮤니티
- 북마크
- 스프링부트
- EnumType.ORDINAL
- elasticsearch
- 지연로딩
- 스프링
- SQL
- 로그아웃
- 다이나믹 프로그래밍
- 자바
- SQL 레벨업
- 스프링 커뮤니티
- 파이썬
- 스프링 북마크
- 회원탈퇴
- 인텔리제이
- 비영속
- 웹MVC
- 백준
- JPA
- 웹 MVC
- 영속
- 자바 스프링
- 준영속
- 로깅
- 프론트엔드
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
31 |
글 보관함