본문 바로가기

코테연습문제

[Programmers/Python] 튜플

def solution(s):
    answer = []
    sLst = []
    sortedSLst = []
    # 앞, 뒤 두 개씩 있는 {, }를 제거한 후 .split("},{")
    ss = s[2:-2].split("},{")
    # 풀이과정 1
    for i in ss:
        sLst.append(i.split(','))
    
    # 풀이과정 2
    sortedSLst = sorted(sLst, key=len)
    
    # 풀이과정 3
    for element in sortedSLst:
        for num in element:
            n = int(num)
            if n not in answer:
                answer.append(n)
    return answer

풀이과정

1. 주어진 s를 리스트로 나타냄 → 문자열에서 "{ }" 사이에 "," 로 구분된 문자열들을 추출

2. 각 원소의 길이를 기준으로 오름차순 sLst 정렬

3. for문을 돌면서 새로 추가된 숫자를 answer에 append


Dictionary를 이용한 다른 풀이

def solution(s):
    answer = []
    sLst = []
    sortedSLst = []
    lstDict = {}
    # 앞, 뒤 두 개씩 있는 {, }를 제거한 후 .split("},{")
    ss = s[2:-2].split("},{")
    # 주어진 s를 리스트로
    for i in ss:
        sLst.append(i.split(','))
    
    # 풀이과정 2
    for element in sLst:
        for num in element:
            n = int(num)
            if n in lstDict:
                lstDict[n] += 1
            else:
                lstDict[n] = 1
                
    # 풀이과정 3        
    sortedDict = sorted(lstDict.items(), key = lambda item: item[1], reverse=True)
    
    # 풀이과정 4
    for i in range(len(sortedDict)):
        answer.append(sortedDict[i][0])
    return answer

풀이과정

1. 주어진 s를 리스트로 나타냄  문자열에서 "{ }" 사이에 "," 로 구분된 문자열들을 추출

2. dictionary에 각 숫자가 몇 번 나왔는지 숫자를 세서 {숫자:개수} 형태로 저장

3. value(개수)를 기준으로 정렬

4. 정렬된 리스트의 key만 answer에 append


 

 

 

-) dictionary를 사용하는 방법으로 구현을 하려다가 막혔을 때, 각 원소의 길이를 기준으로 정렬해둔 후에 새로 추가된 숫자만 찾으면 된다는 아이디어를 생각해내지 못했다. 여러가지 방향으로 생각해보는 게 필요할 것 같다.

 

+) 처음 생각한 방법인 dictionary를 사용한 방법은 처음엔 구현이 막막했지만, 주어진 s를 리스트로 바꾸고 난 뒤에는 쉽게 구현하였다. 이 방법이 시간도 덜 걸리고 더 좋은 것 같다.