알고리즘 공부/파이썬(Python)

SWEA 1220번 D3 [S/W 문제해결 기본] 5일차 - Magnetic 파이썬

마달랭 2024. 7. 8. 10:19
반응형

리뷰

스택을 사용하여 풀이하였다.

문제 풀이

  1. 테스트 케이스는 10개로 고정이다.
  2. 배열의 크기도 100 * 100이나 어쨌든 값을 가져와야 하기에 N으로 받아오고 N * N 크기의 배열을 초기화 해줬다.
  3. 칼럼을 기준으로 FOR문을 개행하고 스택을 빈 리스트로 초기화 해준다.
  4. 현재 값이 2일경우, 스택의 마지막 숫자가 1이면 스택에 추가해준다.
  5. 현재 값이 1일경우, 스택의 마지막 숫자가 2이면 스택에 추가해준다.
  6. 스택을 참조하여 이전 값이 1뒤에 2가 있을 경우 개수를 1개 추가해준다. (2의 개수를 구해주면 더 좋을 것 같다.)

 

참고 사항

IF문을 사용할때 값이 2일 경우와 ELSE를 사용했는데 그럼 0값도 노출되게 된다. IF문으로 2, 1을 정확히 체크해 줘야 한다. (그래서 첫 제출에 틀렸습니다가 노출되었다 ㅠㅠ)

 

정답 코드

for i in range(1, 11):
    n = int(input())
    lst = [list(map(int, input().split())) for _ in range(n)]
    ans = 0
    for j in range(n):
        stack = []
        for k in range(n):
            if lst[k][j] == 2:
                if stack and stack[-1] == 1:
                    stack.append(2)
            if lst[k][j] == 1:
                if not stack or stack[-1] == 2:
                    stack.append(1)
        for k in range(len(stack)):
            if stack[k - 1] == 1 and stack[k] == 2:
                ans += 1
    print(f'#{i} {ans}')

 

728x90
반응형