[PYTHON/파이썬] 9455 박스

https://www.acmicpc.net/problem/9455

 

9455번: 박스

첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스의 첫째 줄에는 m과 n이 주어진다. (1 ≤ m, n ≤ 100) 다음 m개 줄에는 그리드의 각 행의 정보를 나타내는 n개의 정수가 주어진다. 그

www.acmicpc.net

문제 풀이

  • 편하게 탐색하기 위해 행렬의 열과 행을 바꾼다.
  • 바닥면이 맨 오른쪽 열임으로 뒤에서부터 탐색한다.
    • 바닥면은 m-1
  • 요소가 1이면
    • 바닥면이 1칸 왼쪽으로 이동 (인덱스 입장에선 -1)
    • 횟수를 세줌(바닥면에서 현재 위치값을 빼줌)

soltuion - 성공

import sys
t = int(sys.stdin.readline().strip())
for _ in range(t):
  m,n = map(int, sys.stdin.readline().strip().split())
  matrix = [list(map(int, sys.stdin.readline().strip().split())) for _ in range(m)]
  # [[1, 0, 0, 0], [0, 0, 1, 0], [1, 0, 0, 1], [0, 1, 0, 0], [1, 0, 1, 0]]

  # 행과 열을 바꿈 
  new_matrix = list(zip(*matrix))
  # print(new_matrix) # [(1, 0, 1, 0, 1), (0, 0, 0, 1, 0), (0, 1, 0, 0, 1), (0, 0, 1, 0, 0)]


  cnt = 0
  for i in range(n):
    # floor는 각 행마다 초기화
    floor = m-1 # 바닥면 설정
    for j in range(m-1,-1,-1): # 뒤에서 부터 
      if new_matrix[i][j] == 1:
        cnt += floor -j
        floor -= 1
  print(cnt)

댓글