설모의 기록

[백준 14890] 경사로 본문

알고리즘

[백준 14890] 경사로

HA_Kwon 2018. 4. 12. 01:27

이 문제는 높이 차이가 1이고 L만큼 평평한 곳에 경사로를 설치하는 문제입니다. map 그림만 보고 dfs, bfs 문제라고 예상했는데 그냥 이중포문 문제였네요!

 위의 그림과 같은 땅이 있을 때, L = 2 라고 주어졌습니다. 높이가 차이나는 곳은 그 차이가 1이여야 하며, 주어진 조건에 맞게 경사로를 설치할 수 있어야 합니다. 그림에서는 초록색으로 표시한 부분이 지나갈 수 있는 길입니다.

길은 가로와 세로만 생각하면 되니까 편하게 배열 두 개를 선언하고 i, j 만 바꿔서 저장한 후에 똑같은 로직을 사용했습니다. checkBuild 함수에서는 받은 배열의 index 에 저장된 길이 지나갈 수 있는지를 확인합니다. 지나갈 수 없다면 return을, 지나갈 수 있다면 result에 +1 을 하는 방식입니다. slop 배열은 해당 인덱스에 경사로를 설치 했는지 안했는지를 알려주는 boolean 배열입니다.

 저는 0 ~ (N - 1) 까지 해당 인덱스와 다음 인덱스가 다르고 그 차이가 1일때만 검사했습니다. 또한, 그 차이가 1이라면 해당 인덱스부터 경사로를 설치하는 것이고, 그 차이가 -1이라면 해당 인덱스의 다음부터 경사로를 설치하는 것입니다. 인덱스 관리 주의해주세요! 그래서 각각 L번만큼 for문을 돌면서 경사로를 설치할 수 있는 곳인지를 검사하게 됩니다.


'알고리즘' 카테고리의 다른 글

[백준 14502] 연구소  (0) 2018.04.14
[백준 14503] 로봇청소기  (1) 2018.04.14
[백준 14891] 톱니바퀴  (2) 2018.04.11
[codeground 연습문제 4] 다트게임  (0) 2018.04.10
[codeground 연습문제 3] 시험공부  (0) 2018.04.10
Comments