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
- programmers
- [sqld]자격증합격
- 격파르타 후기
- 백준
- 파이썬
- 구슬탈출2
- hackerrank
- Roads and Libraries
- DFS: Connected Cell in a Grid
- Find the nearest clone
- candies
- 격파르타 장점
- 야근지수
- 코딩테스트
- Reverse Shuffle Merge
- 매칭점수
- Algorithm
- 피보나치 함수
- 해커랭크
- python
- Special String Again
- 프로그래머스
- Common Child
- Interview Preparation Kit
- Recursion: Davis' Staircase
- 머신러닝
- Max Array Sum
- BFS: Shortest Reach in a Graph
- 알고리즘
- 격파르타 합격후기
Archives
- Today
- Total
Archive
[Hackerrank] [Medium] Sherlock and the Valid String 본문
https://www.hackerrank.com/challenges/sherlock-and-valid-string/problem
풀이
- 입력으로 string이 주어지고, 각 문자의 빈도 수가 같거나, 하나의 문자를 제거했을 때 빈도 수가 같으면 valid string으로 정의.
- 먼저 입력 string에 대해 frequency를 세고, 해당 정보를 dictionary에 저장.
- 그리고 frequency에 대한 빈도 수를 count_dict에 따로 저장.
- 입력 string에 대해 각 문자가 같은 빈도 수로 나왔음 -> len(count_dict) == 1 -> return "YES"
- 문자의 출연 빈도 수가 2개일 때 'YES' 조건은 2가지가 있음.
- 일단 max_val, min_val은 문자 출현 frequency의 빈도 수이고, count_dict을 만들 때 계산됨.
- 가장 많이 등장한 문자를 삭제할 경우, max_val - min_val은 1이 되야하고 count_dict[max_val] = 1이어야 함.
- 'aabbbcc'의 count_dict = {2:2, 3:1} , b를 삭제하면 됨.
- 가장 적게 등장한 문자를 삭제할 경우, count_dict[min_val] = 1이고 min_val = 1이면 됨.
- 'abbcc'의 count_dict = {1:1, 2:2}, a를 삭제.
def isValid(s):
from collections import defaultdict
char_dict = defaultdict(int)
max_val = 0
min_val = 99
# frequency 저장
for char in s:
# key : character, val : frequency
char_dict[char] += 1
cnt = 0
count_dict = defaultdict(int)
# frequency의 빈도 수를 count_dict에 저장.
for v in char_dict.values():
count_dict[v] += 1
# max_val : frequency의 최댓값, min_val : frequency의 최솟값
max_val = max(v, max_val)
min_val = min(v, min_val)
# 모든 문자가 같은 빈도 수로 입력받았을 경우
if len(count_dict) == 1: return 'YES'
if len(count_dict) == 2:
# max_val을 삭제하는 경우
if count_dict[max_val] == 1 and max_val - min_val == 1:
return 'YES'
# min_val을 삭제하는 경우
elif count_dict[min_val] == 1 and min_val == 1:
return 'YES'
# 그 외의 경우 "NO"
return "NO"
'공부 > Algorithm' 카테고리의 다른 글
[Hackerrank] [Medium] Common Child (0) | 2020.08.28 |
---|---|
[Hackerrank] [Medium] Special String Again (0) | 2020.08.28 |
[Hackerrank] [Hard] Merge Sort: Counting Inversions (0) | 2020.08.25 |
[Hackerrank] [Medium] Fraudulent Activity Notifications (0) | 2020.08.24 |
[Hackrrank] [Medium] Count Triplets (0) | 2020.08.23 |
Comments