inflearn logo
강의

Khóa học

Chia sẻ kiến thức

Hoàn thành C++ Coding Test trong 10 tuần | Thuật toán Coding Test

1-N 문제 질문입니다. (+ 채점오류)

2

naleesu20149604

3 câu hỏi đã được viết

0

#include <bits/stdc++.h>
using namespace std;
#define ll long long

ll A, B, C, R;
stack<ll> st;

int main() {

    cin >> A >> B >> C;

    while (B != 1) {
        A %= C;
        if (B % 2 == 1) {
            st.push(A);
        }

        A = (A * A) % C;

        B = B / 2;
    }

    A %= C;

    while (!st.empty()) {
        ll i = st.top();
        st.pop();
        A = (A*i) % C;
    }

    cout << A;

    return 0;
}

안녕하세요. 큰돌님. 질문이 있어서 글을 남기게 되었습니다.
테스트 #1인 [10 11 12]에 대해서만 시간 초과 오류가 발생합니다. (로컬에서 시도했을때는 정상 출력되는 것을 확인했습니다.)
하지만, 왜 시간 초과가 발생하는 지 이유를 알지 못하겠습니다.
위 코드 방식대로라면 반복문이 3번에 끝나게 된다고 생각하는데, 무엇이 잘못된 부분인지 알려주시면 감사할 것 같습니다.

감사합니다.


+++) 9/14, 18:49 방금 확인해봤는데, 정답 코드 그대로 제출해도 똑같이 시간초과가 납니다.! (채점서버도 최신으로 업데이트 해봤습니다.!)

c++ 코딩-테스트

Câu trả lời 1

0

communityai8509

안녕하세요, 인프런 AI 인턴입니다. 이승헌님.

제시하신 입력 10 11 12에서는 B가 다음과 같이 변하므로 반복문이 정상적으로 종료됩니다.

B = 11 → 5 → 2 → 1

따라서 해당 입력만으로는 무한 반복이 발생하지 않습니다. 다만 현재 코드는 while (B != 1) 조건을 사용하고 있어, 만약 B0으로 들어오면 다음과 같이 계속 0에 머무르게 됩니다.

B = 0
B / 2 = 0

즉, B가 0이 될 가능성까지 고려한다면 다음처럼 B > 0을 조건으로 사용하는 것이 더 안전합니다.

ll result = 1;

while (B > 0) {
    A %= C;

    if (B % 2 == 1) {
        result = (result * A) % C;
    }

    A = (A * A) % C;
    B /= 2;
}

cout << result;

또한 현재 코드처럼 홀수인 지수에서 사용할 A를 스택에 저장하는 방식도 원리상 동작할 수 있지만, 결과를 별도의 result 변수에 바로 곱하는 방식이 더 직관적이고 오류 가능성이 적습니다.

거듭제곱을 분할 정복으로 계산할 때는 홀수인 경우 A를 한 번 더 곱하고, 매 단계마다 % C를 적용해야 합니다. 이와 관련된 기존 답변은 아래 게시글에서 확인하실 수 있습니다.

현재 입력 10 11 12만으로는 반복문이 3회 실행되므로, 실제 채점에서 시간 초과가 발생한다면 제출한 코드와 질문에 첨부한 코드가 동일한지, 그리고 채점 데이터에서 B = 0이 입력될 수 있는지 확인해 보시는 것이 좋습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

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

0

39

2

직장인 코테 합격 공부방법 문의

0

46

2

코딩살구클럽 가입 방법

0

51

2

6-H 체점 관련 질문

0

42

1

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

0

71

2

삼성 s직군

0

65

1

삼성 코테 없어짐

0

145

1

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

0

65

2

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

0

56

2

5-S 테스트 케이스 질문

0

58

2

코살 문제풀이 환경

0

72

2

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

0

58

1

추천 추가문제들

0

54

2

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

0

70

2

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

0

59

2

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

0

54

2

4-H 질문드립니다.

0

50

2

1-K 질문드립니다.

0

60

2

대기업 인적성 시험 질문

0

60

2

4-C 질문드립니다

0

55

2

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

0

46

1

코테 준비 질문

0

71

1

살구클럽가입 요청드려요

0

56

2

1-I 문제 질문

0

54

2