코딩테스트/백준

[프로그래머스 LV2] 튜플 - Python

Moonsu99 2024. 3. 28. 00:18

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

 

프로그래머스

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

programmers.co.kr

 

 

[2019년 카카오 개발자 겨울 인턴십 문제]

 

풀이 과정 생각?

 

입력이 { { }, { } } 형태니까 슬라이싱으로 시작끝 중괄호 제거 하고  ,를 기준으로 split

예제로 본다면

{{2},{2,1},{2,1,3},{2,1,3,4}}
-> s[2:-2] 로 슬라이싱 수행 시 2},{2,1},{2,1,3},{2,1,3,4
-> .split("},{") 추가 하면 -> ['2', '2,1', '2,1,3', '2,1,3,4']

 

저 split한 결과의 각 집합을 List로 변환하고 각각 원소를 정수로 변환 처리

s = ['2', '2,1', '2,1,3', '2,1,3,4']
-> 리스트와 정수처리한 결과값은 [[2], [2, 1], [2, 1, 3], [2, 1, 3, 4]] 를 기대한다.

 

그 다음 원소 갯수가 작은 것이 먼저 올 수 있도록 sorting

sort(key=len)

 

그 후 정렬된 집합을 돌면서 결과값 생성을 하면 되는 어떻게 보면 간단한 문제 였다!

 

 

풀이코드

def solution(s):
    # 단계 1: '{', '}'를 제거하고, 각 집합을 구분하기 위해 ','를 기준으로 분리
    s = s[2:-2].split("},{")
    
    # 각 집합을 리스트의 리스트로 변환하고, 각 원소를 정수로 변환
    sets = [list(map(int, x.split(','))) for x in s]
    
    # 단계 2: 각 집합을 원소의 수에 따라 정렬
    sets.sort(key=len)
    
    # 단계 3: 정렬된 집합을 돌면서 결과 배열 생성
    answer = []
    for subset in sets:
        for num in subset:
            if num not in answer:
                answer.append(num)
                break
    return answer