문제
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
💡문제풀이 아이디어
테이블 상단이 N극, 하단이 S극이므로 교착상태의 형태는
N극 (1)
S극 (2)
이다.
👉 이런 형태를 하고 있는 자석들의 갯수를 세면 교착상태의 갯수를 알 수 있다.
❓이유
👉 N극은 테이블 하단 S극의 영향을 받아 아래로 내려가고 싶어하는데 위쪽으로 올라가려는 S극이 아래에 걸려 움직일 수 없다.
👉 마찬가지로 S극 역시 테이블 상단으로 움직이고 싶어하지만 아래로 내려가려고 하는 N극이 위에 걸려 있기 때문에 움직일 수 없다.
🐍파이썬
스택을 이용한 풀이
T = 10
for test_case in range(1, T + 1):
table = int(input())
mgt = [list(map(int, input().split())) for _ in range(100)]
cnt = 0
#열 순회
for c in range(table):
stack = []
for r in range(table):
if not stack and mgt[r][c] == 1: #스택이 비어있고 N극(빨간색, 1)인 경우
stack.append(1) #1넣기
elif stack and mgt[r][c] == 2: #스택에 1이 들어있고 S극(파란색, 2)인 경우
cnt += stack.pop() #교착상태 check
print("#{} {}".format(test_case, cnt))
한 열에서, 스택에 1(N극)이 들어있는 상태에서 자석 2(S극)이 존재한다면 무조건 교착상태가 된다.
❓이유
N극 (1) --- 스택에 들어있음
S극 (2) --- mgt[r][c]
형태가 위에 명시한 교착상태의 자석 형태와 동일하다.
따라서 이미 들어있던 1을 빼내어 answer에 더해 교착상태의 갯수를 카운팅한다.
플래그를 이용한 풀이
T = 10
for test_case in range(1, T + 1):
_ = int(input())
arr = []
ans = 0
for _ in range(100):
arr.append(list(map(int, input().split())))
for i in range(100):
n_flag = 0
s_flag = 0
for j in range(100):
if arr[j][i] == 1:
n_flag = 1
s_flag = 0
elif arr[j][i] == 2:
s_flag = 1
n_flag = 0
if arr[j][i] == 0:
if n_flag == 1:
arr[j][i] = 1
elif s_flag == 1:
arr[j][i] = 2
for i in range(100):
for j in range(99):
if arr[j][i] == 1 and arr[j+1][i] == 2:
ans += 1
print("#{} {}".format(test_case, ans))
각 열을 순회하며 arr[j][i]가 1(N극)인 경우 n_flag를 1로 만들고 s_flag를 0으로 만든다.
마찬가지로 arr[j][i]가 2(S극)인 경우 s_flag를 1로 만들고 n_flag를 0으로 만든다.
값이 0인 원소를 만나면 켜져있는 플래그 대로 0또는 1로 원소값을 대체한다. 👉 자성에 따라 밀려난 자석들 표현
두번째 for문에서는, 한 열에서 현재 행의 원소값이 1(N극)이고 다음 행의 원소값이 2(S극)인 경우만의 갯수를 세어 교착상태의 갯수를 카운팅한다.
N극 (1)
S극 (2)
'Problem Solving > SWEA' 카테고리의 다른 글
[SWEA|파이썬] 2814. 최장 경로 (D3) (2) | 2023.05.12 |
---|---|
[SWEA|파이썬] 1216. [S/W 문제해결 기본] 3일차 - 회문2 (D3) (8) | 2023.05.11 |
[SWEA|파이썬] 1225. [S/W 문제해결 기본] 7일차 - 암호생성기 (D3) (0) | 2023.05.10 |
[SWEA|파이썬] 2817. 부분 수열의 합 (D3) (0) | 2023.05.09 |
[SWEA|파이썬] 1209. [S/W 문제해결 기본] 2일차 - Sum (D3) (0) | 2023.05.09 |
[SWEA|파이썬] 1215. [S/W 문제해결 기본] 3일차 - 회문1 (D3) (0) | 2023.05.08 |