본문 바로가기

Algorithm/SWEA

[SWEA] D3. Magnetic

https://swexpertacademy.com/main/code/problem/problemDetail.do?problemLevel=3&contestProbId=AV14hwZqABsCFAYD&categoryId=AV14hwZqABsCFAYD&categoryType=CODE&problemTitle=&orderBy=INQUERY_COUNT&selectCodeLang=PYTHON&select-1=3&pageSize=10&pageIndex=1 

 

SW Expert Academy

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

swexpertacademy.com

 

 

1. 해결방법

그래프 문제이긴 하다만 dy, dx처럼 그래프 이동 배열을 정해주지 않고 레드, 블루에 위치한 인덱스만 탐색해서 카운트 하면 된다.

간단한 문제인데 생각을 못했던걸 보면 컨디션 이슈인듯;;

레드는 아래, 블루는 위로 이동하기 때문에 2중 for문에서 레드를 먼저 탐색하고 stack에 append해야한다. 
블루는 stack에 레드가 있다면 pop을 진행한다.

주의해야될 점은 레드가 append할 때에는 stack에 아무 데이터도 없어야 한다. 그 이유는 레드가 2개든 3개든 블루만 있다면 교착상태가 발생하고 카운트는 1만 증가하기 떄문이다.

반면 블루는 stack이 없다면 pop을 할 수가 없다. 그렇기에 분기문으로 stack이 있어야 한다는 조건을 걸어야 한다.

 

 

2. 정답코드

T = 10
# 여러개의 테스트 케이스가 주어지므로, 각각을 처리합니다.
for test_case in range(1, T + 1):
    N = int(input())
    maps = [list(map(int, input().split())) for _ in range(N)]

    answer = 0
    for j in range(N):
        stack = []
        for i in range(N):
            if maps[i][j] == 1:
                if not stack:
                    stack.append(1)
            elif maps[i][j] == 2:
                if stack:
                    stack.pop()
                    answer += 1
    print(f"#{test_case} {answer}")

'Algorithm > SWEA' 카테고리의 다른 글

[SWEA] D3. 상호의 배틀필드  (1) 2022.11.14
[SWEA] D3. 회문2  (0) 2022.11.11
[SWEA] D3. N-Queen  (0) 2022.11.11
[SWEA] D3. 최대 상금  (0) 2022.11.08
[SWEA] D2. 달팽이 숫자  (0) 2022.11.04