본문 바로가기
코딩테스트/코딩테스트 문제

코딩테스트 준비 - 프로그래머스: 튜플/2019 카카오 개발자 겨울 인턴십 풀이 (파이썬)

by 공부가싫다가도좋아 2021. 7. 2.
반응형

프로그래머스: 튜플 풀이


문제풀러가기

https://programmers.co.kr/learn/courses/30/lessons/64065?language=python3 

 

코딩테스트 연습 - 튜플

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


문제 분석

1. 저 문자열안에 있는 숫자들만 꺼내, 리스트로 만들면 쉽게 해결할 수 있다.

2. 문자열 길이가 작은 순서대로 정렬한 후, 앞 부터 차례대로 숫자를 리스트에 중복되지 않게 넣어주면 된다.


코드1: 

* 효율성이 낮지만, 일반적으로 생각해낼 수 있는 로직

def solution(s):
    s=s[1:-1]
    s=s.split("},")
    for i in range(len(s)):
        if i==((len(s))-1):
            s[i]=(s[i])[1:-1]
        else:
            s[i]=(s[i])[1:]
    s=sorted(s, key=lambda x:len(x))
    rs=[]
    string=""
    for i in s:
        a=i.split(',')
        for j in a:
            if int(j) not in rs:
                print(j)
                rs.append(int(j))
    return rs

 

코드1 풀이

def solution(s):
    s=s[1:-1] #s문자열의 처음과 끝에 있는 대 괄호를 잘라준다
    s=s.split("},") # "},"를 기준으로 잘라서 리스트를 만들어준다.
    # s=['{2', '{2,1', '{2,1,3', '{2,1,3,4}'] 이런식으로 리스트가 만들어진다.
    
    for i in range(len(s)):
        if i==((len(s))-1): # s리스트에서 마지막 요소의 "{"과 "}"를 잘라준다
            s[i]=(s[i])[1:-1] 
        else:       #s리스트에서 마지막 요소 외의 요소들에서, "{"를 잘라준다
            s[i]=(s[i])[1:]
    s=sorted(s, key=lambda x:len(x)) #길이가 짧은순으로 정렬한다.
    
    #s=['2', '2,1', '2,1,3', '2,1,3,4']
    rs=[]
    string=""
    for i in s:
        a=i.split(',')  #요소마다 ","를 기준으로 다른 리스트를 만들어준다
        for j in a: #새로 만든 리스트안의 요소를 rs리스트에 집어 넣는다.
            if int(j) not in rs: #rs에 없는 요소만 집어넣고 rs에 이미 있으면 패스한다.
                print(j)
                rs.append(int(j))
    return rs

코드2 :

*코드1과 같지만 코드1을 조금 더 다듬은 코드

def solution(s):
    s=s[2:-2].split("},{") #코드1의 for문 부분을 이 한줄로 대체할 수 있다.
    
    s=sorted(s, key=lambda x:len(x))
    rs=[]
    string=""
    for i in s:
        a=i.split(',')
        for j in a:
            if int(j) not in rs:
                rs.append(int(j))
    return rs

<잡담>

 잡담부분에는 항상 문제를 풀고 난 후의 느낀점 혹은 배운점을 기록하려고 합니다. 

이번 문제는 어렵지는 않았지만, 처음에 잘못 접근하면 꼬여버릴 수 있는 문제였던것 같습니다.

 

처음에 split("}.{") 를 해주면 쉬웠을 거를..!!

바보같이 for문 돌려서 더 복잡하게 코드를 짜게 됐네요 ㅠ_ㅠ

다음엔 처음부터 효율성 좋은 코드를 생각해낼 수 있길..!! 

반응형

댓글