[SW Expert Academy] 1220 . Magnetic

sun1·2023년 3월 4일
0

im_test

목록 보기
14/22
post-thumbnail

문제

SWEA 1220 . Magnetic
https://swexpertacademy.com/main/talk/solvingClub/problemView.do?solveclubId=AYWpDVe6hEgDFAVt&contestProbId=AV14hwZqABsCFAYD&probBoxId=AYWpDVfKhEkDFAVt+&type=PROBLEM&problemBoxTitle=%EA%B8%B0%EC%B4%88%EC%97%B0%EC%8A%B5%EB%AC%B8%EC%A0%9C&problemBoxCnt=10

풀이

조건

  • 10개의 테스트 케이스가 주어지며 각 테스트 케이스의 정사각형 테이블의 한 변의 길이가 항상 100으로 주어진다.
  • 그 다음 줄부터 100 x 100크기의 테이블의 초기 모습이 주어지며 1은 N극, 2는 S극을 의미하며 테이블의 윗부분에 N극이 아래부분에 S극이 위치한다고 가정한다.
  • 테스트 케이스의 번호와 교착 상태의 개수를 출력한다.

풀이 순서

  • 배열값을 입력으로 받는다.
  • 배열의 세로줄을 순회하면서 위에서 밑으로 탐색하는데 1이 있다면 아래에 2가 있어 교착상태가 있는지 확인해주며 그 수를 세아린다.

Check point

  • 배열의 세로줄을 확인해야 한다.
  • 위에가 1 이므로 위에서 아래로 탐색하는데 if 1가 없는데 2이 있으면 위로 떨어진다.
  • 위에서 아래로 탐색하는데 if 1가 있는데 이후에 2이 없으면 아래로 떨어진다.
  • 교착상태는 한줄에 여러개 일 수 있으며 여러개의 1이 하나의 2와 교착상태 될 수 있으며 그 반대도 가능하다. 즉, 1, 2의 갯수가 같지 않더라도 교착상태가 될 수 있다. 다만, 여러개의 2와 한 개의 1이 교착상태일 경우 교착상태의 갯수에 영향을 끼치지 않으므로 코드 상으로는 고려하지 않는다.

코드

Python

  • 문제를 읽고 정리한 모든 코드를 작성해 보았다.
for tc in range(1,11):
    N=int(input())
    arr=[list(map(int, input().split())) for _ in range(100)] # 100 x 100크기의 테이블
    total=0 #교착상태 수 저장할 변수
    for i in range(100):
        tmp=[] # 1 나올 때  저장해두기
        for j in range(100):
            if arr[j][i] == 2:
                # 위에서 아래로 탐색하는데 if 1가 없는데 2이 있으면 떨어짐
                # if tmp == []:
                #     pass
                # 1가 있으면 교착상태 수 늘려주고 교착상태인 1,2는 제거해서 다음 교착상태 있는지 확인하기
                if tmp:  # if tmp != []
                    tmp=[]  # 위에 1이 몇개 있든 2를 만나면 다 교착상태가 되버린다.
                    total+=1
            elif arr[j][i] == 1:
                tmp.append(arr[j][i])
            #0이 나오면 넘어가기
            # else:
            #     pass
        # if len(tmp) != 0:
        #     tmp =[]   # 위에서 아래로 탐색하는데 if 1가 있는데 이후에 2이 없으면 아래로 떨어짐
    print(f'#{tc} {total}')

정리 코드

for tc in range(1, 11):
    N = int(input())
    arr = [list(map(int, input().split())) for _ in range(N)]
    total = 0
    for i in range(N):
        tmp = []
        for j in range(N):
            if arr[j][i] == 1:
                tmp.append(arr[j][i])
            if arr[j][i] == 2 and tmp !=[]:
                tmp=[]
                total += 1
    print(f'#{tc} {total}')

0개의 댓글