https://www.acmicpc.net/problem/14890
14890번: 경사로
첫째 줄에 N (2 ≤ N ≤ 100)과 L (1 ≤ L ≤ N)이 주어진다. 둘째 줄부터 N개의 줄에 지도가 주어진다. 각 칸의 높이는 10보다 작거나 같은 자연수이다.
www.acmicpc.net
백준 - 경사로 (14890번)
난이도 : Gold 3
알고리즘 : Simulation
풀이 소요 시간 : 55분
문제집 : 삼성 SW 역량 테스트 기출 문제
import sys
input = sys.stdin.readline
def calc_row(row):
cur = row[0]
acc = L
for h in row:
if cur == h: # 1
acc += 1
elif cur+1 == h: # 2
if acc < L2:
return 0
acc = L+1
elif cur == h+1: # 3
if acc < L:
return 0
acc = 1
else: # 4
return 0
cur = h
return 0 if acc < L else 1
if __name__ == '__main__':
N, L = map(int, input().split())
L2 = L<<1
board = [list(map(int, input().split())) for _ in range(N)]
cnt = sum(calc_row(row) for row in board)
cnt += sum(calc_row(list(row)) for row in zip(*board))
print(cnt)
한 행 (row)을 순서대로 탐색하면서, 현재 높이 (cur)와 다음 높이 (h) 를 비교한다.
1. h와 cur의 높이가 같다면 (cur == h),
cur의 연속 등장 횟수 (acc)에 1을 더해준다.
2. h가 cur보다 한 칸 높거나 (cur+1 == h),
3. h가 cur보다 한 칸 낮다면 (cur == h+1),
경사로를 놓을 수 있을만큼 충분한 공간 (acc) 이 있는지 확인한다.
공간이 있다면 경사로를 놓고,
공간이 부족하다면 지나갈 수 없는 길이므로, 0을 return 한다.
4. 그 외의 경우에는 지나갈 수 없는 길이므로, 0을 return 한다.
'Algorithm' 카테고리의 다른 글
마법사 상어와 비바라기 (21610번) - 백준 (BOJ) (0) | 2023.04.24 |
---|---|
이차원 배열과 연산 (17140번) - 백준 (BOJ) (0) | 2023.04.24 |
동전 1 (2293번) - 백준 (BOJ) (0) | 2023.04.24 |
1, 2, 3 더하기 4 (15989번) - 백준 (BOJ) (0) | 2023.04.24 |
등대 (133500번) - 프로그래머스 (Programmers) (0) | 2023.04.24 |