데이터사이언스 기록기📚

[프로그래머스] Level 2_튜플(2019 카카오 개발자 겨울 인턴십) 본문

Coding Test/프로그래머스(Python)

[프로그래머스] Level 2_튜플(2019 카카오 개발자 겨울 인턴십)

syunze 2022. 10. 14. 14:41

📌문제 유형

2019 카카오 개발자 겨울 인턴십

 

📌문제

 

프로그래머스

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

programmers.co.kr

 

📌나의 문제풀이

- 주석 참조

def solution(s):
    answer = []
    new = []
    # 앞뒤 {} 없애기
    s = s[2:-2]
    
    # {,} 기준으로 자르기
    l = list(map(str,s.split('{')))
    l = list(map(str,s.split('}')))
    
    # 맨 앞은 숫자로 나와서 new에 그냥 추가
    new.append(l[0])
    # ,{를 ''로 바꿔서 new에 넣기
    for words in l:
        if words.find(',{') == False:
            words = words.replace(',{','')
            new.append(words)
    
    # new 안에 str 길이 순으로 정렬
    new = sorted(new, key=len)
    
    # new안의 원소 길이가 1일때는 answer에 그냥 넣기, 이외는 다시 리스트 만들어서 answer에 없는 값만 넣기
    for i in range(len(new)):
        if len(new[i]) == 1:
            answer.append(int(new[i]))
        else:
            li = list(map(int,new[i].split(',')))
            for num in li:
                if num in answer:
                    continue
                else:
                    answer.append(num)
    
    return answer

 

📌다른 사람의 문제풀이

1) 정규표현식

 - Counter의 most_common() 넣으면 개수 순으로 정렬되는거 추가 가능

 - 정규표현식

  • re.findall('패턴 문자열', '문자열') : 모든 문자열 패턴 찾기
  • \d+ : 하나 혹은 그 이상 연결된 숫자 (붙어 있는 숫자끼리 count 됨)
 

04 모든 문자열 패턴 찾기 (findall)

``` finditer()는 정규식과 매치되는 모든 문자열을 iterator 객체로 리턴한다. iterator 객체의 값을 불러오려면 for문을 이용해 읽어들여야 한다. ...

wikidocs.net

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)]))

import re
from collections import Counter

 

2) strip 사용

- strip : 지정 문자 삭제

 

4.2 파이썬 문자열 strip() 함수 : strip() 함수의 정의

파이썬 스트립()이란 무엇입니까? Python strip() 함수는 Python 라이브러리에서 사용할 수 있는 내장 함수의 일부입니다. strip() 메서드는 원래 문자열의 시작과 끝에서 주어진 문자를 

www.entity.co.kr

def solution(s):
    answer = []

    s1 = s.lstrip('{').rstrip('}').split('},{')

    new_s = []
    for i in s1:
        new_s.append(i.split(','))

    new_s.sort(key = len)

    for i in new_s:
        for j in range(len(i)):
            if int(i[j]) not in answer:
                answer.append(int(i[j]))

    return answer

 

3) 유사한 풀이

def solution(s):
    # {{, }}를 제거 후 },{ 으로 나누기
    data = s[2:-2].split("},{")
    # 길이 별로 오름차순 정렬
    data = sorted(data, key=lambda x: len(x))
    answer = []
    for item in data:
        # 각각의 원소로 분류 후
        item = list(map(int, item.split(",")))
        for value in item:
            # 포함되어 있지 않으면 input
            if value not in answer:
                answer.append(value)
    return answer

 

4) eval 사용

 - eval : 사칙연산 식을 문자로 받은 걸 실행 (다른 처리 필요 없음)

 

Python eval() 함수를 아시나요?

도대체 뭘 하는 함수길래 사용을 조심하라는 포스팅이 먼저 노출이 될까...(warning : 이 포스팅은 python eval() 함수 - 사용을 조심해야 하는 이유 를 보고 고대로 따라 하였습니다. )

velog.io

def solution(s):
    s = eval(s.replace("{", "[").replace("}", "]"))
    answer = list({num:0 for k in sorted(s, key=lambda x: len(x)) for num in k}.keys())
    return answer

 

📌리뷰

- 문자열 함수 : replace, split, strip (+ 강력한 무기 : 정규표현식)

- eval : 문자로 받은 사칙연산을 우리가 아는 식으로 처리 

728x90
Comments