2336번 - 굉장한 학생
22%에서 틀렸습니다가 뜨네요..
알고리즘 자체에 문제가 있는걸까요?
1번째 시험과 2번째 시험에 대해서 각각의 학생이 받은 등수를 rank 배열에 저장을 한 뒤에,
세번째 시험의 등수를 기준으로 계산을 해봤습니다.
예를 들어,
10
2 5 3 8 10 7 1 6 9 4
1 2 3 4 5 6 7 8 9 10
3 8 7 10 5 4 1 2 6 9
이라면,
rank1 : 7 1 3 10 2 8 6 4 9 5
rank2 : 1 2 3 4 5 6 7 8 9 10
1번 학생이 시험 1번에서 받은 등수는 rank1[1], 2번 학생이 시험 1번에서 받은 등수는 rank1[2]
이런 식으로 순위를 알 수 있게끔 입력을 받았습니다.
그 뒤 시험 1, 2에 관하여 tree1, tree2 를 펜윅트리로 만들었습니다.
세 번째 시험을 기준으로 첫 번째로 3이 들어오고, rank1[3] = 7, rank2[3] = 3 이기에,
현재 1번시험에서 7등 이전으로 들어온 것이 있는지를 확인하기 위해 1~7 까지의 구간합을 구하고,
2번시험에서는 3등 이전으로 들어온 것이 있는지를 확인하기 위해 1~3 까지의 구간합을 구합니다.
만약 두 개의 구간합 중 하나라도 0이라면, 현재 이 학생은 대단한 학생이라는 뜻입니다.
그 뒤 tree1 의 7을 1로 업데이트, tree2의 3을 1로 업데이트합니다.
위 차례를 반복하면서 대단학 학생의 수를 구하게끔 했습니다.
이 알고리즘에 반례가 있을까요?..
6
1 5 3 4 2 6
1 2 6 4 3 5
5 2 3 4 1 6
이란 예외가 있었네요. 저 알고리즘은 위의 반례를 체크하지 못했습니다.
그래서 3이 나오고 원래 정답은 5입니다.
댓글을 작성하려면 로그인해야 합니다.
tna1595 5년 전
22%에서 틀렸습니다가 뜨네요..
알고리즘 자체에 문제가 있는걸까요?
1번째 시험과 2번째 시험에 대해서 각각의 학생이 받은 등수를 rank 배열에 저장을 한 뒤에,
세번째 시험의 등수를 기준으로 계산을 해봤습니다.
예를 들어,
10
2 5 3 8 10 7 1 6 9 4
1 2 3 4 5 6 7 8 9 10
3 8 7 10 5 4 1 2 6 9
이라면,
rank1 : 7 1 3 10 2 8 6 4 9 5
rank2 : 1 2 3 4 5 6 7 8 9 10
1번 학생이 시험 1번에서 받은 등수는 rank1[1], 2번 학생이 시험 1번에서 받은 등수는 rank1[2]
이런 식으로 순위를 알 수 있게끔 입력을 받았습니다.
그 뒤 시험 1, 2에 관하여 tree1, tree2 를 펜윅트리로 만들었습니다.
세 번째 시험을 기준으로 첫 번째로 3이 들어오고, rank1[3] = 7, rank2[3] = 3 이기에,
현재 1번시험에서 7등 이전으로 들어온 것이 있는지를 확인하기 위해 1~7 까지의 구간합을 구하고,
2번시험에서는 3등 이전으로 들어온 것이 있는지를 확인하기 위해 1~3 까지의 구간합을 구합니다.
만약 두 개의 구간합 중 하나라도 0이라면, 현재 이 학생은 대단한 학생이라는 뜻입니다.
그 뒤 tree1 의 7을 1로 업데이트, tree2의 3을 1로 업데이트합니다.
위 차례를 반복하면서 대단학 학생의 수를 구하게끔 했습니다.
이 알고리즘에 반례가 있을까요?..