inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

1-0 질문드립니다

218

상훈

작성한 질문수 6

0

안녕하세요 선생님.

공유 소스 보기 (acmicpc.net)

위 링크는 선생님이 짜주신 코드 그대로입니다. 다름이 아니라

처음에 cnt가 1이므로 while문에 들어가면 else문에 의해서 cnt가 11이 되고

cnt %=n에 의해서 만약 n이 3이라고 가정을 하면 cnt = 2가 되는 것 아닌가요??

11 % 3 = 2니까요... 그러면 그 다음 cnt = cnt* 10 + 1에 의해서 cnt = 21이 된다고 생각하는데 왜 11, 111, 1111...이렇게 올라갈 수 있는지 모르겠습니다

C++ 코테 준비 같이 해요!

답변 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 해설 강의에도 해당내용을 자세하게 설명하고 있으니 참고부탁드립니다.

감사합니다.

 

0

상훈

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

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