sls666   3년 전

43번줄의 sort(ans.begin(), ans.end()),  이 부분이 없으면 틀렸습니다가 나오는데, 제 생각으로는 없어도 되는 부분같습니다.

sort(nums.begin(), nums.end());  처음 입력값을 정렬해주어서 결과도 오름차순처럼 출력될거같은데, 어떤 부분을 잘못 생각하고 있는 것인지 알고싶어 질문을 올립니다.

//결론:  43번라인이 없다면 왜 오류가 나는 것일까요?

seico75   3년 전

42라인까지 돌린 결과 ans 를 찍어보시면 이해가 되실 것 같습니다.

동일한 숫자가 있을 경우에 ans 의 결과가 소팅되지 않은 순서로 나와서 문제인데, 

5 3

1 2 3 4 5

일 경우

1 2 3

1 2 4

1 2 5

1 3 4

1 3 5

1 4 5

2 3 4

2 3 5

2 4 5

3 4 5

이렇게 나오겠죠? (42라인의 ans가..)

5 3

1 2 2 4 5

일 경우는 어떻게 될지.. 위에서 3을 2로 바꾼 결과와 같을 것 입니다.

1 2 2

1 2 4

1 2 5

1 2 4

1 2 5

1 4 5

2 2 4

2 2 5

2 4 5

2 4 5

결과를 보면 1 2 4 , 1 2 5가 순서가 섞여 있죠.

그래서 소팅도 안되고 44라인에서 중복도 걸러지지 않을 것 같습니다.

해결하려면 43 라인을 넣거나 (그러면 41라인 소팅을 할 필요가 없을 것도 같네요..)

생성때부터 중복을 고려하는 방법 (32라인쯤에서 이전과 숫자가 같으면 다시 선택하지 않는 등으로)을 쓰는 방법이 있을 것 같습니다.

sls666   3년 전

unique()함수의 동작방식을 알지 못했네요. 예시를 통해 확인해보았습니다. 감사합니다.^^

댓글을 작성하려면 로그인해야 합니다.