728x90
문제 주소 : https://www.hackerrank.com/challenges/weighted-uniform-string/problem
난이도 : easy
성공률 : 73.23%
문제 : a~z까지 각 문자에는 매칭 되는 가중치 값이 있다, 문자는 오름차순 정렬되어있다, 동일한 문자의 경우 본 문자의 가중치값, 문자 누적의 가중치 값을 모두 가진다 두번째 파라미터로 넘어온 값들이 해당 문자열의 가중치에 존재하면 각각 YES, NO로 리턴하라
풀이 : 마지막 처리한 문자 값을 들고 있으며 비교하여 이전과 같으면 가중치 누적합을 set에 추가 이전과 다르면 가중치 표에 맞는 값을 set에 추가
두 번째 파라미터로 넘어온 값들이 set에 있는지 확인하여 Yes or No 리턴
답안
import math
import os
import random
import re
import sys
def weightedUniformStrings(s, queries):
weight : set = set()
before_char : str = ''
weightsum : int = 0
result : list = []
weight_chart : dict = {}
# 가중치 표 세팅
for i in range(0, 26):
weight_chart[chr(97+i)] = i+1
# 연속된 문자인경우 누적합, 아닐경우 가중치 표에 맞는 값을 set에 추가
for i in s:
if i == before_char:
weightsum += weight_chart[i]
weight.add(weightsum)
else:
weightsum = weight_chart[i]
before_char = i
weight.add(weight_chart[i])
#두번째 파라메타로 넘어온 값이 set내에 있는지 확인하여 리스트 구성, 리턴
for i in queries:
if(i in weight):
result.append('Yes')
else:
result.append('No')
return result
if __name__ == '__main__':
# fptr = open(os.environ['OUTPUT_PATH'], 'w')
fptr = sys.stdout
s = input()
queries_count = int(input().strip())
queries = []
for _ in range(queries_count):
queries_item = int(input().strip())
queries.append(queries_item)
result = weightedUniformStrings(s, queries)
fptr.write('\n'.join(result))
fptr.write('\n')
fptr.close()
느낀점
더보기
easy인데 성공률이 73퍼 이길래 도전해본 문제
더보기
별 어려움도 없이 쭉쭉 코딩이 되었다 왜 73퍼인거지..
728x90
'운동하는 개발자 > 알고리즘, 코딩테스트' 카테고리의 다른 글
Beakjoon] 나머지 합 구하기 (백준 코테) = 구간합 (0) | 2023.11.05 |
---|---|
Beakjoon] 구간 합 구하기 5 (백준 코테) = 구간합 (0) | 2023.11.02 |
HackerRank [String] Bear and Steady Gene /알고리즘 해커랭크[미해결] (0) | 2021.05.08 |
HackerRank [Strings] Sherlock and the Valid String /알고리즘 해커랭크 (0) | 2021.05.01 |
HackerRank [Strings] Sherlock and Anagrams /알고리즘 해커랭크 (0) | 2021.04.25 |