cent5674   2년 전

1, 2번째 예제는 잘 되는데 3번 예제 출력이 71이라 나오네요. 왜 이런 건가요?

etkor4   2년 전

예제 1번과 2번은 정말 운이 좋았다고 생각이 듭니다.

생각보다 큰 숫자가 나오는 이유는 14번째 줄의 반복문을 12번째 반복문이 또 10번 반복하게 되어

같은 비교를 10번씩 해서 그런 것 같네요.

또한

문제에서는 서로 다른 나머지 개수를 구하라 하였지만 질문자님의 코드는

0이 아닌 나머지 개수를 반복해서 더하고 있습니다.

예제 1번은 모두 다른 나머지라 정답이 나온 것이고 예제 2번은 모두 0이기 때문에 맞은 것이죠.

이중 반복문으로 서로 다른 배열을 비교하기 위해서는 

16번째 줄인 if (num[c] % 42 != num2[c]) 처럼 같은 변수를 넣고 비교보다는

다른 변수로 하는 것이 더 좋을 것 같네요

지금처럼 같은 변수를 할 경우 같은 순서상에 있는(ex) num[0] - num2[0] ...) 것끼리

비교하니 값이 이상해지는 것 같네요

결론

1. 현 구현은 서로 다른 나머지의 개수가 아닌 0이 아닌 나머지 개수를 구하고 있다.

2. 이중 반복문으로 두 배열을 비교 중에 같은 변수를 사용

cent5674   2년 전

이번엔 이렇게 해봤는데 3번 예제가 8이라 나오네요. 제 생각엔 맞는 것 같은데 왜 이런 건가요?

etkor4   2년 전

14번 if문에 printf("%d\n", b);이 부분을 넣어서 확인해 보면 언제 실행되는지 알 수 있습니다.

확인해보면 3번째 반복과 8번째 반복을 제외하고 if문이 실행되는 것을 알 수 있죠.

다시 한번 말씀드리지만 문제에서는 겹치지 않는 나머지 수를 비교하라고 했습니다.

하지만 본 코드는 여전히 0이 아닌 나머지를 구하는 것이죠.

참고로 6번째 줄 int remainder[10] = {};

과 같이 선언한 경우 그 배열은 모두 0으로 되어있는 상태죠.

그래서 14번째 줄의 if (input[b] % 42 != remainder[b])

이 부분은 결국 입력 받은 수를 42로 나눌 때 0이 아닌 경우에 실행해라 라는 if문인것이죠

거기다가 같은 b변수로 두 배열이 돌아가기에

b = 0, input[b] = 39, remainder[b] = 39
b = 1, input[b] = 40, remainder[b] = 40
b = 2, input[b] = 41, remainder[b] = 41
b = 3, input[b] = 42, remainder[b] = 42//나머지 0
b = 4, input[b] = 43, remainder[b] = 1
b = 5, input[b] = 44, remainder[b] = 2
b = 6, input[b] = 82, remainder[b] = 40
b = 7, input[b] = 83, remainder[b] = 41
b = 8, input[b] = 84, remainder[b] = 84//나머지 0
b = 9, input[b] = 85, remainder[b] = 1

b에 순서에 따른 배열은 이렇게 되겠네요.

다시 한번...생각해보시길바랍니다

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