코딩테스트 연습 - 튜플

"{{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
24
25
import re
 
def solution(s):
    # s = "{{1,2,3},{2,1},{1,2,4,3},{2}}"
 
    s = s[1:-2]  # 1
    temp = re.sub('{''', s)  # 2
    temp = re.sub(',''+', temp)  # 3
    result = re.sub('}'',', temp)  # 4
    a = eval(result)  # 5
 
    # "{{123}}"의 경우 tuple 이 아닌 int
    if type(a) == int:
        return [a]
    a = sorted(a)  # (2, 3, 6, 10)
 
    ans = [a[0]]
    for i in range(1len(a)):
        new = a[i] - a[i - 1]
        ans.append(new)
    return ans
 
 
= "{{1,2,3},{2,1},{1,2,4,3},{2}}"
print(solution(s))
cs

내 풀이:
1. {1,2,3},{2,1},{1,2,4,3},{2

2. 1,2,3},2,1},1,2,4,3},2
3. 1+2+3}+2+1}+1+2+4+3}+2
4. 1+2+3,+2+1,+1+2+4+3,+2 
5. (6, 3, 10, 2)

정규식을 사용해보고 싶어서 푼 풀이라 깔끔하지는 않다.
단순 계산 (a[i] - a[i-1]) 으로 값을 한개씩 추가했다.

 

다른 풀이:
s = "{{1,2,3},{2,1},{1,2,4,3},{200}}"
s = Counter(re.findall('\d+', s))  #  Counter({'1': 3, '2': 3, '3': 2, '4': 1, '200': 1})

# + : 문자가 한번 이상 존재, +가없다면 20은 '2','0','0' 으로 쪼개진다.

s = re.findall('\d+', s)  #  ['1', '2', '3', '2', '1', '1', '2', '4', '3', '200']
s = re.findall('\d', s)  # ['1', '2', '3', '2', '1', '1', '2', '4', '3', '2', '0', '0']

+ Recent posts