https://www.acmicpc.net/problem/1339
1339번: 단어 수학
첫째 줄에 단어의 개수 N(1 ≤ N ≤ 10)이 주어진다. 둘째 줄부터 N개의 줄에 단어가 한 줄에 하나씩 주어진다. 단어는 알파벳 대문자로만 이루어져있다. 모든 단어에 포함되어 있는 알파벳은 최대
www.acmicpc.net
풀이
문제를 보았을 때 알 수 있는 힌트
문제를 보고 조합 형식으로 풀어야하나 했지만 큰값만 잘 찾아놓으면 풀수 있는 그리디 문제였다.
자리수가 큰를 찾아서 리스트로 정리해놓는다.
예를 들어 GCF + ACDEB 라고 하면
ACDEB
GCF
여기서 두 값을 더하려 위치에 맞게 값을 넣으면
A = 10000
C = 01010
D = 00100
G = 00100
E = 00010
B = 00001
F = 00001
이렇게 적힌 리스트를 내림차순으로 정렬후 9부터 1까지 내려가며 곱하면 값이 나온다.
A = 10000 * 9 = 90000
C = 1010 * 8 = 8080
D = 100 * 7 = 700
G = 100 * 6 = 600
E = 10 * 5 = 50
B = 1 * 4 = 4
F = 1 * 3 = 3
이렇게 하여 더하면 99437이 나온다.
import sys
input = sys.stdin.readline
n = int(input())
n_list = [list(input().strip()) for _ in range(n)]
n_dic ={}
result = 0
for i in range(n):
for j in range(len(n_list[i])):
if n_list[i][j] in n_dic:
n_dic[n_list[i][j]] += 10 ** (len(n_list[i])-j-1)
else:
n_dic[n_list[i][j]] = 10 ** (len(n_list[i])-j-1)
n_dic_list =[]
for val in n_dic.values():
n_dic_list.append(val)
n_dic_list.sort(reverse=True)
count = 9
for i in n_dic_list:
result+= count*i
count-=1
print(result)
https://github.com/dydwkd486/coding_test/blob/main/baekjoon/python/baekjoon1339.py
GitHub - dydwkd486/coding_test: 코딩테스트 공부한 내용 정리
코딩테스트 공부한 내용 정리. Contribute to dydwkd486/coding_test development by creating an account on GitHub.
github.com
'Coding Test > baekjoon' 카테고리의 다른 글
[백준 17471] 게리맨더링 - java (solved.ac - 골드 4) (1) | 2022.09.15 |
---|---|
[백준 1263] 시간 관리- java (solved.ac - 실버 1) (0) | 2022.09.14 |
[백준 16234] 인구 이동- python (solved.ac - 골드 5) (2) | 2022.09.10 |
[백준 11048] 이동하기- python (solved.ac - 실버 1) (0) | 2022.09.06 |
[백준 17135] 캐슬 디펜스- JAVA (solved.ac - 골드 3) (0) | 2022.08.20 |