해결 방법:
성능 측면에서 이는 다음을 의미합니다.
기준 1의 경우:
최적으로 해결하려면:
이것이 효과가 있을 것으로 생각합니다. 알아낼 수 있는 방법은 단 하나입니다.
다음은 기준 2(1, 2 또는 3의 차이)를 식별하는 코드입니다.
let differFlag = true; let i = 1; while (differFlag && i < list.length) { let amount = Math.abs(list[i] - list[i - 1]); if (![1, 2, 3].includes(amount)) { differFlag = false; } i++; }
다음은 기준 1(모든 차이가 증가하거나 감소함)을 식별하는 코드입니다.
let differFlag = true; let i = 1; let differences = []; while (differFlag && i < list.length) { let amount = list[i] - list[i - 1]; differences.push(amount); if (![1, 2, 3].includes(Math.abs(amount))) { differFlag = false; } i++; }
안전한 신고를 캡처하는 최종 조건은 다음과 같습니다.
if ( differFlag && (differences.every((el) => el > 0) || differences.every((el) => el < 0)) ) { safeCount++; }
전체적으로 내 알고리즘은 예제 입력에 대한 정답을 생성합니다.
퍼즐 입력에도 똑같이 적용되나요??
네에에에에에에에에에에에!!
달콤해요!
이렇게 하면 상황이 좀 복잡해집니다.
보고서의 가능한 모든 순열을 확인하는 알고리즘은 피하고 싶습니다. 이를 위해서는 수백만 개의 보고서를 생성해야 합니다.
첫 번째 좋은 소식은 다음과 같습니다.
제가 입력한 퍼즐의 경우 순열을 확인할 필요가 없는 약 200개입니다.
그래도 800/1000은 순열을 완전히 탐색하기에는 여전히 많은 목록입니다.
솔직히 안전하지 않은 보고서의 각 순열에 대해 알고리즘 실행을 피할 수 있는 방법이 없습니다.
버머.
안전하지 않은 보고서의 각 숫자를 반복하는 루프를 추가할 시간입니다. 숫자를 제거한 다음 변경된 목록에서 합격 여부를 확인하세요.
각 후속 테스트 보고서에서 하나의 숫자를 복제하고 제거하기 위해 줄을 추가하여 while 루프를 복제했습니다.
코드가 훨씬 더 많습니다.
하지만 효과가 있어요! 퍼즐입력에 대한 정답을 생성해드려요!
질문:
실행해 볼까요...
흠, 실행이 되지만 파트 1 답변보다 약간 더 크다는 답변을 받았습니다. 틀린 것 같습니다.
제출해도 나쁘지 않겠죠????
그게 맞습니다 맞습니다!
신성한 연기!
정말 놀랍습니다!
그리고 정말 재미있습니다!
금별 4개가 3일차에 들어갑니다.
더욱 멋진 퍼즐을 만나보세요!
위 내용은 빨간 코 보고서의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!