개발자 쿠키

[프로그래머스/python] Lv.2 2019 카카오 개발자 겨울 인턴십 튜플 본문

algorithm

[프로그래머스/python] Lv.2 2019 카카오 개발자 겨울 인턴십 튜플

개발자 쿠키 2024. 7. 8. 19:42

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

 

프로그래머스

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

programmers.co.kr

 

def solution(s):
    
    s = s[2:-2].split("},{")
    arr = []
    for i in range(len(s)):
        s1 = s[i].split(",")
        arr.append(set(s1))
    
    arr.sort(key=lambda x: len(x))
    
    ans = set()
    res = []
    for a in arr:
        tmp = a - ans
        res.append(list(tmp)[0])
        ans = ans | tmp
    
    res = [int(i) for i in res]
    return res

 

풀이

배열 길이를 기준으로 오름차순 정렬

문자열 처리, 예외 처리에 유의해야 함.

 

#1 문자열 처리

s = "{{2},{2,1},{2,1,3},{2,1,3,4}}"
  • set 안에 set이 있는 구조. 시작 문자열과 끝 문자열 2개의 {와 } 글자를 제거해야 함.
  • {2}, {2,1}과 같이 서로 다른 집합 간에 }, { 으로 구분되어 있음.
s = s[2:-2].split("},{")

# 출력
['1,2,3', '2,1', '1,2,4,3', '2']
  • ‘1,2,3’ ,를 기준으로 set을 만든다.
for i in range(len(s)):
		s1 = s[i].split(",")
		arr.append(set(s))

arr.sort(key=lambda x: len(x))
  • set 원소의 길이를 기준으로 오름차순 정렬

 

#2 정답 튜플 고르기

    ans = set()
    res = []
    for a in arr:
        tmp = a - ans
        res.append(list(tmp)[0])
        ans = ans | tmp
    
    res = [int(i) for i in res]
    return res
  • 원소의 갯수가 k인 집합과 k+1 집합의 차지합을 tmp에 저장한다.
  • 문제에서 자연수로 반환해야 함. set 자료형의 특성상 값을 접근하기 위해서는 리스트 혹은 튜플로 변환해야 함.
  • list로 변환하고 [0]번째 인덱스 값을 넣는다.
  • 자연수로 반환해야 하기 때문에 [int(i) for i n res]로 res 값의 원소를 자연수로 변환한다.