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
- react
- 백준알고리즘
- react-query
- 완전탐색
- 블챌
- DFS
- 재귀
- 자료구조
- 구현
- 코드트리
- DFS활용
- django
- 코딩테스트
- DFS기초
- socket.io
- 그리디알고리즘
- 코딩테스트실력진단
- 그리디
- 스택
- CSS
- DP
- BFS
- JS
- 코테
- 문자열
- 백준
- 파이썬
- Express
- 알고리즘
- 스택자료구조
Archives
- Today
- Total
꾸준하게 거북이처럼
백준 1339 파이썬 본문
1339번: 단어 수학
첫째 줄에 단어의 개수 N(1 ≤ N ≤ 10)이 주어진다. 둘째 줄부터 N개의 줄에 단어가 한 줄에 하나씩 주어진다. 단어는 알파벳 대문자로만 이루어져있다. 모든 단어에 포함되어 있는 알파벳은 최대
www.acmicpc.net
문제 풀이의 핵심
1. 딕셔너리 사용 ex) {'G': 9, 'C': 8, ,,,,,}
2. 가중치를 주어서 우선순위 매기기
내가 문제를 풀다가 놓친 부분은 가중치를 계산 하는 부분이었다. 가중치를 계산할 때 고려해야할 부분은 2가지가 있는데,
- 자릿수가 큰 것뿐만이 아니라
- 알파벳이 나온 빈도수
자릿 수가 작긴 하지만 빈도 수가 많다면, 이 수를 큰 수로 매칭하는 것이! 그저 자릿수가 큰 수를 큰 수로 매칭했을 때 보다 결과 값이 클 수도 있다.
예시를 들자면, 아래와 같은 입력에서 답은 1772가 나와야한다. A가 9가 아닌, B가 9일 때 결과 값이 크게 나온다.
10
ABB
BC
BC
BC
BC
BC
BC
BC
BC
BC
=> 따라서 가중치를 계산할 때는 빈도수와 자릿수 모두 생각해서 가중치에 포함시켜 계산해야한다.
코드
n = int(input())
dic = {} # {'G':9,,,,,}
num = [] # 가중치 계산 값을 저장할 리스트
for _ in range(n): # 입력 및 가중치 계산
arr = list(input())
for i in range(len(arr)):
a = len(arr) - i - 1
if arr[i] not in dic:
dic[arr[i]] = 10 ** a
else: # 이미 딕셔너리에 존재한다면, 자릿수를 계속 더하여 가중치를 증가시킨다(여러번 나올 수록 커짐)
dic[arr[i]] += 10 ** a
# value 값인 가중치만 뽑아서 내림차순 정렬
for i in dic.values():
num.append(i)
num.sort(reverse=True)
# 내림 차순 정렬한 값 * 9 부터 차례대로 곱한다.
res = 0
temp = 9
for v in num:
res += (temp * v)
temp -= 1
print(res)
참고
[백준] 1339 단어 수학 (Python 파이썬)
https://www.acmicpc.net/problem/1339 문제 설명 단어 수학 문제는 N개의 단어로 이루어져 있으며, 각 단어는 알파벳 대문자로만 이루어져 있다. 이때, 각 알파벳 대문자를 0부터 9까지의 숫자 중 하나로 바
hongcoding.tistory.com
'Algorithm 문제 & 공부 > 그리디' 카테고리의 다른 글
이코테: 모험가 길드 문제 파이썬 (0) | 2023.01.29 |
---|---|
백준 13305 주유소 (0) | 2022.06.07 |
회의실배정 (0) | 2022.06.04 |
창고정리 (0) | 2022.06.04 |
씨름선수 (0) | 2022.06.04 |
Comments