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 | 31 |
Tags
- MST
- 서브쿼리
- 브루트포스
- 다이나믹프로그래밍
- 크루스칼
- 해시
- 다익스트라
- DP
- GROUP BY
- DFS
- 분할정복
- 수학
- 구현
- BFS
- 자료구조
- 그리디
- 시뮬레이션
- join
- 에라토스테네스의 체
- 다이나믹 프로그래밍
- 플로이드-워셜
- 우선순위큐
- 다시
- 백트래킹
- 누적합
- 그래프 이론
- 그래프 탐색
- 트리
- 투포인터
- 재귀
Archives
- Today
- Total
기록하고 까먹지 말기
1339 본문
날짜 : 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