BOJ 14719

노영진·2023년 10월 1일

💻 내 코드

h, w = map(int,input().split())
data = list(map(int,input().split()))

table = [[0]*w for i in range(h)]
for j, value in enumerate(data): # j 너비
    for i in range(value):
        table[i][j] = 1

rst = 0
for i in range(h):
    wall = False
    count = 0
    for j in range(w):
        if table[i][j] == 1:
            if wall:
                rst+=count
                count = 0
            else:
                wall = True
                count = 0
        else:
            if wall:
                count += 1

print(rst)

푸는데 10분 정도 걸린 것 같다. 코드 설명을 간단히 하자면, table을 만들 때, x축 대칭을 한 것처럼 데이터를 저장했다. 그래서 비가 밑에서 위로 내린다고 생각하고 풀었다. 이렇게 한 특별한 이유가 있던 건 아니고 table을 쉽게 만들기 위해서다.
1. 윗줄부터 가로로 탐색한다.
2. 만약 벽이 나온다면, 둘 중 하나다.

  • 이 가로줄에서 첫 등장한 벽이라면?
    벽이 나왔다고 기록해두고 count를 세기 시작한다.
  • 벽이 등장한 적이 있었다면?
    지금까지 센 count를 rst에 더해주고 count = 0 으로 초기화
  1. 벽이 아니라면, 이전에 벽이 있었다면 count += 1

👍 제출

0개의 댓글