코딩테스트/SW Expert Academy / / 2024. 10. 18. 09:37

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

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

 

✏️ 문제 풀이

- 테이블 상단이 N극이고 하단이 S극이기 때문에 교착상태의 형태는

N극 (1)

S극 (2)

→ 이런 형태를 띄고 있는 자석들의 갯수가 교착상태의 갯수

- 한 열에서 스택에 N극(1)이 들어 있는 상태에서 S극(2)가 들어오면 무조건 교착상태가 됨

 

- 100개의 행을 입력받아 2차원 리스트로 저장한 후 각 열(col)을 순회하며, 각 열의 100개의 행(row) 확인

 

- 스택에 N극만 저장하고, 위치가 S극일 경우 pop

- stack.pop(): 스택의 가장 위에 있는 요소를 제거하고 그 값 반환 → N극(1)

- 반환값이 항상 1이므로, cnt는 S극과  N극이 만난 횟수를 세게 됨 

for tc in range(1, 11):
    table = int(input())
    magnetic = [list(map(int, input().split())) for _ in range(100)]
    cnt = 0

	# 열 순회
    for col in range(table):
        stack = [] # N극을 저장하는 스택 
        for row in range(table):
            if not stack and magnetic[row][col] == 1: #스택이 비어있고 N극(1)인 경우
                stack.append(1)
            elif stack and magnetic[row][col] == 2: #스택에 1이 들어있고 S극(2)인 경우
                cnt += stack.pop()

    print(f"#{tc} {cnt}")

 

  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유