View

 

# 문제 링크: https://www.acmicpc.net/problem/1009

 

 

1009번: 분산처리

입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다. 그 다음 줄부터 각각의 테스트 케이스에 대해 정수 a와 b가 주어진다. (1 ≤ a < 100, 1 ≤ b < 1,000,000)

www.acmicpc.net

 
 


# 문제

 

두 개의 자연수 A, B 가 주어질 때 A의 B제곱을 구하고, 그 결과를 10으로 나눈 나머지를 출력하는 문제입니다.
 
쉽게 생각해 보면, 우리가 알고 있는 거듭제곱의 공식을 이용하여 풀 수 있습니다.
그러나 문제에서는 결괏값을 10으로 나눈 나머지를 출력해야 하므로,
계산 과정에서 10으로 나눈 나머지를 저장해 가며 계산을 진행해야 합니다.
 
 


# 접근 방법

 
 
1. 테스트 케이스 개수 T 입력받기
2. T번 반복하게 하는 반복문 정의
3. 밑수 A와 지수 B 입력받기
4. 초기값을 1로 설정하고 B번 반복하게 정의
5. 현재 값에 A를 곱한 뒤 10으로 나눈 나머지를 구하기
6. 계산된 값을 현재 값으로 설정
7. 최종 결과 출력
 
 
※ 이 문제에서 주의해야 할 점 ※
 
1. 10번 컴퓨터:
10번 컴퓨터는 10의 거듭제곱일 때 밖에 나오지 않으므로,
결과가 0일 때는 10을 출력하게 하면 됩니다.
 
2. 시간제한:
이 문제의 시간제한은 1초이기에 코드를 비효율적으로 작성한다면 시간 초과로 오답처리 될 가능성이 있습니다.
 
 


# 풀이

 
[C++] 소스코드

#include <iostream>
using namespace std;

int main() {
    int t;
    cin >> t;		// 테스트 케이스 개수 입력 받기

    for (int i = 0; i < t; i++) 
    {
        int a, b, result = 1;		// 결과값을 1로 초기화 시켜줘야 값을 매번 저장해가며 계산 가능
        cin >> a >> b;

        for (int j = 0; j < b; j++) 
        {
            result = (result * a) % 10;		// 거듭제곱한 결과값 저장
        }

        if (result == 0) 
        {
            cout << 10 << endl;		// 10의 거듭제곱의 경우
        }
        else 
        {
            cout << result << endl;
        }
    }
    return 0;
}

# 성능

 

 
 


# 정리

 
수학, 구현 알고리즘에 속하는 문제입니다.
 
밑수 A와 지수 B가 모두 1 이상으로 주어지는 문제여서 크게 생각할 건 없었던 것 같습니다.
 
나머지 연산자(%)를 활용하여 푸는 간단한 문제였습니다.
 
 

728x90
Share Link
reply
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31