
😎풀이
- 교차는 다음의 상황에서만 이루어진다.
1-1. 축이 네 개 이상일 경우 (i >= 3)
1-2. i번째 축과 i-3번째 축이 만날 경우 (첫번째와 네번째 축)
1-3. i번째 축과 i-4번째 축이 만날 경우 (첫 번째와 다섯 번째)
1-4. i번째 축과 i-5번째 축이 만날 경우 (첫 번째와 여섯 번째)
- 도형을 생각하며 각 지점이 만나려면 어떤 변이 길고 짧아야 하는지 계산하여 예외 처리를 한다.
- 탐색 후 찾지 못했다면
false
반환
function isSelfCrossing(distance: number[]): boolean {
for(let i = 3; i < distance.length; i++) {
if(distance[i] >= distance[i - 2] && distance[i - 1] <= distance[i - 3]) return true
if(i >= 4 && distance[i] + distance[i - 4] >= distance[i - 2] && distance[i - 3] === distance[i - 1]) return true
if(i >= 5 && distance[i] + distance[i - 4] >= distance[i - 2] && distance[i - 3] > distance[i - 1] && distance[i - 5] + distance[i - 1] >= distance[i - 3] && distance[i - 2] > distance[i - 4]) return true
}
return false
};