BOJ1339 단어수학

randi65535·2020년 11월 29일
0

N!인 걸 감안해서 순열 돌렸더니 tle 난 코드

## 문자열 받는 리스트
elem = [input() for _ in range(N)]

## 모든 문자를 탐색해서 알파벳 존재여부 확인
dic = defaultdict()
for i in elem:
	for j in i:
		dic[j] = 1

alp = []
for k,v in dic.items():
	alp.append(k)
alp.sort()

## 알파벳 개수가 4개면 9, 8, 7, 6 
## 알파벳 개수가 3개면 9, 8, 7
## 항상 높은 순열을 만들어서 이전 순열이 없을 때까지 반복 하기 위한 리스트
nums = [9-i for i in range(len(alp))]

ans = 0
while 1:

	## 순열을 돌린 값을 A = 7 이런식으로 넣어줌
	for i in range(len(nums)):
		dic[alp[i]] = nums[i]
	
	cur_sum = 0
	for i in elem:
		txt = []
		## ABA 이면 dic[A] = 9, dic[B] = 8
		## txt = [9, 8, 9] 로 만들어주고 합산
		for j in range(len(i)):
			txt.append(str(dic[i[j]]))
		cur_sum += int(''.join(map(str, txt)))
	ans = max(ans, cur_sum)

	if not prev_permutation(nums):
		break
print(ans)
profile
unsinged int 8byte-1

0개의 댓글