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 |
Tags
- 포스코 청년
- 삼성SDS Brightics
- 혼공학습단
- 직원 이직률
- 추천시스템
- Brightics
- 모델링
- Brigthics
- 삼성SDS
- 노코드AI
- 삼성SDS Brigthics
- 브라이틱스
- 혼공머신러닝딥러닝
- 직원 이직여부
- 개인 의료비 예측
- Brightics를 이용한 분석
- 혼공
- 데이터 분석
- 데이터분석
- Brigthics Studio
- 포스코 아카데미
- 영상제작기
- 삼성 SDS Brigthics
- 팀 분석
- 브라이틱스 서포터즈
- 혼공머신
- 캐글
- Brightics Studio
- Brigthics를 이용한 분석
- 삼성 SDS
Archives
- Today
- Total
데이터사이언스 기록기📚
[백준/Python] 1339번(그리디)_단어 수학 본문
📌문제 유형
그리디
📌문제
📌나의 문제풀이
- 다른 사람 풀이 설명 참고하여 풀었다
# 먼저, 알파벳을 딕셔너리에 저장한다.
# 이 때, 단어의 길이에 따라 알파벳의 자릿수가 정해지므로 자릿수를 체크하여 그 자리에 맞는 값을 매칭시킨다.
# { 'A' : 100, 'B' : 1010, 'C': 1 ... }
# 매칭을 완료한 후에, dict의 value만 가져와서 리스트에 내림차순으로 정렬한다.
# 그럼, 가장 큰 비율을 차지하는 것 부터 앞에 등장할 것이다.
# [11000, 10000, 1000, 100 ... ]
n = int(input())
words = []
word = {}
# nums = [9,8,7,6,5,4,3,2,1,0]
for _ in range(n):
w = list(map(str,input()))
for n in w:
word[n] = 0
words.append(w)
for k in word.keys():
ans = 0
for x in range(len(words)):
num = '0'
for y in range(len(words[x])):
if words[x][y] == k:
num += '1'
else:
num += '0'
ans += int(num)
word[k] = ans
value_list = list(word.values())
value_list.sort(reverse=True)
result = 0
nums = 9
for real in value_list:
result += (nums*real)
nums -= 1
print(result)
📌 다른사람의 문제풀이
import sys
n = int(sys.stdin.readline())
alpha = [] # 단어를 저장할 리스트
alpha_dict = {} # 단어 내의 알파벳별로 수를 저장할 딕셔너리
numList = [] # 수를 저장할 리스트
for i in range(n): # 단어를 입력받음
alpha.append(sys.stdin.readline().rstrip())
for i in range(n): # 모든 단어에 대해서
for j in range(len(alpha[i])): # 단어의 길이만큼 실행
if alpha[i][j] in alpha_dict: # 단어의 알파벳이 이미 dict에 있으면
alpha_dict[alpha[i][j]] += 10 ** (len(alpha[i])-j-1) # 자리에 맞게 추가 ( 1의 자리면 1 )
else: # 자리에 없으면 새로 추가 ( 10의 자리면 10 )
alpha_dict[alpha[i][j]] = 10 ** (len(alpha[i])-j-1)
for val in alpha_dict.values(): # dict에 저장된 수들을 모두 리스트에 추가
numList.append(val)
numList.sort(reverse=True) # 수들을 내림차순 정렬
sum = 0
pows = 9
for i in numList: # 첫 번째 부터 가장 큰 부분을 차지하므로 9를 곱해준다
sum += pows * i
pows -= 1
# 내려갈수록 그 알파벳이 차지하는 비중이 적으므로 -1
print(sum)
📌 리뷰
- 단어 개수 카운트 까지 생각했는데, 1과 0으로 나타내는 방법까진 가지 못했다ㅠㅠ
- 단어 개수 카운트 까다로우면 1,0으로 나타낼 수 있는 방법 고려하기!
728x90
'Coding Test > 백준(Python)' 카테고리의 다른 글
[백준/Python] 14502번(완탐, DFS)_연구소 (0) | 2023.08.15 |
---|---|
[백준/Python] 13975번(그리디, 우선순위 큐)_ 파일 합치기3 (0) | 2023.08.09 |
[백준/Python] 2573번(DFS,BFS)_빙산 (0) | 2023.08.07 |
[백준/Python] 1744번(그리디, 정렬)_수 묶기 (0) | 2023.06.09 |
[백준/Python] 2668번(그래프, DFS)_숫자고르기 (0) | 2023.06.04 |
Comments