문제풀이/BOJ

[Python] BOJ/백준 2508번 사탕 박사 고창영

서채리 2021. 6. 22. 20:35

[문제]

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

 

2508번: 사탕 박사 고창영

창영이가 드디어 취직을 했다!! 그가 30세까지 취직을 안하던 이유는 바로 마음에 다니는 직장을 찾지 못해서였다. 이번에 창영이가 취직한 곳은 사탕 공장이다. 사탕 공장에 다니면 사탕 처럼

www.acmicpc.net

 


[풀이]

우선 사탕 입력을 box 리스트에 넣어주었다. box를 출력하면 ['.>o<', 'v.^.', 'ooo.', '^.^.', '>o<<'] 이렇게 출력이 된다.

 

1. >o< 모양의 사탕 구하기

가로로 되어있는 사탕을 구하는 건 쉽다. 행렬로 생각하면 box는 5행 4열이기 때문에 가로로 세개씩 묶는다면(사탕의 가로 모양 >o<) '열 수 - 2' 한만큼 비교를 하게 된다. 한 행당 3문자씩 슬라이싱 했을 때의 값이 '>o<'와 같다면 candy 값을 1 증가시켜 주었다.

 

2. vo^ 모양의 사탕 구하기

익숙한 형태인 가로로 비교하는 것이 아닌 세로로 비교해야 하는 문제이다. 이번에는 행을 세 개씩 묶어 검사해야 되기 때문에 '행 수 - 2' 한 만큼 열씩 검사를 해준다. 위의 필기처럼 box[0][0] + box[1][0] + box[2][0] 한 값이 'vo^' 이면 사탕이기 때문에 규칙성을 찾아 i와 j로 치환시켜준다. 

 

 

[코드]

if __name__ == '__main__':
    for _ in range(int(input())):
        blank = input()
        r, c = map(int, input().split())
        candy = 0
        box = []
        for _ in range(r):
            box += input().split()

        # '>o<' 모양의 사탕이 있는지 확인
        for i in range(r):
            for j in range(c - 2):
                if box[i][j:j+3] == '>o<':
                    candy += 1

        # 'vo^' 모양의 사탕이 있는지 확인
        for i in range(r-2):
            for j in range(c):
                vertical = box[i][j] + box[i+1][j] + box[i+2][j]
                if vertical == 'vo^':
                    candy += 1
        
        print(candy)