Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 26 | 27 | 28 | 29 | 30 |
Tags
- ROT13
- mutation
- html
- vanila js
- 자바스크립트
- graphql
- Bandit
- javascript
- 프로그래머스
- 실패율
- 카카오
- 피보나치 수
- linux
- tr명령어
- 자바스크립트의 역사
- await
- typescript
- Query
- RestAPI
- typeorm
- kakao
- 코딩테스트
- node
- js
- REST API
- 코딩태스트
- 모던 자바스크립트
- JavaStritp
- 백준
- nestjs
Archives
- Today
- Total
꿀 떨어지는 코딩 양봉장
프로그래머스_Level.2 스킬트리 본문
1.문제설명
문제: 스킬트리
programmers.co.kr/learn/courses/30/lessons/49993
선행 스킬이란 어떤 스킬을 배우기 전에 먼저 배워야 하는 스킬을 뜻합니다.
예를 들어 선행 스킬 순서가 스파크 → 라이트닝 볼트 → 썬더일때, 썬더를 배우려면 먼저 라이트닝 볼트를 배워야 하고, 라이트닝 볼트를 배우려면 먼저 스파크를 배워야 합니다.
위 순서에 없는 다른 스킬(힐링 등)은 순서에 상관없이 배울 수 있습니다. 따라서 스파크 → 힐링 → 라이트닝 볼트 → 썬더와 같은 스킬트리는 가능하지만, 썬더 → 스파크나 라이트닝 볼트 → 스파크 → 힐링 → 썬더와 같은 스킬트리는 불가능합니다.
선행 스킬 순서 skill과 유저들이 만든 스킬트리1를 담은 배열 skill_trees가 매개변수로 주어질 때, 가능한 스킬트리 개수를 return 하는 solution 함수를 작성해주세요.
2. 제한 사항
- 스킬은 알파벳 대문자로 표기하며, 모든 문자열은 알파벳 대문자로만 이루어져 있습니다.
- 스킬 순서와 스킬트리는 문자열로 표기합니다.
- 예를 들어, C → B → D 라면 "CBD"로 표기합니다
- 선행 스킬 순서 skill의 길이는 1 이상 26 이하이며, 스킬은 중복해 주어지지 않습니다.
- skill_trees는 길이 1 이상 20 이하인 배열입니다.
- skill_trees의 원소는 스킬을 나타내는 문자열입니다.
- skill_trees의 원소는 길이가 2 이상 26 이하인 문자열이며, 스킬이 중복해 주어지지 않습니다.
3.입출력 예
skill | skill_trees | return |
"CBD" | ["BACDE", "CBADF", "AECB", "BDA"] | 2 |
📌나의 풀이
skill_trees[i][j]가 skill 에 있다면 t에 추가
for문을 한바퀴 다돌면 temp에 t를 추가
temp[i]=== skill 0부터 temp[i]의 길이 만큼 이라면
answer+=1;
function solution(skill, skill_trees) {
var answer = 0;
var temp = [];
for(let i=0; i<skill_trees.length; i++){
var t = '';
for(let j=0; j<skill_trees[i].length; j++){
if(skill.includes(skill_trees[i][j])){ //skill에 들어있는 것만
t+=skill_trees[i][j];
}
}
temp.push(t);
}
for(let i=0; i<temp.length; i++){
if(temp[i]===skill.slice(0,temp[i].length)){
answer+=1;
}
}
return answer;
}
처음에 includes로 확인하는 방법 외의 replace를 사용하는 방법이 없을까 고민했다. 하지만 내가 알고 있는 replace는 a 값을 특정 값으로 바꿔주는 것이지 a가 아닌 값을 바꿔주는 것은 몰랐다. 또 한번에 skill에 있는 값 외에 값들을 바꿔줘야 한다.
다른 사람의 풀이를 보던 도중 정규식을 사용하여 푼 방법을 보았다.
function solution1(skill, skill_trees) {
var answer = 0;
//정규식에 문자열 변수 넣기 객체를 생성해서
//^의 의미: 부정!
var regex = new RegExp(`[^${skill}]`, 'g');
//console.log(regex);
return skill_trees
.map((x) => x.replace(regex, ''))
.filter((x)=>{
//x의 indexOf가 0이고
//x===""이라면: 순서 상관없는 스킬들만 선택했을 때
return skill.indexOf(x) ===0 || x==="";
}).length;
}
💡배운점
- 정규식에서 ^는 부정을 뜻한다.
'알고리즘 > 프로그래머스' 카테고리의 다른 글
프로그래머스_Level.2 타겟넘버 (0) | 2021.05.08 |
---|---|
프로그래머스_Level.2 124나라의 숫자 (0) | 2021.05.07 |
프로그래스_Level.2 게임 맵 최단거리 (0) | 2021.05.07 |
프로그래머스_Level.2 구명보트 (0) | 2021.05.06 |
프로그래머스_Level.2 멀쩡한 사각 (0) | 2021.05.06 |