wldnd32   1년 전

예제 2번과 같이 모두 나머지가 0 0 0 0 0 0 0 0 0 0 0 일 때,

19번째 줄에서 첫 사이클에서 -9가 이루어지고 

두번째 사이클(i=1일때)부터 멈춰 주어야 하는데 이러한 상황에서

어떻게 해야 할지 도무지 감이 잡히질 않습니다.

28~31번째 줄은 무시하셔도 됩니다.

mckkk119   1년 전

42로 나눈 나머지는 0 ~ 41입니다.
42칸의 배열을 만들고, 배열의 모든 값을 0으로 초기화한 후
입력값을 받을 때마다 42로 나눈 나머지의 값을 인덱스로 하여 배열에 1을 더해주고
마지막에 0~41까지 배열을 돌면서
그 값이 0이면 그러한 나머지가 한 번도 나온 적이 없는 것이고
1 이상이면 한 번이라도 나온 것이니 count를 증가시키는 방법으로 하면 어떨까요?

sarrin   1년 전

19번째 줄부터 25번째 줄을 보면,

for(a=i+1; a<10; a++)

를 보면 체크해야 될 부분이 이전에 입력되었던 나머지값이 현재 입력되는 값과 같은지인데,

그렇게 되면 체크해야 될 부분은  "k[i+1]부터 k[9]까지"가 아닌, "k[0]부터 k[i-1]까지" 입니다. 

또한, 21번째 줄부터 24번째 줄을 보면, 

if(K[i]==K[a])
{
    count--;
}

이 부분에서, 입력된 값과 같은 값이 이전에 나왔다면 총 count 개수인 10에서 1씩 빼주는 형식으로 코드를 짜신것 같은데,

같은 값이 나오는 순간 count를 빼주고, for문 break를 해주어야 19번줄의 for문을 계속돌아 중복값으로 인해 여러번 count가 빼지는것을 방지 할 수 있습니다.

위에 작성하신 코드대로 작성하실 경우, 위부분들을 유의하여 고치시면 될 것 같습니다! 

wldnd32   1년 전

sarrin

답변 감사합니다. 

break를 추가하는 것에 대해 몰랐던 것에 아직 많은 부족함을 느끼게 되었고 많은 도움이 되었습니다

23번쨰 줄 이후 break 추가하였고

19번쨰 줄의 범위를

for(a=0; a<i-1; a++);로 작성하니

예제 2번의 출력이 2로 나와

a=0; a<i; a++로 작성하니 정답이 되었습니다. 답변 정말 감사합니다

i-1로 넣었을 경우에는 마지막이 K[8]이 되어서 다른 출력이 뜨는 것일까요?

wldnd32   1년 전

mckkk119 


답변 감사합니다!

위 답변의 내용을 이해하던 도중 배열에 1을 더해준다는 뜻이 무슨 의미인지 잘 이해하지 못하겠습니다.


배열 칸 안의 값+1을 의미하는 것일까요?

mckkk119   1년 전

네 맞습니다!

arr[input%42]++; 와 같이 하면 될 것 같습니다

sarrin   1년 전

@wldnd32

답변 늦어서 죄송합니다.

k[0]부터 k[n-1]까지 를 for문으로 체크하기위해서 식을 세울때

for(a=0; a<i-1; a++)
가 아닌,
for(a=0; a<=i-1; a++)

라고 작성하셔야 k의 인덱스 0부터 n-1까지 체크하실 수 있습니다.

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