알고리즘

[프로그래머스] 튜플

hminor 2023. 6. 26. 12:15
# 코드 1

# 정규식을 사용해서 {} 사이의 문자를 찾은 다음
# 해당 길이가 짧은 것을 기준으로 정렬을 오름차순 정렬
# 이후 배열의 요소들을 정수화 시킨 다음 차집합을 이용하기 위해 set화 시킨 다음
# 차집합으로 이전 요소와 비교 후 달라진 값만 배열에 추가 후 리턴 시킴.

import re

def solution(s):
    answer = []
    li = re.findall(r'\{.*?\}', s[1:-1])
    li.sort(key=len)
    li = [set(map(int,i.strip('{}').split(','))) for i in li]
    if len(li) == 1: answer =  list(li[0])
    else:
        for i in range(len(li)-1):
            if i == 0: answer.append(list(li[i])[0])
            answer.append(list(li[i+1].difference(li[i]))[0])
    return answer

 

# 코드 2 (다른 사람 코드 참고)
# 정규식과 Counter를 이용해서 같은 요소가 몇번이나 있는지 조사하는 코드
# 여기서 중요한건 re.findall('\d+', s))을 할 때 '\d'와 '\d+'의 차이점으로
# '\d'의 경우 값 하나하나로 인식해
# 	예를 들어 {20,111},{111} 의 경우 1: 6, 2: 1, 0: 1 이런식으로 나오기에 
# '\d+'를 사용해서 111: 2, 20: 1 이런식으로 해야 이번 문제에서 의도한 대로 풀 수 있다.

from collections import Counter
import re

def solution(s):

    s = Counter(re.findall('\d+', s))
    return [int(k) for k,v in sorted(s.items(), key=lambda x:x[1], reverse=True)]