알고리즘

[프로그래머스/Lv.2] 튜플_2019 카카오 개발자 겨울 인턴십

motti 2023. 6. 3. 22:00
반응형

문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/64065

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

def solution(s):
    """
    0.문자열에 있는 {{,}} 를 제거하고 집합끼리 나누기 
    1.주어진 s의 집합 길이에 따라 정렬하기
    2.각각의 원소에서 없는 값을 answer에 넣어주기
    3.마지막으로 모든 원소 str -> int로 바꿔주기
    """
    answer = []
    # 0 실행
    s = s.replace("{{","")
    s = s.replace("}}","")
    s = s.split('},{')
    # 1 실행
    strings = sorted(s, key = lambda x : len(x))

    # 2 실행
    for string  in strings:
        for i in string.split(','):
            if (i != str) and (i not in answer):
                answer.append(i)
    # 3 실행
    answer = list(map(int,answer))
    return answer

풀이

  1. 문자열에 있는 {{,}} 를 제거하고 집합끼리 나누기
  2. 주어진 s의 집합 길이에 따라 정렬하기
  3. 각각의 원소에서 없는 값을 answer에 넣어주기
  4. 마지막으로 모든 원소 str -> int로 바꿔주기

다른사람풀이

import re
from collections import Counter

def solution(s):

    s = Counter(re.findall('\\d+', s))
    return list(map(int, [k for k, v in sorted(s.items(), key=lambda x: x[1], reverse=True)]))
  1. re.findall('\\d+', s): 이 줄은 정규 표현식을 사용하여 **s**에서 숫자를 찾아내는 역할을 합니다. **\\d+**는 하나 이상의 숫자를 나타내는 정규 표현식
  2. Counter(re.findall('\\d+', s)): **collections.Counter**를 사용하여 이전에 찾은 숫자 리스트에서 각 숫자의 빈도를 세는 역할을 함. Counter 객체는 각 원소의 개수를 딕셔너리 형태로 저장함
  3. [k for k, v in sorted(s.items(), key=lambda x: x[1], reverse=True)]: 빈도에 따라 내림차순으로 정렬된 숫자의 리스트를 생성하는 역할. **s.items()**는 Counter 객체의 (키, 값) 쌍을 반환하며, sorted 함수를 사용하여 값에 따라 내림차순으로 정렬. 그리고 리스트 컴프리헨션을 사용하여 키만 추출하여 리스트로 반환
  4. list(map(int, ...)): 앞서 생성된 숫자 리스트의 각 요소를 정수로 변환하는 역할**map(int, ...)**은 숫자 리스트의 각 요소에 int 함수를 적용하여 정수로 변환. 마지막으로 list 함수를 사용하여 변환된 숫자 리스트를 리스트로 변환
반응형