https://github.com/Dev-Guccin
Guccin
https://github.com/Dev-Guccin
전체 방문자
오늘
어제
  • 분류 전체보기 (172)
    • 알고리즘 (140)
    • 삽질방지 (13)
    • SystemHacking (1)
    • 일상 (4)
    • 개발 (8)
    • 스프링 부트 REST API 개발일지 (5)
    • JPA (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 그리디
  • Python
  • python3
  • 프로그래머스
  • 12015
  • 최대공약수
  • heapq
  • BFS
  • DFS
  • 다익스트라
  • 다이나믹 프로그래밍
  • 유니온 파인드
  • 유클리드호제법
  • 최소힙
  • 다이나믹프로그래밍
  • 최단경로
  • 큐
  • 이분 탐색
  • MST
  • 백트래킹
  • 백준
  • 스택
  • 파이썬
  • 그래프
  • counter
  • 재귀
  • DP
  • 이분탐색
  • 재귀함수
  • LIS

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
https://github.com/Dev-Guccin

Guccin

[python3] 백준 1339 풀이 ( 단어 수학, 그리디 )
알고리즘

[python3] 백준 1339 풀이 ( 단어 수학, 그리디 )

2022. 3. 8. 17:02

이 문제는 상당히 헤맸다. 결국 1시간내에 풀지 못해서 질문을 찾다보니 좋은 접근 방법이 있어서 그걸 토대로 푸니 금방 풀렸다.

길이가 최대 8인 문자열이 최대 10개가 주어진다. 각 알파벳은 숫자를 의미하는데 숫자를 대입하여 모든 문자열의 총합을 구하면 된다.
예를 들어 AB + A의 최대값은 98+9 = 117로 나타낼 수 있다. 그럼 간단한 규칙을 찾아낼 수 있다.

1. 가장 앞에 있는 문자열일수록 큰수를 대입해야한다.
2. 많이 나올수록 큰수를 대입해야한다.
그런데 이렇게 정리하면 삽질을 하게 된다. 한마디로 짧게 생각하면 스스로 함정에 빠지는 거다.

그냥 간단하게
AB -> A*10+B*1,
B-> B*1
AB+B -> A*10 + B*2 가 된다. 따라서 이걸 그대로 해주면 어떤 값이 가장 크게 나오는지 한번에 확인할 수 있다.

그럼 로직은 아래와 같다.

1. 단어를 확인하며 각 알파벳이 어느정도로 나오는지 파악한다.
2. 가장 큰 값을 가진 알파벳부터 순서대로 큰 값을 대입한다.(9,8,7,.....0)
3. 알파벳별 대입값을 토대로 총합을 구한다.

N = int(input())

words = []
dict = {}
for i in range(N):
    word = list(input())
    N = len(word)-1
    for w in word:
        if w not in dict:
            dict[w] = 10**N
        else:
            dict[w] += 10**N
        N -= 1
    words.append(word)
tmp = []
for k in dict:
    tmp.append([dict[k], k])
tmp.sort(key=lambda x: (-x[0]))
N = 9
newDict = {}
for t in tmp:
    score, alpha = t
    newDict[alpha] = N
    N -= 1
total = 0
for word in words:
    s = ""
    for w in word:
        s += str(newDict[w])
    total += int(s)
print(total)
저작자표시 (새창열림)

'알고리즘' 카테고리의 다른 글

[dp] 모듈러 분배법칙  (0) 2022.03.12
[python3] 백준 1939 풀이 ( 중량제한, MST, 유니온 파인드 )  (0) 2022.03.09
[python] 코테 대비 알고리즘 모듈 정리  (0) 2022.03.06
[python3] 프로그래머스 외벽 점검 ( 2020 KAKAO BLIND RECRUITMENT, level3, 완전탐색, 순열 )  (0) 2022.02.28
[python3] 백준 4195 (친구 네트워크, 유니온 파인드)  (0) 2022.02.26
    '알고리즘' 카테고리의 다른 글
    • [dp] 모듈러 분배법칙
    • [python3] 백준 1939 풀이 ( 중량제한, MST, 유니온 파인드 )
    • [python] 코테 대비 알고리즘 모듈 정리
    • [python3] 프로그래머스 외벽 점검 ( 2020 KAKAO BLIND RECRUITMENT, level3, 완전탐색, 순열 )
    https://github.com/Dev-Guccin
    https://github.com/Dev-Guccin
    https://github.com/Dev-Guccin

    티스토리툴바