티스토리 뷰

반응형

문제: 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

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
def solution(s):
    answer = [[] for _ in range(501)]
    check=[0 for _ in range(100001)]
    maxLen=0
    ans=[]
    s=s[1:-1]
    s=s.split('},')
    for val in s:
        if val[-1]!='}':
            val=val[1:].split(',')
            maxLen=max(maxLen,len(val))
            answer[len(val)].append(list(map(int,val)))
        else:
            val=val[1:-1].split(',')
            maxLen=max(maxLen,len(val))
            answer[len(val)].append(list(map(int,val)))
    for i in range(1,maxLen+1):
        val=answer[i][0]
        for x in (val):
            if check[x]==0:
                ans.append(x)
                check[x]=1    
    return ans
cs

이 문제를 처음에 풀었을 때 위와 같이 풀었다.

값을 추출할 때 어떤식으로 접근해야 할지 감이 안와서 처음과 끝을 잘라낸 다음에 split을 }, 로 하고 나면 

마지막 값을 제외하고 나머지는 '{1,2,3,4' 식으로 된다.

그래서 if 와 else문으로 조건을 나누고 해당 크기에 따라 answer에 append한다.

예를 들어 val='{4,2,3' 이라 하자

그러면 val=val[1:].split(',')을 하면 val=['4','2','3']이 된다.

answer[3].append([4,2,3]) 이런식으로 흐름이 전개된다.

 

그러고 나서 리스트의 크기의 순서에 따라 알파벳을 확인한다.

확인하는 작업은 check에 0,1 에 따른 구분으로 값의 유무를 확인하고 나서 append한다.

 

 

 

1
2
3
4
5
6
7
import re
from collections import Counter
 
def solution5(s):
    s = Counter(re.findall('\d+', s)).most_common()
    return list(map(int, [k for k, v in s]))
 
cs

위의 코드는 프로그래머스에서 상위권에 있는 코드를 변형하였다.

우선 re.findall('\d+',s)를 알아보자면 findall은 해당 조건에 대한 값을 다 찾는 것을 의미하고

'\d+'는 모든 숫자를 의미한다. (='[0-9]+') 그리고 Counter는 해당 리스트 값과 개수를 사전 형식으로 만들어준다. most_common()은 갯수가 많은 순으로 정렬하는 메소드이다. Counter와 most_common()은 많이 쓰이므로 알아두는 것이 좋다.

 

 

 

 

1
2
3
4
5
6
7
8
9
10
11
import collections
def solution4(s):
    answer = []
    s=s.lstrip('{').rstrip('}').split('},{')
    for val in s:
        val=val.split(',')
        for v in val:
            answer.append(int(v))
    s=collections.Counter(answer).most_common()
    return [k for k,v in s]
 
cs

이 코드에서 주목할 것은 lstrip과 rstrip의 사용과 split에 대한 기준이다.

위와 같이 하면 왼쪽으로는 '{'은 다 사라지고 오른쪽으로는 '}'이 사라진다. 그리고 split을 },{ 을 하면 숫자들과 ','만 남게 되므로 ','로 split 한다음에 리스트에 값을 저장한다. 그 다음은 위에서 말했으므로 생략한다.

반응형
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함