티스토리 뷰

반응형
 

프로그래머스

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

programmers.co.kr


내 풀이

def solution(s):
    lst = s[1:-1].split('},')
    lst.sort(key=len)

    #    ['{2}', '{2,1', '{1,2,3', '{1,2,4,3']
    answer = []
    for el in lst:
        temp = ''
        
        # el = '{1,2,3'
        for char in el:
            # 1. 지금 조사하는 글자가 숫자라면
            if char.isdecimal():
                temp += char
            # 2. 지금 조사하는 글자가 }나 ,이면
            elif char in '},':
                if int(temp) not in answer:
                    answer.append(int(temp))
                temp = ''
        
        # 3. 조사가 끝났는데 temp에 값이 남아있다면
        if temp and int(temp) not in answer:
            answer.append(int(temp))
        temp = ''
    
    return answer
  • split으로 문자열을 분리하여 리스트의 요소로 저장
  • 리스트의 요소를 순회하며, 요소의 각 문자를 순회하며 조사
  • 문자가 정수라면 temp에 더함
  • 문자가 `}`나 `,`이며 현재 temp가 answer 리스트에 없으면 temp를 정수형으로 answer에 추가하고, temp를 초기화한다.
  • 모든 문자에 대한 조사가 끝났는데 temp에 값이 있다면, 그 temp값이 answer 리스트에 없으면 temp를 정수형으로 answer에 추가하고, temp를 초기화한다.

참고 풀이

import re
from collections import Counter

def solution(s):
    # 1. 문자열 s에서 `\d+`(정규표현식)과 일치하는 문자열을 모두 찾아서 리스트로 반환
    s = re.findall('\d+', s)
    
    # 2. s의 요소들을 빈도수와 함께 딕셔너리로 반환
    cnt = Counter(s)
    print(cnt)
    
    # 3. 빈도수가 큰 순서대로 숫자를 정렬
    most_common = cnt.most_common()
    
    # 4. 숫자만 골라서 answer에 추가
    answer = []
    for tup in most_common:
        answer.append(int(tup[0]))
        
    return answer

프로그래머스에서 다른 사람의 풀이를 참고하여 다시 정리해본 풀이다.

 

정규표현식 라이브러리 re

re는 정규표현식을 활용하여 문자열에 대한 처리를 할 수 있는 라이브러리다.

  •  findall(정규표현식, 문자열) 함수 : 문자열에서 정규표현식에 해당하는 문자만 찾아내어, 리스트로 반환한다. 
  • '\d+' 정규표현식 : '\d'는 0-9 정수를 찾는 정규표현식이다. +는 연속되는 값을 모두 찾아 하나의 값으로 찾아낸다.
🪄예를 들어서, 문자열이 '111'이라고 하자.

1. re.findall('\d', '111')의 결과는 ['1', '1', '1']이 된다.
2.
re.findall('\d+', '111')의 결과는 ['111']이 된다.

 

Counter 클래스

Counter는 collections 라이브러리에 내장된 클래스로, iterable한 객체의 각 요소의 갯수와 요소를 함께 반환해준다.

🪄예를 들어, lst = ['미식스', '모티', '노을', '노을', '미식스', '미식스']라고 하자.

Counter(lst)는 Counter({ '미식스' : 3, '모티' : 1, '노을' : 2 }) 이다.

 

  • Counter 클래스의 most_common() 메서드 : Counter 객체를 빈도수를 기준으로 내림차순 정렬하여, (요소, 빈도수) 형태의 튜플로 반환한다. 인자로는 반환할 요소의 개수 n을 지정할 수 있다. n을 지정하면, top n개의 요소만을 반환한다.
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/06   »
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
글 보관함
반응형