Programmers/프로그래머스-튜플-python

cosmos·2022년 9월 16일
0
post-thumbnail

문제

풀이

  • string 문자열로 주어진 입력 데이터의 괄호는 필요가 없으므로 첫번째로 {, }를 replace 내장 함수로 제거해주었다.
  • 후에 , 를 기준으로 문자열을 list화 해서 입력된 데이터의 숫자부분만 추출하였다.
  • 입력된 숫자의 개수가 높은순으로 내림차순으로 list 반환을 해야하기 때문에 단순 중복제거인 tuple 사용이 아닌, key-value를 사용한 dict을 구현하였다.
  • 반복문을 순회하면서 dict에 각 숫자(변수)의 개수 증감을 선언하였다.
  • 딕셔너리의 value값을 기준으로 내림차순한 후, key값만 출력해 list로 반환하면 쉽게 구현할 수 있는 문제이다.

코드

# https://school.programmers.co.kr/learn/courses/30/lessons/64065
# programmers, level2: 튜플, python3
def solution(s: str) -> list:
    answer, dict = [], {}
    remove_bracket = s.replace('{', '').replace('}', '').split(',')  # 괄호 제거 후, 쉼표를 구분하여 list화

    for x in remove_bracket:  # list화 한 input data를 dict에 추가
        if not x in dict:     # 만일, dict에 해당 데이터가 없으면
            dict[x] = 1       # 1 초기화
        else:                 # 선언이 되었던 데이터면
            dict[x] += 1      # +1 => 중복 입력 데이터를 처리하기 위함

    # value값이 높은 순에서 낮은순으로 내림차순 정렬
    sorted_dict = sorted(dict.items(), key=lambda item: item[1], reverse=True)

    return [int(key) for key, _ in sorted_dict]  # 많이 선언된 순으로 list화하여 key값만 반환

if __name__ == '__main__':
    print(solution("{{2},{2,1},{2,1,3},{2,1,3,4}}"))  # [2, 1, 3, 4]
    print(solution("{{1,2,3},{2,1},{1,2,4,3},{2}}"))  # [2, 1, 3, 4]
    print(solution("{{20,111},{111}}"))  # [111, 20]
    print(solution("{{123}}"))  # [123]
    print(solution("{{4,2,3},{3},{2,3,4,1},{2,3}}"))   # [3, 2, 4, 1]

결과

출처 & 깃허브

programmers 튜플
github

0개의 댓글