n = int(input())
num = [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
dict_data = {'A': 0, 'B': 0, 'C': 0, 'D': 0, 'E': 0, 'F': 0, 'G': 0, 'H': 0, 'I': 0, 'J': 0
, 'K': 0, 'L': 0, 'M': 0, 'N': 0, 'O': 0, 'P': 0, 'Q': 0, 'R': 0, 'S': 0, 'T': 0, 'U': 0
, 'V': 0, 'W': 0, 'X': 0, 'Y': 0, 'Z': 0}
data = []
for _ in range(n):
data.append(input())
data = sorted(data, key=lambda x: len(x), reverse=True)
for i in data:
for j in i:
if dict_data[j] == 0:
dict_data[j] = num.pop(0)
result = []
for i in data:
tmp = ''
for j in i:
tmp += str(dict_data[j])
result.append(int(tmp))
print(sum(result))
최초 코드
n = int(input())
num = [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
dict_data = {'A': -1, 'B': -1, 'C': -1, 'D': -1, 'E': -1, 'F': -1, 'G': -1, 'H': -1, 'I': -1, 'J': -1
, 'K': -1, 'L': -1, 'M': -1, 'N': -1, 'O': -1, 'P': -1, 'Q': -1, 'R': -1, 'S': -1, 'T': -1, 'U': -1
, 'V': -1, 'W': -1, 'X': -1, 'Y': -1, 'Z': -1, '!': 0}
data = []
for _ in range(n):
data.append(input())
data = sorted(data, key=lambda x: len(x), reverse=True)
max_len = len(data[0])
for i in range(len(data)):
if len(data[i]) != max_len:
tmp = max_len - len(data[i])
for _ in range(tmp):
data[i] = '!' + data[i]
for i in range(max_len):
for j in range(len(data)):
if data[j][i] != '!':
if dict_data[data[j][i]] == -1:
dict_data[data[j][i]] = num.pop(0)
result = 0
for i in range(max_len):
for j in range(len(data)):
print(dict_data[data[j][i]] * (10 ** (max_len - i - 1)))
result += dict_data[data[j][i]] * (10 ** (max_len - i - 1))
print(result)
두번째 코드
n = int(input())
result = 0
num = [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
dict_data = {'A': 0, 'B': 0, 'C': 0, 'D': 0, 'E': 0, 'F': 0, 'G': 0, 'H': 0, 'I': 0, 'J': 0
, 'K': 0, 'L': 0, 'M': 0, 'N': 0, 'O': 0, 'P': 0, 'Q': 0, 'R': 0, 'S': 0, 'T': 0, 'U': 0
, 'V': 0, 'W': 0, 'X': 0, 'Y': 0, 'Z': 0, '!': 0}
data = []
for _ in range(n):
data.append(input())
data = sorted(data, key=lambda x: len(x), reverse=True)
max_len = len(data[0])
for i in range(len(data)):
if len(data[i]) != max_len:
tmp = max_len - len(data[i])
for _ in range(tmp):
data[i] = '!' + data[i]
for i in range(len(data)):
for j in range(max_len):
dict_data[data[i][j]] += (10 ** (max_len - j - 1))
dict_data['!'] = 0
weights = []
for i in dict_data.values():
if i != 0:
weights.append(i)
weights.sort(reverse= True)
for i in weights:
result += i * num.pop(0)
print(result)
최종 코드
매우 고단했던 문제.. 주어진 문자의 각 자리수를 맞추어
해당 자리수에 맞게 차례로 큰 숫자부터 부여하며 동시에 연산하려 했으나,
abb
bb
bb
bb
bb
bb
bb
bb
등의 input에 에러가 발생된다.
따라서 코드를 아예 전환하여 각 알파벳별로 가중치를 두었다(자리의 수에 따라)
그 가중치를 기준으로 큰 숫자부터 부여하여 계산하니 해결되었다.
문제를 보고 풀이를 도출할 수 있는 사고력을 길러야 한다는 생각이 들었다.
배움이 모자라니 시야가 좁아진다.
다양한 풀이와 더 나은 코드를 위해서는 더 열심히 노력해야한다.
풀었다는 사실에 안주하지 말자. 더 나은 코드로 다시 한번 풀어 내 것으로 만들자.
'백준 알고리즘 (Baekjoon Algorithm)' 카테고리의 다른 글
[파이썬] 백준 알고리즘 No.1439 뒤집기 (0) | 2021.12.08 |
---|---|
[파이썬] 백준 알고리즘 No.1715 카드 정렬하기 (0) | 2021.12.07 |
[파이썬] 백준 알고리즘 No.4796 캠핑 (0) | 2021.12.06 |
[파이썬] 백준 알고리즘 No.1946 신입 사원 (0) | 2021.12.05 |
[파이썬] 백준 알고리즘 No.10610 30 (0) | 2021.12.05 |