코딩테스트 연습 - 튜플
"{{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(1, len(a)):
new = a[i] - a[i - 1]
ans.append(new)
return ans
s = "{{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']
'알고리즘 문제풀이 with 파이썬 > 프로그래머스' 카테고리의 다른 글
[문자열] 메뉴 리뉴얼 (0) | 2021.09.30 |
---|---|
[구현] 거리두기 확인하기 (0) | 2021.09.26 |
[문자열] 뉴스 클러스트링 (0) | 2021.09.21 |
[해시] 전화번호 목록 (0) | 2021.09.07 |
[문자열, 정규식] 수식 최대화 (0) | 2021.09.02 |