티스토리 뷰
[Gold 4] 1339번: 단어 수학 -Python
https://www.acmicpc.net/problem/1339
처음에는 입력된 문자열 중 길이가 긴 순서대로 정렬한 후 높은 자리에 위치한 알파벳부터 9 ~ 0 까지
할당해주려고 했으나, ACDEB + GCF 의 예제에서 원하는 값을 얻지 못함 => 그리디 알고리즘
100의 자리인 D와 G의 값을 어떤 기준으로 설정해주어야 할지 애매하였다
다른 실력자분들이 해결한 코드를 살짝 참조하여보니, 자리수마다 알파벳의 가중치를 두어 계산하면 되는 것 이었다 !
import sys
N = int(input())
word_list = []
word_list = [sys.stdin.readline().strip() for i in range(N)]
alpha_list = []
for word in word_list:
alpha_list.append(list(word)) # => 단어를 알파벳당 하나씩 쪼개서 리스트에 추가
# print('alpha_list : ' , end='')
# print(alpha_list)
alpha_dict = {}
for alpha in alpha_list: # 알파벳의 자리수에 해당하는 10000, 1000, 100.. 값을 {key, value} 형태로 저장
k = len(alpha) - 1 # 단어 하나의 길이. ABCDE => A = 10^4 ...
for v in alpha:
if v in alpha_dict: # 이미 dictionay에 있는 경우
alpha_dict[v] += pow(10,k)
else:
alpha_dict[v] = pow(10,k)
k -= 1
data_list = []
for data in alpha_dict.values():
data_list.append(data)
data_list.sort(reverse=True)
num_list = [0,1,2,3,4,5,6,7,8,9]
res = 0
for data in data_list:
res += data * num_list.pop() # data_list의 data들을 9 ~ 0 사이의 해당되는 값과 곱해준다.
print(res)
변수이름을 더 명확하게 쓰는 습관을 들여야할 것 같다 !!!
'알고리즘' 카테고리의 다른 글
[백준] 13305 : 주유소 - Python(파이썬) (0) | 2021.08.10 |
---|---|
[백준] 11726 : 2xn 타일링 - Python(파이썬) (0) | 2021.08.08 |
[백준] 1541 : 잃어버린 괄호 - Python(파이썬) (2) | 2021.08.02 |
[백준] 1946 : 신입 사원 - Python(파이썬) (0) | 2021.07.31 |
[백준] 15903 : 카드 합체 놀이 - Python(파이썬) (0) | 2021.07.31 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 스프링MVC
- 알림기능개선기
- 팀프로젝트
- ZNS SSD
- 런칭 페스티벌
- 8주차 회고
- 환경 별 로깅 전략 분리
- 2차 데모데이
- 네트워크
- 스프링 Logback
- dm-zoned
- jpa
- 스프링 부트
- CI/CD
- 회고
- 프로젝트
- java
- 3차 데모데이
- 피움 6주차 회고
- 알림개선기
- 파이썬
- Spring
- ZNS
- 백준
- 스프링 프레임워크
- 피움
- 우테코
- 5주차 회고
- dm-zoned 코드분석
- 우테코 회고
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함