Skip to content

Commit e4616f1

Browse files
committed
[Gold IV] Title: 단어 수학, Time: 8 ms, Memory: 79516 KB -BaekjoonHub
1 parent 3869cb4 commit e4616f1

2 files changed

Lines changed: 60 additions & 0 deletions

File tree

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
# [Gold IV] 단어 수학 - 1339
2+
3+
[문제 링크](https://www.acmicpc.net/problem/1339)
4+
5+
### 성능 요약
6+
7+
메모리: 79516 KB, 시간: 8 ms
8+
9+
### 분류
10+
11+
그리디 알고리즘
12+
13+
### 제출 일자
14+
15+
2026년 2월 17일 22:22:58
16+
17+
### 문제 설명
18+
19+
<p>민식이는 수학학원에서 단어 수학 문제를 푸는 숙제를 받았다.</p>
20+
21+
<p>단어 수학 문제는 N개의 단어로 이루어져 있으며, 각 단어는 알파벳 대문자로만 이루어져 있다. 이때, 각 알파벳 대문자를 0부터 9까지의 숫자 중 하나로 바꿔서 N개의 수를 합하는 문제이다. 같은 알파벳은 같은 숫자로 바꿔야 하며, 두 개 이상의 알파벳이 같은 숫자로 바뀌어지면 안 된다.</p>
22+
23+
<p>예를 들어, GCF + ACDEB를 계산한다고 할 때, A = 9, B = 4, C = 8, D = 6, E = 5, F = 3, G = 7로 결정한다면, 두 수의 합은 99437이 되어서 최대가 될 것이다.</p>
24+
25+
<p>N개의 단어가 주어졌을 때, 그 수의 합을 최대로 만드는 프로그램을 작성하시오.</p>
26+
27+
### 입력
28+
29+
<p>첫째 줄에 단어의 개수 N(1 ≤ N ≤ 10)이 주어진다. 둘째 줄부터 N개의 줄에 단어가 한 줄에 하나씩 주어진다. 단어는 알파벳 대문자로만 이루어져있다. 모든 단어에 포함되어 있는 알파벳은 최대 10개이고, 수의 최대 길이는 8이다. 서로 다른 문자는 서로 다른 숫자를 나타낸다.</p>
30+
31+
### 출력
32+
33+
<p>첫째 줄에 주어진 단어의 합의 최댓값을 출력한다.</p>
34+
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import Foundation
2+
3+
let N = Int(readLine()!)!
4+
var weight = [Character: Int]()
5+
6+
for _ in 0..<N {
7+
let word = readLine()!
8+
var multiplier = 1
9+
10+
for ch in word.reversed() {
11+
weight[ch, default: 0] += multiplier
12+
multiplier *= 10
13+
}
14+
}
15+
16+
let sorted = weight.sorted { $0.value > $1.value }
17+
18+
var digit = 9
19+
var answer = 0
20+
21+
for (_, w) in sorted {
22+
answer += w * digit
23+
digit -= 1
24+
}
25+
26+
print(answer)

0 commit comments

Comments
 (0)