DM Log

[2019 카카오 개발자 겨울 인턴십] 튜플 - Python / JavaScript 본문

알고리즘/프로그래머스

[2019 카카오 개발자 겨울 인턴십] 튜플 - Python / JavaScript

Dev. Dong 2025. 4. 15. 22:17

문제 링크 - https://school.programmers.co.kr/learn/courses/30/lessons/64065

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

[문제 간단 요약]

1. 문자열로 표현된 튜플 정보가 주어졌을 때, 실제 튜플을 반환하는 문제

2. 집합이 하나씩 늘어날 때 새로 추가되는 숫자만 추적하면 튜플 반환 가능

[문제 해결 방안]

1. 문자열을 파싱하여 각 리스트로 구성

2. 리스트를 원소 수가 적은 수로 정렬

3. 새로 등장하는 숫자만 추출

 

[문제 해결 코드 - python]

def solution(s):
    arr = []
    s=s[1:-1]
    li = ''
    for i in s:
        if i == '{':
            li=''
        elif i == '}':
            arr.append(list(li.split(',')))
            li=''
        else:
            li+=i
    arr.sort(key=lambda x:len(x))
    answer = []
    for li in arr:
        for num in li:
            if int(num) not in answer:
                answer.append(int(num))
    return answer
 
코드 개선점 
- 해당 부분 리스트가 아닌 set을 사용할 경우 not in 부분에서 O(n)에서 O(1)로 개선 가능
    answer = []
    for li in arr:
        for num in li:
            if int(num) not in answer:
                answer.append(int(num))

- 정규 표현식으로도 문자열 리스트 변환 가능

 

[문제 해결 코드 - javascript]

function solution(s) {
    let arr = []
    s = s.slice(1,-1)
    let li = ''
    for (let i of s) {
        if (i === '{') {
            li = '';
        } else if (i === '}'){
            arr.push(li.split(','))
            li = '';
        } else {
            li += i
        }
    }
    
    arr.sort((a,b) => a.length - b.length);
    const answer =[]
    const set_arr = new Set();
    for (let li of arr) {
        for (let num of li) {
            num = parseInt(num)
            if (!set_arr.has(num)) {
                answer.push(num);
                set_arr.add(num)
            }
        }
    }
    return answer;
}