포스트

[백준/C] 1009번 분산처리

[백준/C] 1009번 분산처리

문제

  • 재용이는 최신 컴퓨터 10대를 가지고 있다. 어느 날 재용이는 많은 데이터를 처리해야 될 일이 생겨서 각 컴퓨터에 1번부터 10번까지의 번호를 부여하고, 10대의 컴퓨터가 다으모가 같은 방법으로 데이터들을 처리하기로 하였다.
  • 1번 데이터는 1번 컴퓨터, 2번 데이터는 2번 컴퓨터, 3번 데이터는 3번 컴퓨터, …,
  • 10번 데이터는 10번 컴퓨터, 11번 데이터는 11번 컴퓨터, 12번 데이터는 2번 컴퓨터, …
  • 총 데이터의 갯수는 항상 a^b개의 형태로 주어진다. 재용이는 문득 마지막 데이터가 처리될 컴퓨터의 번호가 궁금해졌다. 이를 수행해주는 프로그램을 작성하라.

입력

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

    출력

  • 각 테스트 케이스에 대해 마지막 데이터가 처리되는 컴퓨터의 번호를 출력한다.

    제한

  • 예제 입력

    1
    2
    3
    4
    5
    6
    
    5 2
    1 6
    3 7
    6 2
    7 100
    9 635
    

    출력

    1
    2
    3
    4
    5
    
    1
    7
    6
    1
    9
    

    코드

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
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h> //거듭제곱 pow()함수 사용을 위해서

int main() {
    int T; //테스트 케이스의 개수
    int a, b; //정수 a, b
    int total_data = 0;

    scanf("%d", &T);

    for(int i = 0; i < T; i++) {
        scanf("%d %d", &a, &b);

        total_data = pow(a, b); //데이터의 총 개수는 항상 a^b다.

        int last_com = total_data % 10;

        if(last_com == 0) {
            last_com = 10;
        } else {

        }

        printf("%d\n", last_com);
    }
    return 0;
}

이것이 처음 내가 짠 코드였다.

처음에 1 6, 3 7, 6 2에 대한 입력 값에 출력은 정상적으로 1, 7, 6으로 나왔다.

하지만 7 100, 9 635에서 문제가 발생하였다.

나는 pow()함수가 부동소수점(double)을 반환하기 때문에 큰 수에 대해서 문제를 일으키고 있었다.

for문으로 수정하였고 이 또한 해결책이 되지 못했다.

다시 한 번 내가 짠 코드를 확인해보니,

1
total_data *= a;

이 부분에서 오버플로우가 발생하여 이상한 값으로 출력이 되고 있었다.

코드를 개선하기 위해서 for문 안에서 %10도 같이 처리를 해줬다.

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
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main() {
    int T; //테스트 케이스의 개수
    int a, b; //정수 a, b

    scanf("%d", &T);

    for(int i = 0; i < T; i++) {
        scanf("%d %d", &a, &b);
        int last_comp = 1;

        for(int j = 0; j < b; j++){
            last_comp = (last_comp * a) % 10;
        }

        if(last_comp == 0) {
            last_comp = 10;
        }

        printf("%d\n", last_comp);
    }
    return 0;
}

문제 링크

백준 1009번: 분산처리

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.