맞으셨군요! 해결하신듯하니 정답과는 별개로,
일단 next_permutation은 쓰실 필요가 없습니다.
10의 배수 -> 끝자리가 0
3의 배수 -> 각 자리의 합이 3의 배수
즉 0이 포함안되면 30의 배수는 무조건 아닌거고,
0을 제외한 나머지의 합이 3의 배수가 아니라면 애초에 30의 배수가 아닙니다.
10610번 - 30
http://www.cplusplus.com/reference/algorithm/next_permutation/?kw=next_permutation
글쌔요 이전과 맞은 코드가 어떻게 다른진 모르겠지만,
next_permutation 리턴값 보시면,
그저 start부터 end까지 인접한 두 값을 비교하는식으로 짜여져 있습니다.
즉 최종적으로 false가 뜰때는 다음 순열이 없을때가아니고,
5,4,3,2,1,0 여기까지 도달하면 false일듯하네요.
저도 c++에 좀 약하긴 해서 확답을 못드리겠는데 제가 생각할때는
애초에 정렬을 마치셨으니 아마 next_permutation은 계속 false여서 어차피 동작을 안했을것 같습니다.
댓글을 작성하려면 로그인해야 합니다.
testtest4 4년 전
저는 이걸 순열이라고 생각하고 큰 수대로 정렬시킨 뒤에
30으로 나눌 수 있는 가장 큰수를 출력하게끔 했거든요 만약 아니면 순열을 바꾸어서 그다음 수를 계산하고.. 이런 식입니다.
보니까 입력받은 숫자를 전부 더한 뒤 3으로 나누는 알고리즘이 있던데
제 알고리즘이랑 별다른 차이가 없는 것 같은데 왜 저는 틀리게 나오는지 이해가 가지 않습니다.
테스트 케이스나 반례를 여럿 해봤지만 다른 케이스는 모르겠네요