문제
https://school.programmers.co.kr/learn/courses/30/lessons/64065
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이
처음에 튜플이 어떻게 만들어지는지 이해하기 힘들었는데 입출력 예제를 보고 반환값을 어떻게 만들어야 하는지 파악했다. 예를 들어서 다음과 같은 {{4,2,3}, {3}, {2,3,4,1}, {2,3}} 입력이 주어졌다면, 각 요소에 나오는 숫자의 빈도에 많은 것이 앞으로 적은 것이 뒤에 있는 요소의 튜플이 만들어진다. 해당 내용을 토대로 우리가 반환하고자 하는 튜플의 값을 나타내면 [3, 2, 4, 1]이 된다.
- 주어진 문자열에서 "{}"와 ", " 처리하기
일단 {{4,2,3}, {3}, {2,3,4,1}, {2,3}}처럼 문자열이 주어지기 때문에, 이를 replace을 통해 "{}"을 모두 지워준 다음 ", "에 따라서 split함수를 통해 리스트로 변환한다.
- 각 리스트 안에 있는 요소 빈도수에 따라 정리하기
그럼 [4, 2, 3, 3, 2, 3, 4, 1, 2, 3,]처럼 리스트 값이 나오게 되는데 이를 itertools에 있는 Counter함수를 이용하여 나타낸 뒤 빈도수가 높은 원소대로 리스트를 만들어 반환해 주면 된다.
해당 풀이를 파이썬 코드로 나타낸다면 아래와 같이 작성할 수 있다.
🖥️ main.py
from collections import Counter
from typing import List
def solution(s) -> List[int]:
"""
입출력 예를 보고 튜플이 만들어지는 과정을 살펴보면
제일 많이 나오는 숫자가 앞에 나오고 뒤로 갈수록 출현 빈도가 낮은 숫자들이 나오는 것을 확인 할 수 있다.
"""
s = Counter(list(map(int, list(s.replace("{","").replace("}","").split(",")))))
answer = [result[0] for result in s.most_common()]
return answer
'Algorithm > Programmers' 카테고리의 다른 글
프로그래머스 LV0 OX퀴즈 (0) | 2023.07.19 |
---|---|
프로그래머스 LV2 JadenCase 문자열 만들기 (0) | 2023.07.19 |
프로그래머스 LV2 영어 끝말잇기 (0) | 2023.07.17 |
프로그래머스 LV2 최솟값 만들기 (0) | 2023.07.17 |
프로그래머스 LV2 올바른 괄호 (0) | 2023.07.17 |