본문 바로가기

알고리즘/카카오 EASY

튜플 (Level 2)

문제

 

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

 

코딩테스트 연습 - 튜플

"{{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

 

내 풀이

 

"{{2},{2,1},{2,1,3},{2,1,3,4}}" 문자열을 [{2}, {2,1}, {2,1,3}, {2,1,3,4}]와 같이 원소의 자료형이 set()인 리스트 lst를 만들었다. 

그리고 lst를 길이가 짧은 원소가 앞에 오도록 정렬하였다.

lst를 돌면서 현재 원소와 앞의 원소와의 차집합을 answer에 int형으로 변환하여 넣고, answer를 반환하였다.

 

def solution(s):
    answer = []
    s = s[1:-1].split('}')[:-1]
    lst = []
    for x in s:
        if x[0]== ',': lst.append(set(x[2:].split(',')))
        else: lst.append(set(x[1:].split(',')))
    lst.sort(key=lambda x: len(x))
    
    pre = set()
    for l in lst:
        answer.append(int(''.join(list(l - pre)))) # 차집합
        pre = l.copy()
    
    return answer

 

 

과거 내 풀이

 

지저분하다. 너무 길다. 현재 내 풀이랑 set을 사용한다는 점은 동일한 것 같다.

 

def solution(s):
    answer = []
    s = s[1:len(s)-1]
    indices = []
    for i in range(len(s)):
        if s[i] == ',' and s[i-1] == '}' and s[i+1] == '{':
            indices.append(i)

    if len(indices) == 0:
        answer.append(s)
    elif len(indices) == 1:
        answer.append(s[:indices[0]])
        answer.append(s[indices[0]+1:])
    else:
        answer.append(s[:indices[0]])
        for i in range(len(indices)-1):
            answer.append(s[indices[i]+1:indices[i+1]])
        answer.append(s[indices[-1]+1:])

    res = []
    for ans in answer:
        tmp = ans[1:len(ans)-1].split(',')
        res.append(set(tmp))
    res.sort(key = lambda x:len(x))

    final = set()
    total = []
    for r in res:
        diff = r.difference(final)
        final.update(diff)
        total.append(list(diff))

    total = sum(total, [])
    total = list(map(int, total))
    return total

 

총평

알고리즘 푸는 습관이 좀 더 좋은 방향으로 바꼈나?

'알고리즘 > 카카오 EASY' 카테고리의 다른 글

후보키 (Level 2)  (0) 2022.07.07
순위 검색 (Level 2)  (0) 2022.07.05
수식 최대화 (Level 2)  (0) 2022.07.04
거리두기 확인하기 (Level 2)  (0) 2022.06.30
뉴스 클러스터링 (Level 2)  (0) 2022.06.28