Problem : 경사로
유형 : 시뮬레이션
문제, 예제, 출력 설명
해결 전략
쉽게 문제를 풀기 위해, 단 방향으로만 탐색하게 했다.
기존의 board를 시계 방향으로 90도 돌린 후 아래에 붙였다.
연속된 평지의 개수를 따로 관리하며 경사로 설치 가능 여부를 확인했다.
오르막 경사로의 경우, 평지가L
개 있음을 확인하고,
내리막 경사로의 경우, 경사로가 겹치는 지의 여부를 확인했다.
내리막의 경우에는, 일단 우측에 충분한 평지가 있다고가정
하고 시작했다.
길의 탐색이 끝났을때, 경사로가 완전히 설치 되었을 경우에만갈수 있는 길
이라고 하였다.
주의할 점
- 변수로 두어야 할것을 상수로 두지말자.
- 나의 경우 L을 예제의 상수로 설정해서 처음에 이상한 값이 나왔다.
- 내리막 경사로를 설치할때, 길이 있다고 가정하고 시작할시
- 내리막 경사로 설치의 시작점에서, 연속된 평지의 길이는
1 - L
이 되어야 한다. - 시작점도 경사로의 한 부분이기 때문이다.
- 내리막 경사로 설치의 시작점에서, 연속된 평지의 길이는
풀이
단 방향으로만 탐색할 수 있도록 세팅한다.
- 맵을 90도로 돌린 후, 밑에 이어붙인다.
각 행마다 길이 될 수 있는지 여부를 확인한다.
- 가능하다면, 갈수 있는 길의 카운트를 증가시킨다.
경사로를 설치해나가며 길이 될 수 있는지를 확인한다.
- 연속되는 평지의 개수를 계속 세어나간다
- 높이가 두 칸 이상 차이 나면 불가능.
- 오르막길인 경우
- 평지가
경사로의 길이
이상 있어야 함. 모자르다면 실패 - 성공한다면, 평지는 1개부터 다시 시작.
- 평지가
- 내리막길인 경우
- 이후에 평지가
경사로의 길이
이상 있어야 함 - 평지가 있다고 가정하고
1 - 경사로의 길이
의 연속된 평지의 개수가 있다고 설정함. - 만약 내리막길을 만났는데, 현재 연속된 평지가 0보다 작은경우
- 지금 내리막길을 만들며 내려가는 중임.
- 내리막길은 겹칠 수 없으므로 실패.
- 이후에 평지가
- 내리막의 경우, 평지가 있다고 가정 했다.
- 끝낫을때, 평지가
음수
개 있다면, 아직 경사로를 설치하는 중이다 - 경사로를 완성하지 못했으므로, 실패
- 끝낫을때, 평지가
코드
1 |
|
피드백
문제를 어떻게 쉽게 풀수 있을까
고민하고 설계하는 능력이 중요하다.