일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 취뽀
- 싸피
- 비전공자
- 개발자
- 삼성
- 13기
- 프리코스
- 백준 2003
- 코테
- 파이썬
- 코딩테스트
- 삼성 부트캠프
- 코딩
- 우테코 프리코스
- SWEA
- 싸피 13기
- 부트캠프
- 마이스터고
- 우테코
- 디자인패턴
- 우테코 7기
- 정보처리기사
- SSAFY
- UML
- 정처기
- 삼성 청년 sw아카데미
- dfs
- 백준
- 삼성청년SW아카데미
- 삼성 청년 SW 아카데미
Archives
- Today
- Total
룰루코딩
백준 1244 스위치 켜고 끄기 본문
문제
솔루션
N = int(input())
switch = list(map(int,input().split()))
M = int(input())
for _ in range(M):
gender,num = map(int,input().split())
num -= 1
if gender ==1:
for i in range(N):
if (i+1) %(num+1)==0:
switch[i]= 1 if switch[i]==0 else 0
elif gender == 2:
switch[num] = 1 if switch[num] == 0 else 0
i = 1
while num - i >= 0 and num + i < N and switch[num - i] == switch[num + i]:
switch[num - i] = 1 if switch[num - i] == 0 else 0
switch[num + i] = 1 if switch[num + i] == 0 else 0
i += 1
for i in range(N):
print(switch[i], end=' ')
if (i + 1) % 20 == 0:
print()
깨달은 점
구현문제인데 이해는 가는데 지문이 길었다.
다른부분은 다 괜찮았는데 여자부분하고 헷갈리는 부분이 좀 있었다.
elif gender == 2:
for i in range(0,N//2):
if switch[num+i]!=switch[num-i]:
upto = i
break
for i in range(0,upto):
switch[num]= 1 if switch[num]==0 else 0
switch[num+i]= 1 if switch[num+i]==0 else 0
switch[num-i]= 1 if switch[num-i]==0 else 0
여자 부분에서 처음엔 범위를 저장해서 if문을 돌려 푸려고 했지만 인덱스에러가 발생했다.
elif gender == 2:
switch[num] = 1 if switch[num] == 0 else 0
i = 1
while num - i >= 0 and num + i < N and switch[num - i] == switch[num + i]:
switch[num - i] = 1 if switch[num - i] == 0 else 0
switch[num + i] = 1 if switch[num + i] == 0 else 0
i += 1
while문을 이용하면 되는 일이였다.
그리고 주의할 점으로는 인덱스부분.
num -= 1
처음에는 빼먹고 넣지못한 부분인데 입력받은 숫자에서 -1을 해줘야 인덱스와 같아지기 때문에 꼭 필요하다.
if (i+1) %(num+1)==0:
그리고 남자 배수찾는 부분에서도 둘다 +1을 해주고 계산 해야한다.
또 주의할 점으로 출력형식이 잘못돼서 오류가 났었다.
for i in range(N):
print(switch[i], end=' ')
if (i + 1) % 20 == 0:
print()
스위치의 상태를 1번 스위치에서 시작하여 마지막 스위치까지 한 줄에 20개씩 출력한다. 이부분을 주의해야한다.
한 줄에 20개씩 출력하도록하는 코드이다.
그리고 나는 파이썬 삼항연산자를 이용해 스위치 토글을 바꾸었는데 다른 풀이를 찾아보니 스위치바꾸는 함수를 만들어서 많이 푼 것 같다.
def change(num):
if switch[num] == 0:
switch[num] = 1
else:
switch[num] = 0
return
이런식으로..
def change(num):
if switch[num] == 0:
switch[num] = 1
else:
switch[num] = 0
N = int(input())
switch = list(map(int, input().split()))
M = int(input())
for _ in range(M):
gender, num = map(int, input().split())
num -= 1
if gender == 1:
for i in range(num, N, num + 1):
change(i)
elif gender == 2:
change(num)
i = 1
while num - i >= 0 and num + i < N and switch[num - i] == switch[num + i]:
change(num - i)
change(num + i)
i += 1
for i in range(N):
print(switch[i], end=' ')
if (i + 1) % 20 == 0:
print()
'백준' 카테고리의 다른 글
백준 11286 절댓값 힙 (1) | 2024.11.10 |
---|---|
백준 16435 스네이크버드 (0) | 2024.11.10 |
백준 2563 색종이 (0) | 2024.11.10 |
백준 3040 백설 공주와 일곱 난쟁이 (1) | 2024.11.10 |
백준 2178 미로 탐색 (0) | 2024.11.09 |