코딩테스트 연습 - 튜플
"{{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
나의 풀이
- replace 함수 사용
- 숫자만 남긴 리스트를 구한 후 각 숫자의 개수를 세어 순서를 맞춰 리스트에 추가해준다.
def solution(s):
s = s.replace('{', '')
s = s.replace('}', '')
num_list = list(map(int, s.split(',')))
answer = [0] * len(set(num_list))
for num in set(num_list):
answer[len(answer) - num_list.count(num)] = num
return answer
다른 사람의 풀이
1.
- replace 함수를 이용하지 않고 strip 함수 사용 코드
s1 = s.lstrip('{').rstrip('}').split('},{')
2.
- {{, }}를 제거 후 },{ 으로 나눈 후 길이 별로 오름차순 정렬
print(data) --> ['2', '2,1', '2,1,3', '2,1,3,4']
- 이후 각각의 원소로 분류하고 포함되어 있지 않으면 input
(key = len을 사용할 때에는 리스트가 int형이 들어있으면 안됨)
def solution(s):
# {{, }}를 제거 후 },{ 으로 나누기
data = s[2:-2].split("},{")
# 길이 별로 오름차순 정렬
data = sorted(data, key=lambda x: len(x))
#data = sorted(data, key = len) 과 동일
answer = []
for item in data:
# 각각의 원소로 분류 후
item = list(map(int, item.split(",")))
for value in item:
# 포함되어 있지 않으면 input
if value not in answer:
answer.append(value)
return answer
3. 정규식 이용
import re
from collections import Counter
def solution(s):
s = Counter(re.findall('\d+', s))
return list(map(int, [k for k, v in sorted(s.items(), key=lambda x: x[1], reverse=True)]))
print(re.findall('\d+', s)) | ['2', '2', '1', '2', '1', '3', '2', '1', '3', '4'] |
print(Counter(re.findall('\d+', s))) | Counter({'2': 4, '1': 3, '3': 2, '4': 1}) |
'study > 알고리즘' 카테고리의 다른 글
[알고리즘/프로그래머스] 교점에 별 만들기 (0) | 2021.12.21 |
---|---|
[알고리즘/프로그래머스] 비밀지도 (0) | 2021.12.17 |
[알고리즘/프로그래머스] 숫자 문자열과 영단어 (0) | 2021.12.13 |
[알고리즘/백준] 11724번 연결 요소의 개수 (0) | 2021.12.10 |
[알고리즘/백준] 2644번 촌수계산 (0) | 2021.12.09 |