Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 1670
- 백준12015
- 카카오 서류전형
- 개발자 면접
- 카카오 자기소개서
- 기술면접
- 카카오 인턴
- 단어수학
- 최장증가수열
- LIS
- Longest Increasing Subsequence
- 2228
- 구간나누기
- 백준11053
- 정상회담2
- 파이썬
- 2629
- 카카오
- Python
- 2482
- 여름인턴십
- 알고리즘
- 백준12738
- LIS 알고리즘
- 인턴십 면접
- 카카오 면접
- 카카오 인턴십
- 백준
- 가장긴증가하는 부분수열
- DP
Archives
- Today
- Total
프로그래밍에 대한 고찰 및 생각
[알고리즘][1][백준_1339][Python3] - 단어 수학 본문
문제이해
이 문제의 포인트는 단어의 자릿수에 따라 해당 알파벳의 파워가 달라진다는 것이다.
예를 들어
GCF + ACDEB 의 경우
ACDEB라는 단어는 5글자로 A,C,D,E,B에 각각 9,8,7,6,5 를 대입해주면
98765 라는 숫자가 나온다.
즉 A에는 9를 넣고 B에는 5를 넣었는데 결론적으로
A = 90000 B = 5가 된 셈이다.
즉 단어의 길이가 길면서 앞쪽에 있는 알파벳들이 가지는 영향력이 크다는 의미이다.
따라서 ACDEB라는 단어가 주어졌을때 각각의 알파벳이 0~9중에 어떤 숫자를 배정받게 될지는 모르지만 확실한것은
각각 배정받은 숫자에서
A는 10000배의
C는 1000배의
D는 100배의
E는 10배의
B는 그 숫자만큼의 영향력(전체 합의 수치를 바꿔주는)을 가지게 된다.
알고리즘 전략
따라서 단어들이 주어졌을 때 각각의 알파벳들이 가지는 영향력의 크기들을 모두 더해서 배열에 저장해놓은뒤 그 영향력이 가장 큰 순서대로 9,8,7,6... 을 배정해주고 그 최종 합을 구해주면 그 답이 수의 합을 최대로 만드는 숫자가 될것이다.
n = int(input(""))
arr = []
answer = []
for i in range(0,100):
answer.append(0)
for i in range(0,n):
x = input("")
arr.append(x)
# 단어의 위치에 따라 각각의 알파벳들의 영향력들을 누적해서 배열에 저장해준다
for i in range(0,n):
for j in range(0,len(arr[i])):
answer[ord(arr[i][j])] = answer[ord(arr[i][j])] + pow(10,len(arr[i]) -j -1)
ans = []
for i in range(0,100):
if(answer[i] != 0):
ans.append(answer[i])
# 최종적으로 등장했던 알파벳들의 영향력을 큰 순서대로 정렬해서 9,8,7.. 순서대로 곱한값들의 합을 출력한다
ans.sort(reverse=True)
count = 9
final = 0
for i in range(0,len(ans)):
final = final + ans[i]*count
count = count - 1
print(final)
사실 이 문제에서는 N개의 단어들의 수의 합을 최대로 만드는 프로그램을 만드는것이기 때문에 최종적으로 최대합값만 출력하면된다.
따라서 어떤 알파벳에 어떤 숫자를 배정했는지는 궁금하지 않다.
따라서 마지막 sort부분부터 각각의 알바펫들이 가진 영향력들만 가지고(각각에 해당하는 알파벳이 무엇인지 모른채로) 최종 답을 도출하게 된다.
'알고리즘 > 백준' 카테고리의 다른 글
[알고리즘][6][백준_1670][Python3] - 정상 회담 2 (0) | 2020.02.06 |
---|---|
[알고리즘][5][백준_1103][Python3] - 게임 (0) | 2020.02.02 |
[알고리즘][4][백준_2482][Python3] - 색상환 (0) | 2020.01.15 |
[알고리즘][3][백준_2228][Python3] - 구간 나누기 (0) | 2020.01.15 |
[알고리즘][2][백준_2629][Python3] - 양팔저울 (1) | 2020.01.14 |