pwc99   5년 전

코드와 같이 우선 순열을 모두 save배열에 저장한 후,

O(n2)으로 중복체크하였습니다.

8 8

1 2 3 4 5 6 7 8

예제를 시행하면 
40000회*40000회로 시간초과가 나는 것 까지는 알겠으나,

중복체크를 어떻게 해야하는지 모르겠습니다.

pwc99   5년 전

https://www.acmicpc.net/problem/15664

N과M (10)은 제약조건이 추가되어 오히려 시간초과가 안뜹니다..

bakpark   5년 전

크기 순서가 주어진 길이 N짜리 배열에서

만약 정렬된 상태라면 O(N) 만에 중복제거를 할 수 있습니다.

지금 현재 풀이에서는 정렬을 하는게 우선이겠네요

bakpark   5년 전

다시보니 정렬이 된 상태로 저장이되네요

중복제거 힌트를 조금 드리면

1 1 2 2 3 3 3

이라는 수열이 있을때

int prev=0;

for(int i=1;i<=N;i++){
if(prev<arr[i]) {

  prev = arr[i];

  continue;

}

else   same_chek[i] = true;

}

의 방식으로 할 수 있습니다.

Green55   5년 전

크기가 10000인 배열을 잡아서 수들이 몇번이나 등장하는지 세두시면 백트래킹으로 쉽게 해결하실 수 있습니다

pwc99   5년 전

처음에 중복 제거하고, 나온 수 체크해 백트래킹하니 잘 나옵니다!

답변 감사합니다~~

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