celestial   3년 전

정답은 맞았는데...질문이 있습니다. 


for문 안에 

/*for (int i = 0; i < N; i++) {
int tmp;
scanf("%d", &tmp);
printf("%d\n", dp[tmp]);
}*/

이런식으로 쓰면 맞고 

//배열을 받아서 처리하면 왜 틀리나요???
int input[12];
for (int i = 0; i < N; i++) {
int tmp;
scanf("%d", &tmp);
input[tmp] = 1;
}
for (int i = 1; i < 12; i++) {
if (input[i] == 1) {
printf("%d\n", dp[i]);
}
}

배열을 받아서 일괄적으로 처리하면 왜 틀리는지 궁금합니다.

djm03178   3년 전

입력은 증가하는 순서대로 주어진다는 보장이 없습니다. 큰 수부터 먼저 물어보면 틀리게 됩니다.

그리고 input 배열이 초기화되어있지 않아 1을 넣지 않은 수에도 우연히 1이 들어있을 수가 있습니다.

또한 이 문제에서는 그런 입력은 없어 보이지만 같은 수를 여러 번 물어보는 케이스가 있을 수도 있습니다.

celestial   3년 전

아아 그렇네요!!! 입력 순서와 상관없이 가장 먼저 만나는 1에 대한 결과를 리턴하니까 그럴 수 있겠군요!!

감사합니다 ㅎㅎ 도움되었습니다! 

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