백준: 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
|
n = 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 = [], []
n = 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학기 때 배우는 수학이라고 하는데 ..
백준에서 쉬운 문제 중 하나인데, 쉽지 않았다..
'공부 > 코딩테스트' 카테고리의 다른 글
백준: 1330번 두 수 비교하기(Python3) (0) | 2022.07.22 |
---|---|
백준: 1271번 엄청난 부자2 (Python3) (0) | 2022.07.22 |
백준: 25083번 새싹 (Python3) (0) | 2022.07.18 |
백준: 2588번 곱셈 (Python3) (0) | 2022.07.18 |
백준: 10430번 나머지 (Python3) (0) | 2022.07.18 |
댓글