문제
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)]
total=0
for i in range(100):
tmp=[]
for j in range(100):
if arr[j][i] == 2:
if tmp:
tmp=[]
total+=1
elif arr[j][i] == 1:
tmp.append(arr[j][i])
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}')