[문제 링크] 👇
풀이
테이블 위는 N극, 아래는 S극이고 입력에서의 1은 N극, 2는 S극이다.
N극 쪽에는 1이 있으면 안 되고, S극 쪽에는 2가 있으면 안 된다.
위 그림과 같이 1 다음에 2 가 있으면 교착상태라는 것이다. 한 줄씩 확인하면서 1과 2가 같이 나타나는 개수를 세어주면 된다.
현재 bit를 1이라고 정하고 시작한다.
for i in range(100):
bit = 1
이제 한 줄씩 확인한다.
for j in range(100):
if table[j][i] == 1:
bit = 2
elif table[j][i] == bit:
bit = 1
result += 1
- 현재 자성체가 1이면 bit를 2로 바꾼다.
- 현재 자성체가 현재 비트와 같으면, 즉 현재 비트가 2이면 bit를 1로 변경하고 결과값을 증가한다.
- if table[j][i] == 1:
- N극(1)을 만나면 bit를 2로 변경한다. 이제 다음에 나오는 S극(2)과의 충돌을 감지할 준비가 된 것이다.
- elif table[j][i] == bit:
- 이 조건은 bit가 2일 때, S극(2)을 만났는지를 확인한다. 즉, N극을 만난 이후에 S극을 만나면 교착 상태가 발생한 것이다.
- result 값을 증가시키고 bit를 다시 1로 설정하여 새로운 교착 상태를 찾을 준비를 한다.
💡왜 조건문에서 elif table[j][i] == 2: 라고 하면 안 되는가?
1 다음에 2 인 것을 확인해야 교착상태인 것을 알게 되는데, 이 조건문은 bit가 1일 때도 S극을 만나게 되며 교착 상태를 잘못 판단할 수 있다.
- 예를 들어, N극(1)을 만나지 않고 바로 S극(2)이 나왔을 때도 이 조건이 참이 되어 result 값이 증가하게 된다.
Solution
for tc in range(1, 11):
length = int(input())
table = [list(map(int, input().split())) for _ in range(100)]
result = 0
for i in range(100):
bit = 1
for j in range(100):
if table[j][i] == 1:
bit = 2
elif table[j][i] == bit:
bit = 1
result += 1
print("#%d %s" % (tc, result))
👩💻 회고
어떻게 풀어야 할지 막막했는데, 풀이 안 보고 푼 나에게 박수를.. 1289. 원재의 메모리 복구하기에서 착안을 얻어 풀었다. 그 문제를 미리 풀어서 다행이었다.
'SWEA' 카테고리의 다른 글
[SWEA] 3456. 직사각형 길이 찾기 (Python/D3) (0) | 2024.10.22 |
---|---|
[SWEA] 1225. [S/W 문제해결 기본] 7일차 - 암호생성기 (Python/D3) (0) | 2024.10.21 |
[SWEA] 3314. 보충학습과 평균 (Python/D3) (0) | 2024.10.21 |
[SWEA] 5601. [Professional] 쥬스 나누기 (Python/D3) (1) | 2024.10.21 |
[SWEA] 13229. 일요일 (Python/D3) (0) | 2024.10.21 |