1946번 - 신입 사원
1. 서류심사 성적을 기준으로 Heap sorting을 합니다.(오름차순으로) = fGradeSort[]
2. 맨 처음 std = fGradeSort[1]로 잡아놓고, 그 다음 부터 fGradeSort[]를 N까지 돌면서 std의면접 성적(sGrade)보다 더 작다면 cnt++을 합니다. 그리고 std는 그 순간 fGradeSort[i]로 바꿔줍니다.
3. 다시 말해, 서류 심사 성적 오름차순으로 정리 후 면접심사 점수가 이전 사람보다 좋다면(=fGrade 값이 작다면) 추가 가능 하므로 cnt++ 하는 구조입니다.
맨처음엔 위와 같은 생각으로 코딩하여 맞았다고 나왔는데, 가만 생각 해보니
1 42 73 64 55 36 27 1
이와 같은 input이 있을 경우, 위 알고리즘 대로 한다면 맨처음 기준이 <1, 4> 로 잡히기 때문에 결과값은 4가 나오게 됩니다. 집합은 이렇게 구성 되겠죠..?<(1,4), (5,3), (6,2), (7,1)>
근데 생각해보면, 최대 사원 수 이므로 <(2,7), (3,6), (4,5), (5,3), (6,2), (7,1)>의 집합이 최대로써 결과값 6이 답이 아닌가요....?
저 <(2,7), (3,6), (4,5), (5,3), (6,2), (7,1)> 집합에서
(3, 6), (4, 5) 의 경우는 (1, 4)보다 모두 작기때문에 집합에서 빠져야합니다.
따라서 답은 4가 맞습니다.
근데 <(2,7), (3,6), (4,5), (5,3), (6,2), (7,1)> 이 집합에는 (1,4)가 포함 되어 있지 않기 때문에, 굳이 (3,6) / (4,5)가 빠질 필요가 없는거 아닌가요...?
"다른 모든 지원자와 비교했을 때 서류심사 성적과 면접시험 성적 중 적어도 하나가 다른 지원자보다 떨어지지 않는 자만 선발한다는 원칙을 세웠다"
신입사원 끼리의 비교가 아니라 지원자끼리의 비교입니다. 따라서 어떻게 집합을 정했느냐는 중요하지 않습니다.
아....! 이해했습니다. 정말 감사합니다!
저도 그것때문에 헤맸네요.....ㅎㅎ
댓글을 작성하려면 로그인해야 합니다.
zagame 7년 전
1. 서류심사 성적을 기준으로 Heap sorting을 합니다.(오름차순으로) = fGradeSort[]
2. 맨 처음 std = fGradeSort[1]로 잡아놓고, 그 다음 부터 fGradeSort[]를 N까지 돌면서 std의면접 성적(sGrade)보다 더 작다면 cnt++을 합니다. 그리고 std는 그 순간 fGradeSort[i]로 바꿔줍니다.
3. 다시 말해, 서류 심사 성적 오름차순으로 정리 후 면접심사 점수가 이전 사람보다 좋다면(=fGrade 값이 작다면) 추가 가능 하므로 cnt++ 하는 구조입니다.
맨처음엔 위와 같은 생각으로 코딩하여 맞았다고 나왔는데, 가만 생각 해보니
1 4
2 7
3 6
4 5
5 3
6 2
7 1
이와 같은 input이 있을 경우, 위 알고리즘 대로 한다면 맨처음 기준이 <1, 4> 로 잡히기 때문에 결과값은 4가 나오게 됩니다. 집합은 이렇게 구성 되겠죠..?<(1,4), (5,3), (6,2), (7,1)>
근데 생각해보면, 최대 사원 수 이므로 <(2,7), (3,6), (4,5), (5,3), (6,2), (7,1)>의 집합이 최대로써 결과값 6이 답이 아닌가요....?