문제
https://school.programmers.co.kr/learn/courses/30/lessons/49993
깃허브
접근법
- 문자열과 배열의 활용 문제
1) 사람들의 skill_tree에서 스킬북에 적힌 스킬을 제외한 요소를 제외시킨 뒤
2) 길이를 똑같게 맞춘 뒤 일치하는지 비교한다
3) 일치하면 개수 증가
배열.includes(원소)
- 기본적으로 배열.includes(원소)는 true, false을 반환
- 해당 원소가 배열에 있으면 true, 없으면 false 반환
map에서 includes true, false 반환
let magic = skill_trees[i].split("").map(e => sk.includes(e));
console.log(magic) [ true, false, true, true, false ]
filter에서 includes 만족하는(true) 원소 반환
let magic = skill_trees[i].split("").filter(e => sk.includes(e));
// [ 'B', 'C', 'D' ]
문자열 자르기
문자열.substring(시작점, 길이)
배열.join("")
배열을 문자열로 바꿔준다.
let arr2 = [2,3,4]
return arr2.join(""); // 234
전체 코드
function solution(skill, skill_trees) {
// 문자열을 배열로
let newArr = skill.split("");
//console.log(newArr); [ 'C', 'B', 'D' ]
let str = 0;
let count = 0;
for(let i = 0; i < skill_trees.length; i++){
//newArr이 포함하는 문자인 것들만(true) 반환 => join("")을 이것을 다시 문자열로 반환
str = skill_trees[i].split("").filter(e => newArr.includes(e)).join("");
//console.log(str) 아래 주석 참고
// 정답인 skill 만큼 길이를 자르고 비교 => 같으면 개수 증가
if(str === skill.substring(0, str.length)){
count++;
}
}
return count;
}
// newArr이 포함하는 문자인 것들만(true) 반환 => join("")을 이것을 다시 문자열로 반환
// str = skill_trees[i].split("").filter(e => newArr.includes(e))
// [ 'B', 'C', 'D' ]
// [ 'C', 'B', 'D' ]
// [ 'C', 'B' ]
// [ 'B', 'D' ]
// console.log(skill_trees[i].split(" "))
// [ 'BACDE' ]
// [ 'CBADF' ]
// [ 'AECB' ]
// [ 'BDA' ]
// console.log(skill_trees[i].split(""))
// [ 'B', 'A', 'C', 'D', 'E' ]
// [ 'C', 'B', 'A', 'D', 'F' ]
// [ 'A', 'E', 'C', 'B' ]
// [ 'B', 'D', 'A' ]
'JavaScript > 알고리즘(JS)' 카테고리의 다른 글
[프로그래머스 레벨1] 두 개 뽑아서 더하기 [Javascript/ Set] (0) | 2023.04.20 |
---|---|
[프로그래머스 레벨2] 삼각달팽이 [Javascript/ 이차원 배열 응용] (0) | 2023.04.15 |
[프로그래머스 레벨2] 게임 맵 최단거리 [Javascript/ BFS] (0) | 2023.03.26 |
[프로그래머스 레벨1] 체육복 [Javascript/ 그리디] (0) | 2023.03.21 |
[프로그래머스 레벨2] 타켓 넘버 [Javascript/ DFS] (0) | 2023.03.06 |