본문 바로가기
공부/코딩테스트

백준: 1009번 분산처리 (Python3)

by 혼밥맨 2022. 7. 18.
반응형

백준: 1009번 분산처리 (Python3)

문제

재용이는 최신 컴퓨터 10대를 가지고 있다. 어느 날 재용이는 많은 데이터를 처리해야 될 일이 생겨서 각 컴퓨터에 1번부터 10번까지의 번호를 부여하고, 10대의 컴퓨터가 다음과 같은 방법으로 데이터들을 처리하기로 하였다.

1번 데이터는 1번 컴퓨터, 2번 데이터는 2번 컴퓨터, 3번 데이터는 3번 컴퓨터, ... ,

10번 데이터는 10번 컴퓨터, 11번 데이터는 1번 컴퓨터, 12번 데이터는 2번 컴퓨터, ...

총 데이터의 개수는 항상 ab개의 형태로 주어진다. 재용이는 문득 마지막 데이터가 처리될 컴퓨터의 번호가 궁금해졌다. 이를 수행해주는 프로그램을 작성하라.

입력

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

출력

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

예제 입력 1 

5
1 6
3 7
6 2
7 100
9 635

예제 출력 1

1
7
6
1
9

시도 01

1
2
3
4
5
6
7
= int(input())
 
for i in range(n):
    a, b = input().split()
    a, b = int(a), int(b)
    
    print( (a ** b) % 10)
cs

지금까지 백준에서 코딩테스트 연습하면서 "채점 중"이었다가 "시간 초과"로 바뀐 것은 처음 본다. 다른 건 몰라도, for loop이 문젠인 건 알것 같다. 문제 이름이 "분산 처리"인 것 만큼 thread를 사용해야 하나 고민했다.

 

시도 02

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
a, b = [], []
= int(input())
 
for i in range(n):
    j, k = input().split()
    a.append(int(j))
    b.append(int(k))
    
for i in range(n):
    base = a[i]%10
    
    if base==0:
        print(10)
    elif base in [1,5,6]:
        print(base)
    elif base in [4,9]:
        if b[i]%2==0:
            print(base**2%10)
        else:
            print(base)
    else:
        if b[i]%4 ==0:
            print(base**4%10)
        else:
            print(base**(b[i]%4)%10)
cs

시도 01에서 여러 차례 바꾸어서 시도해도 런타임 에러가 발생해서, 포기하려다가 구글에서 검색해서 해결했다. 

 

문제는 사실 너무 간단한데 (런타임 에러만 아니라면 말이다), a**b % 10 만 작성하면 될 정도로.

그런데 "거듭제곱의 일의 자리 규칙"이라는 것을 알아야 빠르게 풀 수 있는 문제였다. 

중학교 1학년 1학기 때 배우는 수학이라고 하는데 ..

백준에서 쉬운 문제 중 하나인데, 쉽지 않았다..

반응형

댓글