문제
풀이
- string 문자열로 주어진 입력 데이터의 괄호는 필요가 없으므로 첫번째로 {, }를 replace 내장 함수로 제거해주었다.
- 후에 , 를 기준으로 문자열을 list화 해서 입력된 데이터의 숫자부분만 추출하였다.
- 입력된 숫자의 개수가 높은순으로 내림차순으로 list 반환을 해야하기 때문에 단순 중복제거인 tuple 사용이 아닌, key-value를 사용한 dict을 구현하였다.
- 반복문을 순회하면서 dict에 각 숫자(변수)의 개수 증감을 선언하였다.
- 딕셔너리의 value값을 기준으로 내림차순한 후, key값만 출력해 list로 반환하면 쉽게 구현할 수 있는 문제이다.
코드
def solution(s: str) -> list:
answer, dict = [], {}
remove_bracket = s.replace('{', '').replace('}', '').split(',')
for x in remove_bracket:
if not x in dict:
dict[x] = 1
else:
dict[x] += 1
sorted_dict = sorted(dict.items(), key=lambda item: item[1], reverse=True)
return [int(key) for key, _ in sorted_dict]
if __name__ == '__main__':
print(solution("{{2},{2,1},{2,1,3},{2,1,3,4}}"))
print(solution("{{1,2,3},{2,1},{1,2,4,3},{2}}"))
print(solution("{{20,111},{111}}"))
print(solution("{{123}}"))
print(solution("{{4,2,3},{3},{2,3,4,1},{2,3}}"))
결과
출처 & 깃허브
programmers 튜플
github