leedh2004   4년 전

다음 문제는 예상등수 최소화를 하는 건데..

제가 푼 방법은 처음에 예상등수로 선택되지 않은 등수를 스택에 쌓습니다. (top이 제일 작아야함)

그 다음에 배열을 한 번 예상등수를 sort 해주고,

1. 예상등수를 i라 할때 i 등수를 누군가 선점하지 않았다면 배정해주고 넘어갑니다.

2. i등수를 누군가에게 선점당했다면, stack에서 top() 에 있는 등수를 선점합니다.


이런식으로 푸는 과정에서 선점하는 배열을 chk 배열을 이용했습니다.

그런데 계속 틀렸습니다가 떠서 멘붕으로 하나씩 고치던 중에, memset(chk, 0, sizeof(chk)) 를 for문으로 하나씩 0을 넣으니까 맞았습니다가 뜨더군요..

제 생각에는 어차피 다 0 초기화 하는건데 왜 memset 을 썼을 때 틀렸습니다가 떴는지 이해가 안됩니다 ㅠㅠ

코드 주석처리 하겠습니다.

ekzmzm79   4년 전

//memset(chk, 0, sizeof(chk)); // 이렇게하면 틀렸습니다..

for(int i=1; i<=n; i++) chk[i] = 0; // 이렇게 하면 정답처리 됨..?

초기화 시키는 범위가 다르네요.

djm03178   4년 전

등수는 n과 관계 없이 50만 이하이기 때문에 둘의 동작은 서로 다릅니다. memset은 무조건 50만을 전부 초기화하고, for문은 1부터 n까지만 초기화합니다.

leedh2004   4년 전

아.. 5명 밖에 없는데 예상등수가 50만일수도 있는건가요? 이상한 학생이네요.. ㅠㅠ

leedh2004   4년 전

다음처럼 하니 memset도 맞네요. 감사합니다!

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