목차
문제링크 :
https://www.acmicpc.net/problem/1339
1339번: 단어 수학
첫째 줄에 단어의 개수 N(1 ≤ N ≤ 10)이 주어진다. 둘째 줄부터 N개의 줄에 단어가 한 줄에 하나씩 주어진다. 단어는 알파벳 대문자로만 이루어져있다. 모든 단어에 포함되어 있는 알파벳은 최대
www.acmicpc.net
문제 :
# 1339_단어수학
***
## 문제 설명
민식이는 수학학원에서 단어 수학 문제를 푸는 숙제를 받았다.
단어 수학 문제는 N개의 단어로 이루어져 있으며, 각 단어는 알파벳 대문자로만 이루어져 있다.
이때, 각 알파벳 대문자를 0부터 9까지의 숫자 중 하나로 바꿔서 N개의 수를 합하는 문제이다.
같은 알파벳은 같은 숫자로 바꿔야 하며, 두 개 이상의 알파벳이 같은 숫자로 바뀌어지면 안 된다.
예를 들어, GCF + ACDEB를 계산한다고 할 때, A = 9, B = 4, C = 8, D = 6, E = 5, F = 3, G = 7로 결정한다면,
두 수의 합은 99437이 되어서 최대가 될 것이다.
N개의 단어가 주어졌을 때, 그 수의 합을 최대로 만드는 프로그램을 작성하시오.
## 입력
첫째 줄에 단어의 개수 N(1 ≤ N ≤ 10)이 주어진다.
둘째 줄부터 N개의 줄에 단어가 한 줄에 하나씩 주어진다. 단어는 알파벳 대문자로만 이루어져있다.
모든 단어에 포함되어 있는 알파벳은 최대 10개이고, 수의 최대 길이는 8이다.
서로 다른 문자는 서로 다른 숫자를 나타낸다.
## 출력
첫째 줄에 주어진 단어의 합의 최댓값을 출력한다.
### 예제입력1
```
2
AAA
AAA
```
### 예제 출력 1
1998
### 예제 입력 2
```
2
GCF
ACDEB
```
### 예제 출력 2
99437
### 예제 입력 3
```
10
A
B
C
D
E
F
G
H
I
J
```
### 예제 출력 3
45
풀이과정
내 풀이
1. 대문자 알파벳(A-Z)을 키로 가지고 있는 딕셔너리 생성 → value값으로 자릿수 저장
ex. abc → dict[’A’] = 100 , dict[’B’] = 10 , dict[’C’] = 1
2. 딕셔너리에 저장된 value가 가장 큰순서대로, 9~0 부여.
3. 입력받은 문자열을 딕셔너리에 자장된 값과 1:1 매치.
import sys
num = int(sys.stdin.readline())
alpha_dict = {chr(65+i):0 for i in range(26)}
lst = []
for _ in range(num):
target=sys.stdin.readline()[:-1].upper()
lst.append(target)
for j in range(len(target)):
alpha_dict[target[-1-j]] += (10**j)
sorted_dict = sorted(alpha_dict.items(), key=lambda x: x[1], reverse=True)
for i in range(10):
alpha_dict[sorted_dict[i][0]] = 9-i
answer = 0
for i in lst:
tmp = list(i)
for j in range(len(i)):
tmp[j] = str(alpha_dict[tmp[j]])
print(int("".join(tmp)))
answer += int("".join(tmp))
print(answer)
다른사람 풀이 1
1. dict.get()[# dictionary.get() : .get( 키 , 키가 없을경우 출력할 값 )] 함수 사용해서 입력된 문자의 자릿수값 누적
2. 자릿수값 * (9 - idx) 해서 결과값 누적
import sys
input = sys.stdin.readline
N = int(input())
alpha = dict()
for _ in range(N):
word = input().rstrip()
for i, ch in enumerate(word):
idx = len(word) - i
alpha[ch] = alpha.get(ch, 0) + 10**(idx-1)
ans = 0
for idx, v in enumerate(sorted(alpha.values(), reverse=True)):
now = (9-idx) * v
ans += now
print(ans)
𝚂𝚘𝚞𝚛𝚌𝚎 𝚌𝚘𝚍𝚎
https://github.com/xnsl291/Algorithms-study/tree/main/BaekJoon/py/Gold4/1339_%EB%8B%A8%EC%96%B4%EC%88%98%ED%95%99Algorithms-study/BaekJoon/py/Gold4/1339_단어수학 at main · xnsl291/Algorithms-study
GitHub - xnsl291/Algorithms-study: 알고리즘 공부하며 풀었던 코드들을 업로드 하는 곳
알고리즘 공부하며 풀었던 코드들을 업로드 하는 곳 . Contribute to xnsl291/Algorithms-study development by creating an account on GitHub.
github.com
'ALGORITHMS > SOLUTION' 카테고리의 다른 글
[프로그래머스:PYTHON] 공던지기 (0) | 2023.05.24 |
---|---|
[프로그래머스: PYTHON] 배열회전시키기 (0) | 2023.05.24 |
[백준:JAVA] 단어수학 (0) | 2023.05.23 |
[백준] 1004_어린왕자 (0) | 2023.02.20 |
[프로그래머스] 3진법 뒤집기 (0) | 2023.01.01 |