728x90
어떻게 풀어야할지는 떠올랐지만 구현을 못 한 문제
딕셔너리는 왜 이렇게 적응이 안되는지 모르겠다
📌 풀이 문제
https://www.acmicpc.net/problem/1339
문제에서 보면 유추할 수 있 듯,
가장 높은 자리 수에 있는 알파벳에 큰 수를 부여해야한다.
또한, 중복되는 알파벳으로 계산될 수 있다는 점도 유의해야한다.
👩💻 풀이방법
0. 요소들을 입력받는다
1. 각 알파벳을 자리수에 맞게 정리한다.
예를 들어 ACDEB = A : 10000, C : 1000, D : 100, E : 10, B : 1 에다가
GCF = G : 100, C : 1010 (위에서 C가 한번 선언 됐으므로), F : 1임을 각각 계산해주어야한다.
그렇게 되면 총 {'G': 100, 'C': 1010, 'F': 1, 'A': 10000, 'D': 100, 'E': 10, 'B': 1} 으로 딕셔너리를 만들 수 있게 된다.
2. 만들어진 딕셔너리의 값을 내림차순으로 정렬한다
이를 내림차순으로 정렬하면 [10000, 1010, 100, 100, 10, 1, 1] 이 될 것이다.
여기서 각 알파벳이 의미하는 숫자는 알 필요가 없으므로 value 값만으로 리스트를 만드면 된다.
3. 앞에서 부터 9, 8, 7,, 을 곱하여 더해준다 (가장 큰 값에 가장 큰 수 곱해주기)
순서대로 9, 8, 7, 6, 5, ... 한 수를 곱해서 answer이 되는 값에 더해주면 된다.
💫 정답 코드
import sys
input=sys.stdin.readline
word_list = []
ans=0
dic={}
#0번
n=int(input())
for _ in range(n):
word_list.append(input().rstrip())
#1번 => {'G': 100, 'C': 1010, 'F': 1, 'A': 10000, 'D': 100, 'E': 10, 'B': 1}
for i in word_list:
cnt=len(i)
for j in i:
if j not in dic:
dic[j]=(10**(cnt-1))
else:
dic[j]+=(10**(cnt-1))
cnt-=1
#2번 => [10000, 1010, 100, 100, 10, 1, 1]
values_lst=list(dic.values())
values_lst.sort(reverse = True)
#3번 => 10000 * 9 + 1010 * 8 + 100 * 7 + 100 * 6 + 10 * 5 + 1 * 4 + 1 * 3
num=9
for i in values_lst:
ans+=i*num
num-=1
#정답 출력
print(ans)
728x90
'ⓒⓞⓓⓘⓝⓖⓣⓔⓢⓣ' 카테고리의 다른 글
[프로그래머스/C언어] 편지 (0) | 2023.10.31 |
---|---|
[백준 / 파이썬] 그림 (1926) (0) | 2023.04.13 |
[프로그래머스 / 파이썬] 디스크 컨트롤러 (0) | 2023.04.11 |
[백준/파이썬] 30 (10610) (0) | 2023.04.11 |
[프로그래머스/파이썬] 소수 찾기 (0) | 2023.04.05 |
댓글