https://www.acmicpc.net/problem/1339
문제 해석
대문자 알파벳으로 이루어진 단어가 N개 주어진다. 해당 알파벳의 종류는 10개 이하이며 같은 알파벳은 같은 숫자를 대입할 때, 주어진 알파벳을 모두 더해 가장 큰 수가 나오는 값을 구하는 문제이다.
코드
input = __import__('sys').stdin.readline
n = int(input())
# 아스키 코드로 변환해 해당 값에 크기를 저장한 배열
arr = [0] * 30
for _ in range(n):
s = input().strip()
s = s[::-1]
# 아스키 값으로 변환한 값을 인덱스로 지정해 arr 리스트에 크기만큼 더하기
for i in range(len(s)):
al = s[i]
arr[(ord(al)-ord('A'))] += 10 ** i
# 오름차순 정렬하여 9부터 1씩 감소시켜 곱해주기
# 알파벳의 종류는 최대 10개 이므로 10번의 연산만 해주면 된다.
arr = sorted(arr, reverse = True)
cnt = 9
for i in range(10):
arr[i] *= cnt
cnt -= 1
# 모두 더한값이 정답
print(sum(arr))
문제 풀이
1. 주어진 단어의 알파벳을 아스키 코드로 변환하여 해당 자릿수 값을 저장. ABC가 주어지면 100A + 10B + C 이므로
각각 arr배열에 인덱스에 맞게 100, 10, 1을 더해주기.
2. arr 배열을 오름차순 정렬
3. 정렬된 배열을 9부터 차례대로 곱해주기
4. 해당 배열을 모두 더한 값이 정답.
'알고리즘 > BOJ' 카테고리의 다른 글
[백준/파이썬] 16236번 아기 상어 (0) | 2022.08.01 |
---|---|
[백준/파이썬] 16953번 A → B (0) | 2022.08.01 |
[BOJ/python] 1439번 뒤집기 (0) | 2022.07.30 |
[BOJ/python] 1946번 신입 사원 (0) | 2022.07.30 |
[BOJ/python] 1931번 회의실 배정 (0) | 2022.07.30 |