인프런 커뮤니티 질문&답변
1-0 질문드립니다
작성
·
211
0
안녕하세요 선생님.
위 링크는 선생님이 짜주신 코드 그대로입니다. 다름이 아니라
처음에 cnt가 1이므로 while문에 들어가면 else문에 의해서 cnt가 11이 되고
cnt %=n에 의해서 만약 n이 3이라고 가정을 하면 cnt = 2가 되는 것 아닌가요??
11 % 3 = 2니까요... 그러면 그 다음 cnt = cnt* 10 + 1에 의해서 cnt = 21이 된다고 생각하는데 왜 11, 111, 1111...이렇게 올라갈 수 있는지 모르겠습니다
답변 1
1
안녕하세요 상훈님 ㅎㅎ
상훈님 말씀처럼 당연히 2가 됩니다.
제가 디버깅 코드를 달아서 짠 코드를 드립니다. n 이 3일 때는 2, 0, 3이 찍히게 됩니다.
확인 부탁드려요 ㅎ
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int n;
int main(){
while(scanf("%d", &n) != EOF){
int cnt = 1, ret = 1;
while(true){
if(cnt % n == 0){
printf("%d\n", ret);
break;
}else{
cnt = (cnt * 10) + 1;
cnt %= n;
ret++;
}
cout << cnt << "\n";
}
}
return 0;
}
/*
2
0
3
*/저거는 모듈러 연산 법칙을 이해하시면 되는데요.
우리가 결국 찾아야 하는 것은.
if(cnt % n == 0){
앞의 코드가 성립하는 수겠죠? 우리는 1, 11, 111을 만들어서 모듈러 연산을 해서 이 코드가 성립되게 만들수도 있지만. 저 수를 만들지 않고 계속해서 모듈러 연산을 해서 성립하게 할 수 있습니다.
cnt는 계속해서 더해서 만들어지는 수죠?
cnt = (cnt * 10) + 1;
이런식으로요.
모듈러 연산에 따르면
(a + b)% c = a % c + b % c
이 되기 때문에 계속해서 모듈러 연산을 했고 그 결과값으로.
if(cnt % n == 0){
이러한 걸 찾는게 성립이 되는 겁니다.
또한, 1 - O 해설 강의에도 해당내용을 자세하게 설명하고 있으니 참고부탁드립니다.
감사합니다.






네 이제 이해가 되네요 강의 너무 도움됩니다 감사합니다