데이터사이언스 기록기📚

[백준/Python] 1339번(그리디)_단어 수학 본문

Coding Test/백준(Python)

[백준/Python] 1339번(그리디)_단어 수학

syunze 2023. 8. 8. 20:29

📌문제 유형

그리디

 

📌문제

 

1339번: 단어 수학

첫째 줄에 단어의 개수 N(1 ≤ N ≤ 10)이 주어진다. 둘째 줄부터 N개의 줄에 단어가 한 줄에 하나씩 주어진다. 단어는 알파벳 대문자로만 이루어져있다. 모든 단어에 포함되어 있는 알파벳은 최대

www.acmicpc.net

 

📌나의 문제풀이

- 다른 사람 풀이 설명 참고하여 풀었다 

# 먼저, 알파벳을 딕셔너리에 저장한다.
# 이 때, 단어의 길이에 따라 알파벳의 자릿수가 정해지므로 자릿수를 체크하여 그 자리에 맞는 값을 매칭시킨다.
# { '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)

 

📌 다른사람의 문제풀이

 

[백준] 1339 단어 수학 (Python 파이썬)

https://www.acmicpc.net/problem/1339 문제 설명 단어 수학 문제는 N개의 단어로 이루어져 있으며, 각 단어는 알파벳 대문자로만 이루어져 있다. 이때, 각 알파벳 대문자를 0부터 9까지의 숫자 중 하나로 바

hongcoding.tistory.com

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
Comments