zynny   2년 전

비교 부분에서 잘못된 것 같은데 너무 많이 비교가 됩니다. 다른 질문 참고해서 생각해보았는데 잘 모르겠습니다...

choko100   2년 전

안녕하세요, 위의 코드에서 num 변수를 이용하여 최종적으로 업데이트하고 싶었던 것은 result 였던 것으로 보입니다.

b[l] == b[k] 인 경우는 중복인 경우인데, 이런 경우를 답으로 출력하면 다 42의 배수인 경우 오히려 전부다 더해진 값이 나오게 됩니다. (19번째 라인)

그래서 중복인 경우를 체크하는 용도로 num 을 사용하고 num 이 체크되면 result 를 업데이트 하지 않는 것으로 쓰는 것이 맞을 것 같습니다.

또 한가지 확인해야할 부분은 17 번째라인부터, k 는 1부터 10까지 확인하고, 이에 대한 비교 대상을 1부터 k 까지로 확인하고 있는데, 그러면 1의 경우에 1, 2의 경우에 1부터 2, 3의 경우에 1, 2, 3, 4의 경우에 1, 2, 3, 4 이렇게 되므로 전체를 비교할 수 없게 됩니다. 예를 들어 내가 1이면 나머지는 2부터 10까지 보면서 동일한 수가 있는지를 찾아야하며, 2의 경우에는 3부터 10까지 보면서 동일한 수가 있는지 찾아봐야합니다. (1과 2는 아까 1을 가지고 비교했을 때 중복 여부를 확인하게 됩니다)

그래서 이 두 가지를 고려하면 질문자님의 코드 17라인 ~ 23 라인은 이런 식으로 쓰시고 싶었던 게 아닌가 싶습니다.

for (k = 1; k <= 10; k++)
{
    num = 0;
    for (l = k + 1; l <= 10; l++)
    {
        if (b[k] == b[l])
            num++;
    }
    if (num == 0)
        result++;
}

+ 이 코드를 사용하면 출력을 result로 해야합니다. (25라인)

printf("%d\n", result); // 출력

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