반례]
4 2 1 4 3
글쓴이님의 코드] 2 3 4 1
실제 답 ] 2 3 1 4
왜 이렇게 나오게 된걸까요?
아래 findMax 메서드에서 저희는, nextChangeNumber보다 크다는 조건을 만족하는 동시에, changeNumber 뒤에 있을 가장 먼 값을 찾고자 합니다.
그렇다면, 위 예시, 2 1 4 3에서는, nextChangeNumber가 1이 됩니다. (changeNumber는 4 ), 그렇게 되면, 아래의 for문을 거친다면,
i는 nextChangeNumber( 1 )부터 끝까지 조사하면서, 가장 마지막에 있는 3을 toChangeNumber에 대입합니다.
그렇게 되면, 1과 3만을 바꿔, 2 3 4 1이 됩니다. 하지만, 2 1 4 3 의 다음 사전순인 2 3 1 4가 옳습니다.
이 부분을 참고해주세요!
kimochi0523 3년 전
안녕하십니까!
이번에 다음 순열을 풀다 조건을 다 맞췄다고 생각을 했으나,
결과가 틀려, 이렇게 질문을 올립니다.
조건은 이렇게 생각해봤습니다.
( i - 1의 변수명 : nextChangeNumber, i의 변수명 : changeNumber, j의 변수명 : toChangeNumber)
1) numberArray[i - 1] < numberArray[i]를 만족하는 가장 큰 수를 찾습니다. Line 16.
2) j >= i && numberArray[j] > numberArray[i - 1]을 만족하며, 가장 큰 j를 찾습니다. Line 27.
3) numberArray[i - 1] 과 numberArray[j]를 스왑 합니다. Line 34.
4) 이후, 출력합니다. Line 41.
이 4가지 조건을 가지고 해봤으며, 테스트 결과는 맞게 잘 나오는데, 분명 제가 생각하지 못한 사례가 더 있을겁니다.
그걸 여쭤보고 싶고 어떻게 해결해야 정답으로 돌릴 수 있을지 궁금합니다!
부탁드리겠습니다.