[Python] SW Expert Academy #1220 Magnetic

이재원·2024년 4월 1일

Samsung SW Expert Academy

목록 보기
12/34

📚문제: #1220 Magnetic(D3)

전체 코드

# 1220. Magnetic

# 큐를 활용
from collections import deque

# 교착상태를 계산하는 함수
def Magnetic(c, tb):
    
    # 반시계 90도 회전 테이블
    tb_cal = [[0] * 100 for _ in range(100)]
    
    # 테이블을 반시계 방향으로 90도 돌린다.
    for m in range(100):
        
        for n in range(100):
            
            tb_cal[99-n][m] = tb[m][n]
    
    # 교착상태 개수
    cnt = 0
    
    # 100개의 줄에 대해서 계산
    for i in range(100):
        
        # 큐
        q = deque()
        
        for j in range(100):
            
            if tb_cal[i][j] == 1 or tb_cal[i][j] == 2:
                
                q.append(tb_cal[i][j])
        
        # N극, S극 변수 초기화
        mag_n = 0
        
        # 큐가 빌 때까지 반복 (Main Algorithm)
        while q:
            
            # 큐에서 뽑는다.
            cur = q.popleft()
            
            # 1 : N극 성질 자성체
            if cur == 1:
                
                # 누적
                mag_n += 1
     
            # 2 : S극 성질 자성체
            elif cur == 2:
                
                # 교착상태 개수 증가
                if mag_n > 0:
                    
                    mag_n = 0

                    cnt += 1
    
    # 답안 출력
    print("#{} {}".format(c, cnt))             
                    
                    
# 10개의 테스트 케이스가 주어진다.
for t in range(1, 10+1):
    
    # 정사각형 테이블의 한 변의 길이가 주어진다.
    N = int(input())
    
    # 테이블 초기화
    table = []
    
    # 100 × 100 크기의 테이블의 초기 모습
    for _ in range(100):
        
        table.append(list(map(int, input().split())))
    
    # 함수 실행
    Magnetic(t, table)

아이디어

2차원 리스트 90º 회전, Queue 또는 Stack 개념 적용

0개의 댓글