https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV14hwZqABsCFAYD
아이디어
- 1은 밑으로 내려가고, 2는 위로 올라온다.
- 교착상태인 자석 형태(1, 2가 붙은 상황)의 개수를 세야 한다.
- 현재 상태를 알려주는 flag라는 변수를 만든다.
- flag는 교착상태를 알려주는 변수로 사용되며 교착 자석의 수(출력 값)를 더해주는 정보를 준다.
- 열 우선 순회로 0, 2를 먼저 만나면 무시하고 1을 만나면 flag를 1로 변경한다. (초기 flag == 0)
- flag가 1인 상태로 2를 만나면 교착 자석이 하나 있다는 뜻으로 cnt에 1을 더해주고 flag는 2로 변경
- flag가 2인 상태로 0을 만나면 flag를 0으로 변경해준다.
- 추가 설명은 코드의 주석에 있으며 직접 노트에 적어보며 이해해보길 추천.
풀이
for tc in range(1, 11):
N = int(input())
magnetic = [list(map(int, input().split())) for _ in range(N)]
cnt = 0
for j in range(N):
flag = 0
for i in range(N):
if magnetic[i][j] == 1: # 열 우선 순회 하다가 1을 만나고
if flag == 0 or flag == 2: # flag가 0이나 2이면
flag = 1 # flag를 1로 바꿔줌
elif magnetic[i][j] == 2: # 그러고 2를 만나고
if flag == 1: # flag가 1이면
flag = 2 # flag를 2로 바꿔주고
cnt += 1 # cnt를 1증가, 교착 상태인 자석
else: # 요소가 0일 떄
if flag == 2: # flag가 2라면
flag = 0 # flag를 0으로 바꿔줌
print(f'#{tc}', cnt)
'SWEA' 카테고리의 다른 글
SWEA 5174 subtree (파이썬) (0) | 2022.09.13 |
---|---|
SWEA 1289 원재의 메모리 복구하기 (파이썬) (0) | 2022.08.28 |
SWEA 11315 오목 판정 (파이썬) (0) | 2022.08.25 |
SWEA 1224 계산기3 후위표기법 (파이썬) (0) | 2022.08.23 |
SWEA 1961 숫자 배열 회전 (파이썬) (0) | 2022.08.19 |