룰루코딩

SWEA D3 1220. [S/W 문제해결 기본] 5일차 - Magnetic 본문

SWEA

SWEA D3 1220. [S/W 문제해결 기본] 5일차 - Magnetic

rulru01 2024. 11. 15. 22:06

문제

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV14hwZqABsCFAYD

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com


솔루션

for t in range(1, 11):
    N = int(input())
    lst = []
    for _ in range(N):
        lst.append(list(map(int, input().split())))

    ans = 0

    for j in range(N):
        state = 0
        for i in range(N):
            if lst[i][j] == 1:
                state = 1
            elif lst[i][j] == 2 and state == 1:
                ans += 1
                state = 0

    print(f"#{t} {ans}")

깨달은 점

어렵게 생각했는데 열로 순회하도록 바꾼 후에 state를 저장하여 1과2가 만났을때 교착상태 개수를 세어주면 되는 문제였다.

ans = 0  # 교착 상태의 개수를 저장할 변수
for j in range(T):  # 열(세로) 순회
    state = 0  # 상태를 초기화 (N극에서 시작)
    for i in range(T):  # 행(가로) 순회
        if lst[i][j] == 1:  # N극(1)을 만난 경우
            state = 1
        elif lst[i][j] == 2 and state == 1:  # S극(2)을 만난 경우
            ans += 1  # 교착 상태 발생
            state = 0  # 상태 초기화