Closed Jewan1120 closed 1 month ago
🤔 시간복잡도 고려사항
시뮬레이션 문제, 특이사항 X
💡 풀이 아이디어
🤔 시간복잡도 고려사항
O(N^2)
💡 풀이 아이디어
dfs로 완전탐색하기
사다리 구성
사다리 타기 play()
선 추가하기 addLine()
성공했을 경우에도 상태 되돌려주기
🤔 시간복잡도 고려사항
💡 풀이 아이디어
N개 중 C개를 선택하는 조합 문제
라고 생각 → 백 트래킹
boolean[][]
을 사용
설치가 가능한 0~3개를 선택
했을 때 움직임이 올바른지 확인좌 우 인덱스에 사다리가 있다면 위치 변경
백 트래킹
으로 선택을 취소하고 다음 선택으로 넘어감🤔 시간복잡도 고려사항
2 ^ (사다리 전체 개수)
가 되므로 시간 초과 발생함(사다리 개수C0 + 사다리 개수C1 + 사다리 개수C2 + 사다리 개수C3)
💡 풀이 아이디어 (1) Powerset 이용
(2) 조합 이용
🤔 시간복잡도 고려사항 변수 값이 작아서 고려X
💡 풀이 아이디어
map[a][b] = 1; // 사다리 오른쪽 이동 가능
map[a][b+1] = 2; // 사다리 왼쪽 이동 가능 (오른쪽으로 이동한 상태이므로 2로 표현)
dfs
가로선(메모리 유실선)이 추가되지 않았다면백트래킹
으로 가로선 제거🤔 시간복잡도 고려사항
💡 풀이 아이디어 ※ 코드 작성 전 문제를 풀기 위해 필요한 조건에 대해 생각했는데, 조건을 구하기 위한 아이디어가 전혀 안떠올라서 해설을 참고했습니다. 해설을 통해 왜 이런 방법으로 문제를 풀었는지에 대해 적었습니다.
유실선을 추가하는 기준? 왜 조합 알고리즘인지?
유실선을 연결할 수 있는 모든 유실선 순회하며 유실선을 1개~3개 연결
방문체크로 유실선을 연결 해 조건을 충족하는지 알 수 있음
사다리를 타는 방법?
내 생각: 번호를 기준으로 내려가며 좌우를 확인하고 1을 발견하면 이동 → 유실선을 추가할때 마다 모든 사다리 줄을 이 과정을 거치면 시간초과가 발생할 것 같음 해설: 유실선을 기준으로 연결된 지점끼리 번호를 교환 → 두 지점을 한번에 교체가능
dfs 백트래킹한 이유?
- 유실선 하나를 추가했을 경우 모든 사다리줄이 알맞은 고객에게 찾아가는지 확인 해야 함
- 조건에 충족하지 않을 경우 더이상 사다리를 타지 않고 깊이 탐색에서 제외