전공/백준
1339
yha97
2022. 10. 23. 13:48
날짜 : 2022. 10. 23
사용 언어 : python
문제
코드
import sys
n = int(sys.stdin.readline())
spel = {} # 알파벳별 자리 저장
word = [] # 입력받은 단어
num = []
res = 0
for _ in range(n): # 단어 입력
word.append(sys.stdin.readline().strip())
for i in word:
for j in range(0, len(i)):
if i[j] not in spel: # 스펠링이 없었던 경우
spel[i[j]] = 10 ** (len(i) - 1 - j)
else: # 기존 스펠링이 있는 경우
spel[i[j]] += 10 ** (len(i) - 1 - j)
temp = list(spel.values())
temp.sort(reverse=True)
for i in range(len(temp)):
res += temp[i] * (9 - i)
print(res)
#print(spel)
#print(temp)
알게된 점
- 그리디 실버 문제는 무난하게 풀어서 객기로 도전한 골드였지만 상당히 어려웠다.
- 알파벳으로 슬라이싱 후 내림차순으로 9부터 숫자를 부여해서 풀이하는 방식은 얼추 맞았지만 반례에서 바로 틀렸다.
- 한시간정도 고민하다가 결구 구글링을 했고 알파벳 딕셔너리에서 찾으면 value를 1로 설정하는 것이 아니라 자릿수별로 설정해야 풀이 가능하다는 것을 알게 되었다. ex) AABCA 의 경우 A : 11001, B : 100, C : 10..
- 그래서 코드를 처음부터 다시 짰고 맞힐 수 있었다.
- 단어별로 숫자를 부여해서 더하는 방식을 생각했지만 알파벳 별로 숫자를 부여해서 풀이하는 것이 훨씬 효율적이었다.
참고 사이트
- https://yoonsang-it.tistory.com/41
백준 1339번 파이썬 풀이: 단어 수학
백준 1339번 단어 수학 알고리즘 분류: 그리디 알고리즘, 백트래킹 링크: www.acmicpc.net/problem/1339 1339번: 단어 수학 첫째 줄에 단어의 개수 N(1 ≤ N ≤ 10)이 주어진다. 둘째 줄부터 N개의 줄에 단어가
yoonsang-it.tistory.com