문제
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
나의 풀이
- 위에 있는 자석이 1, 아래에 있는 자석이 2이므로 열이 아닌 행을 기준으로 탐색하면서 다른 극을 만나면 교착상태에 빠지는 횟수를 카운트 해준다.
- 위에있는 자석이 N극이므로, 제일 위에 있는 행에 S극이 있다면, 테이블 밖으로 떨어질 것이므로, 행을 탐색할 때 처음 값이 N극인 경우를 탐색해야한다.
- N극인 경우 flag값을 1로 바꾼 후, 같은 열의 다른 행에서 S극을 만났다면 교착상태로 카운트 하고, flag를 다시 0으로 바꿔준다.
- 위 과정을 반복한 후, 출력형식에 맞게 교착상태로 카운트 된 횟수를 출력한다.
코드
for tc in range(10):
n = int(input())
board = [list(map(int,input().split())) for _ in range(n)]
# N극 : 1, S극 : 2 , 맨 윗칸 N극, 맨 아랫칸 S극
result = 0
for i in range(n):
flag = 0
for j in range(n):
if board[j][i] == 1:
flag = 1
elif board[j][i] == 2:
if flag:
result += 1
flag = 0
print(f'#{tc + 1}', result)
다른 사람의 풀이
- flag로 처리한 위 과정을 stack으로 처리하였다.
- 행을 기준으로 탐색하면서 stack이 비어있는 상태(N극이 들어있지 않은 상태)에서 N극을 만나면 stack에 1을 넣고, S극을 만날 때 stack의 값을 뺴서 교착상태로 카운트 한다.
- 출력 형식에 맞춰 출력한다.
풀이 과정 참고해서 짠 코드
for tc in range(10):
n = int(input())
board = [list(map(int,input().split())) for _ in range(n)]
# N극 : 1, S극 : 2 , 맨 윗칸 N극, 맨 아랫칸 S극
result = 0
for i in range(n):
stack = []
for j in range(n):
# 이미 1이 들어있는 경우 거르고 스택에 넣기
if not stack and board[j][i] == 1:
stack.append(1)
# 스택에 1이 들어있는 경우 pop하고, 1더하기
elif stack and board[j][i] == 2:
result += stack.pop()
print(f'#{tc + 1}', result)'Algorithm > Stack & Queue' 카테고리의 다른 글
| [Python] 백준 9935번 문자열 (0) | 2024.07.15 |
|---|---|
| [JAVA] 백준 1715번 카드 정렬하기 (1) | 2023.12.13 |
| [JAVA] 백준 11000번 강의실 배정 (1) | 2023.12.13 |
| [Python] 백준 1158번 요세푸스 문제 (0) | 2023.06.17 |
| [Python] 백준 2812번 크게 만들기 (0) | 2023.05.11 |