새소식

⌨️ Algorithms/프로그래머스

[Python] 프로그래머스 Lv2_튜플

2022. 10. 12. 23:05

  • -

https://school.programmers.co.kr/learn/courses/30/lessons/64065

 

프로그래머스

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

programmers.co.kr

 

"""
입출력 예시)

s = "{{2},{2,1},{2,1,3},{2,1,3,4}}" -> 	[2, 1, 3, 4]
s = "{{1,2,3},{2,1},{1,2,4,3},{2}}" -> [2, 1, 3, 4]
s = "{{20,111},{111}}" -> [111, 20]
s = "{{123}}" -> [123]
s = "{{4,2,3},{3},{2,3,4,1},{2,3}}" -> [3, 2, 4, 1]
"""

def solution(s):

    s_list = sorted([s.split(',') for s in s[2:-2].split('},{')], key=len) 
    
    answer = []
    # 원소들의 원래 순서 찾기
    for l in s_list:
        for s in l:
            if int(s) not in answer: # answer에 요소가 없는 경우
                answer.append(int(s)) # answer에 해당 값을 int으로 변경해 추가
                break
        
    return answer

 

  • s의 맨 앞 '{{'과 '}}'를 제외한 (s[2:-2]) 문자열을 '},{'를 기준으로 split한 배열
    • [  for s in s[2:-2].split('},{')]
  • ','를 기준으로 다시 한번 더 각 배열 요소마다 split
    • s.split(',')
s = "{{20,111},{111}}"

# s의 맨앞과 맨뒤에 있는 '{{'과 '}}' 제외
s[2:-2] 

"""
'20,111},{111'
"""


# '},{'로 split
s[2:-2].split('},{')

"""
['20,111', '111']
"""


# s[2:-2].split('},{') 의 원소들을 ','로 split
[s.split(',') for s in s[2:-2].split('},{')]

"""
[['20', '111'], ['111']]
"""

 

s = "{{1,2,3},{2,1},{1,2,4,3},{2}}"

[s.split(',') for s in s[2:-2].split('},{')]

"""
[['1', '2', '3'], ['2', '1'], ['1', '2', '4', '3'], ['2']]
"""

 

  • 길이를 기준으로 오름차순 정렬
    • sorted([], key=len)

 

 

 

 

 

  • 더 간단한 코드
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)]))

 

  • 숫자만 뽑기
    • re.findall('\d+', s)
# 숫자만 뽑기
import re
s = "{{20,111},{111}}"
re.findall('\d+', s) 

"""
['20', '111', '111']
"""


s = "{{1,2,3},{2,1},{1,2,4,3},{2}}"
re.findall('\d+', s)

"""
['1', '2', '3', '2', '1', '1', '2', '4', '3', '2']
"""

 

  • 각 원소별 횟수 체크 
    • Counter()
# 각 원소별 횟수 체크
import re
from collections import Counter

s = "{{20,111},{111}}"
Counter(re.findall('\d+', s))

"""
Counter({'20': 1, '111': 2})
"""


s = "{{1,2,3},{2,1},{1,2,4,3},{2}}"
Counter(re.findall('\d+', s))

"""
Counter({'1': 3, '2': 4, '3': 2, '4': 1})
"""

 

  • 원소별 횟수를 기준으로 내림차순 정렬
    • sorted(s.items(), key=lambda x: x[1], reverse=True)
# x[1] -> 원소별 횟수

s = "{{1,2,3},{2,1},{1,2,4,3},{2}}"
s = Counter(re.findall('\d+', s))
s.items()

"""
dict_items([('1', 3), ('2', 4), ('3', 2), ('4', 1)])
"""

 

 

 

 

참고)

 

https://velog.io/@tiiranocode/Python-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%ED%8A%9C%ED%94%8C

 

Python | 알고리즘 프로그래머스 튜플

알고리즘 개요 특정 튜플을 표현하는 집합이 담긴 문자열 s가 매개변수로 주어질 때, s가 표현하는 튜플을 배열에 담아 return 하도록 solution 함수를 완성하는 알고리즘 셀수있는 수량의 순서있는

velog.io

 

https://eda-ai-lab.tistory.com/508

 

[프로그래머스] 튜플

튜플 문제 설명 셀수있는 수량의 순서있는 열거 또는 어떤 순서를 따르는 요소들의 모음을 튜플(tuple)이라고 합니다. n개의 요소를 가진 튜플을 n-튜플(n-tuple)이라고 하며, 다음과 같이 표현할 수

eda-ai-lab.tistory.com

 

https://www.daleseo.com/python-collections-counter/

 

파이썬 collections 모듈의 Counter 사용법

Engineering Blog by Dale Seo

www.daleseo.com

 

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다!