https://www.acmicpc.net/problem/2508
문제
창영이가 드디어 취직을 했다!! 그가 30세까지 취직을 안하던 이유는 바로 마음에 다니는 직장을 찾지 못해서였다. 이번에 창영이가 취직한 곳은 사탕 공장이다. 사탕 공장에 다니면 사탕 처럼 달콤한 직장생활을 할 줄 알았지만, 8시간동안 사탕 품질을 검사해야 하는 작업은 너무나 지루했다.
사탕의 품질은 다음과 같이 검사한다. 가장 먼저 사탕으로 가득 찬 박스를 연다. 그 다음 사탕의 개수와 사탕이 없는 곳의 개수를 센다.
지루함을 견디지 못한 창영이는 결국 품질을 검사하는 프로그램을 작성하기로 했다.
r행 c열 행렬이 주어진다. 이 행렬은 박스를 위에서 바라본 것이다. 행렬에는 다음과 같은 문자만 있다.
- ".": 빈 곳
- "o": 사탕의 먹을 수 있는 부분
- "<>v^": 캔디 껍질
사탕은 오직 2가지 모습만 있다.
-
>o<
-
v o ^
위와 같은 연속된 3개의 문자만 사탕이다.
사탕은 >o.와 같이 사탕의 일부만 존재할 수 있지만, 이 것은 사탕으로 세지 않는다.
r행 c열 행렬이 주어졌을 때, 사탕의 개수를 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 테스트 케이스의 개수 t가 주어진다. 각 테스트 케이스는 빈 줄로 구분된다.
각 테스트 케이스의 첫째 줄에는 r과 c 가 주어진다. (1 ≤ r,c ≤ 400) 그 다음 r개의 줄에는 행렬의 각 행이 순서대로 주어진다. 행렬의 각 행은 c개의 문자이며, ".o<>v^"만 포함하고 있다. (각각의 아스키 값은 46, 111, 60, 62, 118, 94이다)
출력
각각의 테스트 케이스에 대해 한 줄에 하나의 정수만 출력한다. 이 값은 박스에 들어있는 사탕의 개수이다.
내 풀이
예제를 참고하면 볼 수 있듯이 테스트 케이스 뒤에 한 칸 빈 입력을 받아야 한다.
속도를 조금 빠르게 하려면 sys.stdin.readline을 사용하면 될거다.
브루트 포스 알고리즘으로 전체를 탐색하되 가능성 있는 것까지만 처리했다.
각 열과 행을 -2 처리해서 사탕의 시작 부분인 '>', 'v' 부분이 있는지 확인하면서 사탕 형태가 제대로 이루어졌는지 카운트를 세며 반복문을 완성했다.
# 31648kb 288ms
test = int(input())
for _ in range(test):
input()
board = []
cnt = 0
row, col = map(int, input().split())
for _ in range(row):
board.append(list(input()))
for i in range(row-2):
for j in range(col):
if board[i][j] == 'v' and board[i+1][j] == 'o' and board[i+2][j] == '^':
cnt += 1
for i in range(row):
for j in range(col-2):
if board[i][j] == '>' and board[i][j+1] == 'o' and board[i][j+2] == '<':
cnt += 1
print(cnt)
메모
브루트포스 알고리즘, 실버 5
'파이썬 알고리즘 연습' 카테고리의 다른 글
[Python | 백준 26170번] 사과 빨리 먹기 (0) | 2024.08.21 |
---|---|
[Python | 백준 1260번] DFS와 BFS (0) | 2024.08.12 |
[Python | 백준 30802번] 웰컴 키트 (0) | 2024.07.30 |
[Python | 백준 11047번] 동전 0 (0) | 2024.07.26 |
[Python | 백준 1620번] 나는야 포켓몬 마스터 이다솜 (2) | 2024.07.24 |