inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

1주차 개념 #1. 시간복잡도(time complexity)

재귀함수 질문있습니다.

234

zzzzz

작성한 질문수 192

0

선생님께서 유튜브에 올리신거같은데 인프런에서는 어느강의 인지 몰라서 여기부분에다 올립니다.

https://www.youtube.com/watch?v=mzLx_NWpuSY

8분 42초에는 (a*a*a)%c하게 되면 a값이 2억일때 longlong에서도 범위가 넘어가서 (a%c*a%c*a%c)를 하셔야 된다고 했는데 9분9초에서 코드를 보니까 ret=(ret*ret)%c 가 적혀있는데요. (ret*ret)%c부분에서 (ret%c*ret%c)이렇게 해야 하는거 아닌가요?

그리고 10번줄에 if(2)도 true인데 if(1)홀수일떄만 작동된다고 하셨는데 짝수일떄도 작동되는거 아닌가요?

c++ 코딩-테스트

답변 1

0

큰돌

안녕하세요 ekek님 ㅎㅎ

1 - N 곱셈문제입니다.

#include<bits/stdc++.h> 
using namespace std;
typedef long long ll;
ll a, b, c;
ll go(ll a, ll b){
    if(b == 1) return a % c;
    ll ret = go(a, b / 2);
    ret = (ret * ret) % c;
    if(b % 2)ret = (ret * a)% c;
    return ret;
}
int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    cin >> a >> b >> c;
    cout << go(a, b) << "\n";
    return 0;
}

이 코드를 말씀하시는거죠?

 

(ret*ret)%c부분에서 (ret%c*ret%c)

>> 이미 ret은 %c가 먹여져서 리턴을 하게 됩니다. 그렇기 때문에 (ret * ret) % c를 해도 됩니다.

 

그리고 10번줄에 if(2)도 true인데 if(1)홀수일떄만 작동된다고 하셨는데

>> if(2)는 true지만 지금 보시면 모듈러 연산으로 홀수인지를 가리고 있는데요. 만약 2 % 2를 하게 되면 0이 되서 false, 짝수일 때는 작동되지 않습니다.

 

또 질문 있으시면 언제든지 질문 부탁드립니다.

좋은 수강평과 별점 5점은 제가 큰 힘이 됩니다. :)

감사합니다.

강사 큰돌 올림.

1

zzzzz

답변감사합니다.

1번 답변 중

>> 이미 ret은 %c가 먹여져서 리턴을 하게 됩니다. 그렇기 때문에 (ret * ret) % c를 해도 됩니다. 이렇게 답주셨는데요.

이미 ret은 %c가 먹여진다는게 아래코드에서 먹여진다는 건가요? 근데 먹여진다면 %c를 계산하는게 어디인가요?

ll ret = go(a, b / 2);

0

큰돌

안녀하세요 ek님 ㅎㅎ

ll go(ll a, ll b){
    if(b == 1) return a % c;
    ll ret = go(a, b / 2);
    ret = (ret * ret) % c;
    if(b % 2)ret = (ret * a)% c;
    return ret;
}

여기서 go라는 함수의 ret을 보면 계속해서 %c를 해서 return되는 것을 볼 수 있죠?

go 내부의 ret 또한 go의 값을 가져오는 것인데

    ll ret = go(a, b / 2);

 

go라는 함수를 보면 b == 1 일 때는

    if(b == 1) return a % c;

이렇게 %c

ret을 2번 곱할 때도

    ret = (ret * ret) % c;

%c

 

만약 b가 홀수 일 때 다시한번 곱하면서

    if(b % 2)ret = (ret * a)% c;

로 %c를 계속해서 나가는 것을 볼 수 있습니다.

 

이부분들에서 %c가 걸어지고 있습니다.

 

 

또 질문 있으시면 언제든지 질문 부탁드립니다.

좋은 수강평과 별점 5점은 제가 큰 힘이 됩니다. :)

감사합니다.

강사 큰돌 올림.

채점서버 연결 관련 질문입니다

0

18

1

삼성 s직군

0

18

0

삼성 코테 없어짐

0

65

1

코딩살구클럽 가입부탁드립니다

0

39

2

코딩살구클럽 가입 요청 확인부탁드립니다

0

34

2

5-S 테스트 케이스 질문

0

37

2

코살 문제풀이 환경

0

51

2

2 - T 오큰수 문제가 있는 것 같습니다.

0

45

1

추천 추가문제들

0

44

2

프로그래머스 코테 환경 관련해서 질문드립니다.

0

50

2

해당 문제에 대한 채점이 코딩살구클럽에서 올바르게 처리되지 않습니다.

0

44

2

균형 이진 트리 설명 시 높이 숫자

0

33

2

4-H 질문드립니다.

0

37

2

1-K 질문드립니다.

0

43

2

대기업 인적성 시험 질문

0

43

2

4-C 질문드립니다

0

43

2

[수학숙제 / BOJ 2870] 채점 서버 오작동

0

40

1

코테 준비 질문

0

55

1

살구클럽가입 요청드려요

0

41

2

1-I 문제 질문

0

46

2

코딩살구클럽 가입

0

59

2

AI 코딩 도구 사용 시 학습 방법 조언

0

56

2

코딩살구클럽 오류

0

65

2

코살클 [3-F 괄호 추가하기] 프라이빗 9번 제보

0

51

1