본문 바로가기

코딩테스트/SWEA

[Python, 파이썬] SWEA 1220. [S/W 문제해결 기본] 5일차 - Magnetic

 

 

정사각형 테이블이 주어질 때, 강한 자기장을 걸은 후

자성체들이 서로 충돌하여 테이블 위에 남아있는 교착 상태의 개수를 구하는 문제!

 

 

자성체들은 성질에 따라 색이 부여되는데, 푸른 자성체의 경우 N극에 이끌리는 성질을 가지고 있고, 붉은 자성체의 경우 S극에 이끌리는 성질이 있다. 테이블에서 일정 간격을 두고 강한 자기장을 걸면 빨간색 자성체들은 S극으로, 파란색 자성체들은 N극으로 움직이다 서로 충돌해 교착 상태에 빠진다.

 

이때 교착상태는 빨간색 자성체와 파란색 자성체가 정면으로 충돌한 경우를 1개로 친다.

그래서 D는 1개로 판단, F와 E는 각각 2개다.

 

자기장을 걸었을 때, 교착 상태의 개수는 얼마일까?

 

def deadlock(table):

    num = 0 # 교착 상태 세는 프로그램
    L = 100 # 테이블 길이
    S = False # S극을 발견했을 때 세팅

    for j in range(L): 
        for i in range(L): 
            if(table[i][j]==1): # N극이면
                S = True # S극 체크 시작!

            if(table[i][j]==2 and S): # S극이면
                num += 1 # 교착 상태 +1
                S = False

        S = False # S극 세팅 종료

    return num
            

T = 10 # 테스트케이스 수 10개

for test_case in range(1, T+1):

    length = int(input()) # 테이블의 개수
    table = [] # magenetic 테이블 저장

    # magenetic 테이블 입력받기
    for i in range(length): #
        table.append(list(map(int, input().split())))

    answer = deadlock(table)
            
    print("#%d %d" %(test_case, answer))    
 

 

 

 

[문제풀이]


 

이 문제는 간단히 말해서, N극 자성체와 S극 자성체를 세면 되는 문제다.

if(table[i][j]==1): # N극이면
    S = True # S극 체크 시작!
 

테이블의 위에 N극이, 아래에 S극이 있기 때문에 행이 아니라 열을 돌면서 세야 한다.

이때 N극을 발견하면 S극이 있나 확인하기 위해 S값에 True를 세팅한다.

 

 
사진 삭제

사진 설명을 입력하세요.

왜 N극이냐면 S극은 N극 자성체에 이끌려 사라져버리기 때문!

그러니 교착상태가 발생하려면 우선 N극 자성체부터 발견해야 한다!

 

if(table[i][j]==2 and S): # S극이면
     num += 1 # 교착 상태 +1
     S = False
 

그 후 S극을 발견시 교착 상태가 발생한 것이므로 1개를 세고 다시 False로 세팅해주면 끝.