본문 바로가기

study/알고리즘

[알고리즘/프로그래머스] 튜플

2019 카카오 개발자 겨울 인턴십 > 튜플

 

코딩테스트 연습 - 튜플

"{{2},{2,1},{2,1,3},{2,1,3,4}}" [2, 1, 3, 4] "{{1,2,3},{2,1},{1,2,4,3},{2}}" [2, 1, 3, 4] "{{4,2,3},{3},{2,3,4,1},{2,3}}" [3, 2, 4, 1]

programmers.co.kr

 

 

나의 풀이 

 

- replace 함수 사용

- 숫자만 남긴 리스트를 구한 후 각 숫자의 개수를 세어 순서를 맞춰 리스트에 추가해준다.

def solution(s):
    s = s.replace('{', '')
    s = s.replace('}', '')

    num_list = list(map(int, s.split(','))) 
    answer = [0] * len(set(num_list))
    
    for num in set(num_list):
        answer[len(answer) - num_list.count(num)] = num

    return answer

 

다른 사람의 풀이

 

1.

- replace 함수를 이용하지 않고 strip 함수 사용 코드

 

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

 

2.

- {{, }}를 제거 후 },{ 으로 나눈 후 길이 별로 오름차순 정렬

print(data) --> ['2', '2,1', '2,1,3', '2,1,3,4']

- 이후 각각의 원소로 분류하고 포함되어 있지 않으면 input

(key = len을 사용할 때에는 리스트가 int형이 들어있으면 안됨)

def solution(s):
    # {{, }}를 제거 후 },{ 으로 나누기
    data = s[2:-2].split("},{")
    # 길이 별로 오름차순 정렬
    data = sorted(data, key=lambda x: len(x))
    #data = sorted(data, key = len) 과 동일
    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

 

3. 정규식 이용

 

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

 

print(re.findall('\d+', s)) ['2', '2', '1', '2', '1', '3', '2', '1', '3', '4']
print(Counter(re.findall('\d+', s))) Counter({'2': 4, '1': 3, '3': 2, '4': 1})