[BOJ15684] 사다리 조작
Updated:
i번 세로선 결과가 i번이 나오기 위해 추가해야되는 최소 가로선 개수
- 사다리는 N개의 세로선, M개의 가로선으로 구성
- 가로선 놓을 수 있는 위치 H개
- 가로선 연속 X
입력
- N(2<= <=10), M(0<= <=(N-1)*H), H(1<= <=30)
- 둘째 줄부터 M개의 줄에 가로선 정보 (a, b) (1<= <=H) (1<= <=N-1)
- 왼쪽, 상단부터 1 시작, 가로선 연속 X
출력
- i번 세로선의 결과가 i번이 나오기 위해 추가해야되는 최소 가로선 개수
- 답이 3보다 크면 -1, 불가능한 경우도 -1
설계
- 사다리를 그래프로 구현 (2중 배열이용)
- 각 위치의 가로선 긋는 백트래킹 구현
- 백트래킹 끝나는 조건 : 가로선 개수 (가로선은 0~3까지 반복문)
- 세로선 시작 끝이 같으면 break 후 출력, 없으면 -1 출력
- 사다리 타는 로직
- 현재 위치 (y, x)에서 체크해야될 양쪽 가로선 (y-1, x), (y, x)
- y-1 은 왼쪽으로 옮겨감 -> (y-1, x+1)
- y 는 오른쪽으로 옮겨감 -> (y+1, x+1)
- 가로선이 없는 경우 (y, x+1)
피드백
- 백준에서 n과 m 백트래킹 시리즈를 모두 풀었음에도, 단순 파라미터 문제로 계속 헤맴
- 시간초과가 계속 나서, 순열로 작성한 코드를 조합으로 변경
- 즉, 가능한 가로선을 방문하는 과정에서 2중 for문(n, h)이 쓰이는데, n 반복 과정에서 이전 값을 기억해 다시 사용
- 이 과정에서, dfs의 파라미터로 i+1을 (i : n반복 인덱스) 넣었는데, 이번엔 답이 틀렸다고 떴음 (테스트 케이스는 다 맞았음)
- 파라미터로 그냥 i를 넣으니 통과
- 왜 i+1은 안 되는지 진짜진짜 모르겠음… 이게 시간 절약에 더 맞는 거 같은데…
How I solved(click to github)
ref :
BOJ15684
Leave a comment