2024. 4. 3. 20:44ㆍ알고리즘/프로그래머스
https://school.programmers.co.kr/learn/courses/30/lessons/64065
🚀문제 해석
우선 집합으로 들어오는 문자열을 배열의 형태로 포맷팅을 해야한다.
그리고 배열의 요소를 길이를 기준으로 오름차순 정렬을 한다.
그런 다음 첫번째 요소를 저장하고 그 다음 요소중에 첫번째 요소에 포함되지 않은 요소를 찾아주면 된다.
전체 과정을 예시로 설명하자면 다음과 같다.
{ {2, 1}, {2}, {1,2,3}, {1,2,4,3} } 이렇게 집합이 들어오면,
{ {2, 1}, {2}, {1,2,3}, {1,2,4,3} } ➡ [ [2, 1], [2], [1,2,3], [1,2,4,3] ] 배열로 바꾼다.
그리고 길이를 기준으로 오름차순 정렬을 한다. ➡ [ [2], [2,1], [1,2,3], [1,2,4,3] ]
첫번째 요소를 result에 저장하고 그 다음 요소중 첫번째 요소에 포함되지 않는 요소들을 찾아준다.
사실 이 마지막 과정을 구현하는 것이 가장 어려웠다. 머리로는 알겠는데 막상 코드로 구현하려니 상당히 애를 먹었다...
🛠코드 분석
어떤 의도로 코드를 작성했는지 분석해보자.
function solution(s) {
const answer = [];
let str = s.replace('{{',"").replace('}}',"").split("},{");
let a = [];
for(let i = 0; i<str.length; i++) a.push(str[i].split(','));
a.sort((a, b)=> a.length - b.length);
answer.push(Number(a[0][0]));
for(let i = 1; i<a.length; i++){
const e = solve(a[i], answer);
answer.push(e);
}
return answer;
}
function solve(a, b){
for (let i=0; i<b.length; i++){
a = a.filter(ele=>ele!==String(b[i]));
}
return Number(a[0]);
}
let str = s.replace('{{',"").replace('}}',"").split("},{");
let a = [];
for(let i = 0; i<str.length; i++) a.push(str[i].split(','));
이 코드는 집합의 형태로 들어오는 문자열을 배열로 포맷팅하는 코드이다.
평소에 replace를 잘 사용하지 않았는데 이번 기회에 이렇게 사용할 수 있다는 것을 깨달았다.
function solve(a, b){
for (let i=0; i<b.length; i++){
a = a.filter(ele=>ele!==String(b[i]));
}
return Number(a[0]);
}
이 부분이 구현하기 가장 까다로운 부분이었다.
filter 메서드를 사용해서 answer에 들어있지 않은 요소들을 걸러낸다.
그런다음 걸러진 요소를 다시 answer에 추가하면서 튜플을 완성하면 된다.
이 과정을 하나의 함수에 적으려고 하니 더 어려웠던 거 같다. 복잡한 기능을 수행한다면 함수로 분리해도 괜찮다.
'알고리즘 > 프로그래머스' 카테고리의 다른 글
Level 2️⃣ - 방문길이 (0) | 2024.04.07 |
---|---|
Level 2️⃣ - 전화번호 목록 (1) | 2024.04.05 |
Level 2️⃣ - 기능개발 (0) | 2024.04.03 |
Level 2️⃣ - H-Index (0) | 2024.04.03 |
Level 2️⃣ - n^2 배열 자르기 (0) | 2024.04.03 |