선택은 나의 것

[BOJ 백준] 2799번 블라인드 본문

☽ Algorithm/BOJ

[BOJ 백준] 2799번 블라인드

Algoribi 2020. 8. 6. 13:36

문제

BOJ 2799 : https://www.acmicpc.net/problem/2799

 

2799번: 블라인드

문제 봄이 오고 있다. 해는 높이 떠서 환하게 빛나고 있다. 사람들은 햇볕을 가리기 위해 블라인드를 내린다. 상근이는 이웃들이 무엇을 하는지를 염탐하고, 이것에 대해서 뒷담화를 하는 주부��

www.acmicpc.net

접근

나는 아파트의 상태를 한 줄씩 입력받아 그 줄에서 펼쳐진 블라인드의 개수('*'의 수 / 4)를 확인했다. 아파트는 제일 위의 벽('######')상태가 있고 그 밑으로 4칸 동안 창문의 상태가 주어지는데 이는 현재 줄의 번호를 5로 나눈 나머지 값으로 창문의 몇 번째 줄인지를 확인했다. (그래야 블라인드가 몇 칸이나 펼쳐져 있는지 알 수 있기 때문) 만약 이전 줄과 다음 줄의 상태(블라인드가 펼쳐진 상태)가 다르게 나타난다면 어느 집의 블라인드가 더 이상 펼쳐져 있지 않음을 의미한다. 즉 어느 집은 이전 길이만큼의 블라인드만 펼쳐져 있다는 뜻이다. 이런 식으로 계산해서 풀었는데, 사실 이는 2차원 배열로 받아서 푸는 법을 잘 몰라서 이렇게 한 줄씩 받아서 푸는 방법을 생각해냈었다.사실 한 줄씩 string으로 받아 빈 배열에 append해주면 충분히 2차원 배열로서 접근이 가능하고, 더 쉽게 풀 수 있다.

코드

n = list(map(int, input().split()))
counter = [0, 0, 0, 0, 0]
c = 0
for i in range(n[0] * 5):
    w = input()
    if i % 5 == 0:
        c = 0
        continue
    if c == n[1]:
        continue
    wd = n[1] - w.count("*") / 4 - c
    if i % 5 == 1:
        counter[0] += wd
        c += wd
    elif i % 5 == 2:
        counter[1] += wd
        c += wd
    elif i % 5 == 3:
        counter[2] += wd
        c += wd
    elif i % 5 == 4:
        counter[3] += wd
        c += wd
        counter[4] += n[1] - c
w = input()
for i in counter:
    print(int(i), end=" ")

 

깃 허브 주소 : https://github.com/algoribi/algorithm-study

Comments