공부하고 기록하는, 경제학과 출신 개발자의 노트

프로그래밍/코딩테스트 문제풀이

[Python] 백준 14890. 경사로

inspirit941 2019. 11. 24. 18:54
반응형

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

 

14890번: 경사로

첫째 줄에 N (2 ≤ N ≤ 100)과 L (1 ≤ L ≤ N)이 주어진다. 둘째 줄부터 N개의 줄에 지도가 주어진다. 각 칸의 높이는 10보다 작거나 같은 자연수이다.

www.acmicpc.net

 

조건에 맞게 식을 만들어야 하는 시뮬레이션 문제.

 

[1,1,1,2,2,2] 처럼 왼쪽 -> 오른쪽으로 갈수록 경사가 상승할 경우는 쉽게 해결이 가능하지만,

[2,2,2,1,1,1] 처럼 경사가 하강하는 경우의 조건을 만들어내는 게 아주 번거로웠다.

 

코드 로직은

 

현재 값 start = arr[0]으로 저장하고, index 1부터 끝까지 iteration하면서 아래 조건으로 구분한다.

temp = 연속된 값이 몇 개 있는지. 즉 경사로 설치가 가능한 평면의 길이라고 생각하면 된다.

 

1. 현재 값 = 다음 값 -> temp 값 + 1

2. 현재 값 == 다음 값 + 1 (즉, 올라가는 경사로) -> temp 값과 주어진 L값을 비교한다. temp가 L보다 작으면 경사로를 설치할 수 없다.

3. 현재 값 == 다음 값 - 1 (내려가는 경사로) -> 다음 값부터 총 L개의 값을 확인한다. 

 

3.1. 남은 리스트 원소 개수가 L보다 작을 경우 = 경사로 설치할 공간이 없다.

L개의 원소 전체가 동일한 값이 아니다 = 평지가 아니다. 따라서 이 두 가지 경우는 경사로 설치가 불가능하다.

3.2. 경사로를 설치할 수 있다면, 경사로를 설치한 index부터 다시 경사로 설치 여부를 검사한다.

 

문제 이해부터 명확히 하고, 매번 예외상황을 예상하고 처리하는 시뮬레이션 문제가 제일 어렵다...

 

 

 

반응형