Post

[BAEKJOON] 1009번 분산처리

1. 문제

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

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

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

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

2. 입력

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

3. 출력

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

4. 해결

코드를 제출할 때 마다 시간이 초과되는 문제가 있어서 처리 시간을 줄일 수 있는 방법을 찾아서 적용해 보았다.

사용자에게 값을 입력 받을 때 input()이 아닌stdin.readline()을 사용하는 것이 좀 더 처리 시간을 줄일 수 있다고 하여 stdin.readline()을 이용하여 테스트 케이스를 입력 받고 map을 통해 int 형으로 변환하여 list를 만들었다.

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
32
33
34
35
36
37
38
39
from sys import stdin


nums = {
    0:1,
    1:1,
    2:4,
    3:4,
    4:2,
    5:1,
    6:1,
    7:4,
    8:4,
    9:2
}
 
T = int(stdin.readline())
cases = []

for _ in range(T):
    cases.append(list(map(int, stdin.readline().split(" "))))

results = []
for case in cases:
    a = case[0] % 10
    b = nums[a] if (case[1] % nums[a]) == 0 else (case[1] % nums[a])

    if a == 0:
        results.append(10)
    elif nums[a] == 1:
        results.append(a)
    else:
        results.append((a ** b) % 10)


for result in results:
    print(result)

5. 후기

  1. 코딩테스트 문제 해결하는데 반나절이 걸리니까 진이 다 빠짐
  2. 다른 사람이 작성한 코드랑 비교해 봤을 때 쓸데없는 코드가 너무 많은 것 같음
  3. 코딩테스트 문제를 자주 풀어봐야 할 것 같음
This post is licensed under CC BY 4.0 by the author.