1-0 질문드립니다
218
작성한 질문수 6
안녕하세요 선생님.
위 링크는 선생님이 짜주신 코드 그대로입니다. 다름이 아니라
처음에 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 해설 강의에도 해당내용을 자세하게 설명하고 있으니 참고부탁드립니다.
감사합니다.
1-E질문입니다!
0
518
2
3-L 틀린 부분 피드백 부탁드립니다.
0
822
2
1-A문제 순열재귀함수 질문입니다.
0
385
1
1-A 일곱난쟁이문제입니다
0
457
1
문제 풀 때 방향성에 대해
0
801
1
맥에서 vs code로 실행 관련 질문입니다
0
523
1
17071번 메모리 초과
0
386
1
1-C질문입니다!
0
422
2
2-B BFS 시간초과질문
0
630
2
1-O 13번 라인
0
442
1
6-J 놀이공원 문제 질문
0
381
1
구현관련 질문
0
484
1
강의 교안
0
320
1
실력을 더 올리고나서 강의를 보는 것이 맞을까요?
0
545
1
안녕하세요! 재귀함수에 관해서 질문드립니다
0
536
1
1-K
0
473
2
3-G번 질문있습니다.
1
474
3
3-C 실행 시간 질문드립니다.
0
494
1
4-A 문제 풀이 질문있습니다.
0
590
2
비트마스킹 연산자 "1의 보수" 영문 표기법
0
435
1
격자탐색 문제에서 BFS 시간복잡도 질문드립니다.
0
334
1
3-O go 함수 질문 드립니다.
1
448
2
4-A 출력 질문
0
305
1
1주차 1-O 질문드립니다
0
259
1





