⭐️ 튜플
레벨2 문제입니다.
split 을 이용해서 잘 나눠주고 길이로 정렬을 해줍니다. 그 후 set의 difference 함수를 이용해서 차이만큼 결과 리스트에 더해줍니다.
def solution(s):
answer = set()
result = []
srcs = s[2:-2].split('},{')
srcs.sort(key=lambda x : len(x))
for src in srcs:
temp = set(list(map(int, src.split(','))))
result = result + list(set.difference(temp, answer))
answer=temp
return result
다음은 프로그래머스 다른 사람 풀이에서 본 좋은 풀이입니다.
def solution(s):
# {{, }}를 제거 후 },{ 으로 나누기
data = s[2:-2].split("},{")
# 길이 별로 오름차순 정렬
data = sorted(data, key=lambda x: len(x))
answer = []
for item in data:
# 각각의 원소로 분류 후
print(item)
item = list(map(int, item.split(",")))
print(item)
for value in item:
# 포함되어 있지 않으면 input
if value not in answer:
answer.append(value)
return answer
다음은 JavaScript 풀이 입니다. 주로 Python으로 풀지만 JavaScript로 푸는 것도 익숙해지려고 연습중입니다.!!!!
function solution(s) {
let answer = [];
console.log(s)
let replaced = s.split('').map(str => str.replace('{', '[').replace('}',']'));
let arr = JSON.parse(replaced.join('')).sort((a,b) => a.length - b.length);
console.log(arr)
arr.forEach(a => answer.push(...a.filter(item => !answer.includes(item))))
return answer;
}
const tupleFrom = (str) =>
str.slice(2, -2).split('},{')
.map((it) => toNumbers(it))
.sort(accendingByLength)
.reduce((acc, cur) =>
[...acc, ...cur.filter((it) => !acc.includes(it))], []);
const toNumbers = (str) => str.split(',').map(it => Number(it));
const accendingByLength = (arr1, arr2) => arr1.length - arr2.length;
const solution = (s) => tupleFrom(s);
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[2021 KAKAO BLIND RECURITMENT] 메뉴 리뉴얼 (0) | 2022.05.07 |
---|---|
[2021 카카오 채용 연계형 인턴십] 거리두기 확인하기 (0) | 2022.04.30 |
[Summer/Winter Coding(~2018)] 지형 편집 (1) | 2022.02.20 |
[2022 KAKAO BLIND RECRUITMENT] 양과 늑대 (0) | 2022.02.19 |
[2021 카카오 채용연계형 인턴쉽] 표 편집 (0) | 2022.02.17 |