๐ฆ 36์ง์
1. ๋ฌธ์ ๋งํฌ
2. ์ฝ๋
Python3
31120KB
48ms
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
40
41
42
43
44
45
46
47
48
49
50
51
52
def to_36(number):
global BASE
a = number // 36
b = number % 36
if not a:
return BASE[b]
else:
return to_36(a) + BASE[b]
# 36์ง์
BASE = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
N = int(input())
NUMBERS = []
for i in range(N):
NUMBERS.append(input())
K = int(input())
# ๊ฐ์ค์น ์ด๊ธฐํ
WEIGHT = dict()
for i in range(36):
WEIGHT[BASE[i]] = 0
for i in range(len(NUMBERS)):
number = NUMBERS[i]
# ๊ฐ ์๋ฆฟ์ ๋งํผ ๊ฐ์ค์น ์ฆ๊ฐ (์์ ์๋ฅผ Z ๋ก ๋ฐ๊ฟ์๋ก ๊ฐ์ ๋ ์ปค์ง)
length = len(number);
for j in range(length):
digit = number[j]
WEIGHT[digit] += (35 - int(digit, 36)) * (36 ** (length - j - 1))
# ๊ฐ์ค์น๊ฐ ๋์ ์์ผ๋ก ์ ๋ ฌ ํ K ๊ฐ pick
sorted_weight = sorted(WEIGHT.items(), key= lambda x: -x[1])[:K]
picked = [item[0] for item in sorted_weight]
sum = 0
for i in range(N):
number = NUMBERS[i]
current = ""
for ch in number:
if ch in picked:
current = current + "Z"
else:
current = current + ch
sum += int(current, 36)
print(to_36(sum))
3. ํด์ค
๊ฐ ์๋ฆฟ์ ๋ณ ๊ฐ์ค์น๋ฅผ 36์ ์ ๊ณฑ์ผ๋ก ๋ํด์ค (ํ์ด์ฌ์ biginteger ์ฒ๋ฆฌ ๋๋ถ์ ๊ฐ๋ฅ)
์ด ๋ ์ค์ํ ์ ์ ์์ ์๋ฅผ Z ๋ก ๋ฐ๊ฟจ์ ๋ ์ต๋๊ฐ์ ๊ฐ๊น์์ง๊ธฐ ๋๋ฌธ์
(35 - {ํด๋น ์์ ๊ฐ}) * (36^{์๋ฆฟ์})
๋ผ๋ ์์์ผ๋ก ๊ฐ์ค์น๋ฅผ ๊ตฌํจ
โ Z ์ ๊ฐ์ค์น๋ 0์ด ๋๊ธฐ ๋๋ฌธ์ Z โ Z
๋ก ๋ฐ๊พธ๋ ์ฐ์ฐ์ 36๊ฐ๋ฅผ ๋ชจ๋ ๊ณ ๋ฅผ ๋ ์ด์ธ์๋ ์กด์ฌํ์ง ์์
๊ฐ์ค์น๊ฐ ๊ฐ์ฅ ํฐ ๊ฒ๋ค์ K๊ฐ pick ํด์ Z๋ก ๋ฐ๊พผํ ๋ง์
This post is licensed under CC BY 4.0 by the author.