Conversation
codeisneverodd
left a comment
There was a problem hiding this comment.
고생하셨습니다!! 코멘트는 참고용으로만 확인해주세요 😄
변경사항을 반영하고 싶다면, minkyeongJ의 main 브랜치에 변경사항을 push 하시면 됩니다!
아래의 참고사항을 모두 종합하면 아래와 같은 코드로도 가능합니다 👍
function solution(skill, skill_trees) {
return skill_trees
.map(tree =>
[...skill].map(s => {
const num = [...tree].findIndex(t => t === s);
return num < 0 ? 27 : num;
})
)
.filter(c => c.every((v, i) => (i < c.length - 1 ? v <= c[i + 1] : true))).length;
}
level-2/스킬트리&49993&.js
Outdated
There was a problem hiding this comment.
문자열은 유사배열 객체이기 때문에 위와 같은 방법도 가능합니다!
다만 함수는 최대한 적게 써야 좋으니 아래와 같이 가독성 좋은 방법도 고려해보세요!
| const skillArr = Array.from(skill); | |
| const skillArr = [...skill] |
혹은
const skillArr = skill.split('')
level-2/스킬트리&49993&.js
Outdated
There was a problem hiding this comment.
| const skillTreesElementArr = skill_trees.map(skillTreesElement => Array.from(skillTreesElement)); | |
| const skillTreesElementArr = skill_trees.map(skillTreesElement => [...skillTreesElement]); |
level-2/스킬트리&49993&.js
Outdated
There was a problem hiding this comment.
for 문 에서 if 조건에 해당하는 값을 발견하지 못했을 때 '27' 이라는 값을 push 하는 것이 목표였다면 아래와 같은 표현도 고려해보세요!
forEach 내에서 return은 다음 forEach 의 반복으로 가는 것을 의미합니다!
| skillArr.forEach((skillElement, j) => { | |
| for(let number = 0; number < skillTreesElement.length; number++){ | |
| if(skillTreesElement[number] === skillElement){ | |
| //같다면 number을 check[i]에 push | |
| checkArr[i].push(number); | |
| break; | |
| }else if(skillTreesElement.length === number+1 && checkArr[i].length === j){ | |
| //값을 다 비교했을 때 매칭되는 것이 없으면 27 입력 | |
| checkArr[i].push(27); | |
| } | |
| } | |
| }) | |
| skillArr.forEach((skillElement, j) => { | |
| for(let number = 0; number < skillTreesElement.length; number++){ | |
| if(skillTreesElement[number] === skillElement){ | |
| checkArr[i].push(number); | |
| return; | |
| } | |
| } | |
| checkArr[i].push(27); | |
| }) |
level-2/스킬트리&49993&.js
Outdated
There was a problem hiding this comment.
고차함수를 사용하면 코드가 조금 checkArr를 만드는 과정이 더 간결해질 수 있을 것 같습니다!!
아래와 같은 방법을 고려해보세요 😄
| const skillArr = Array.from(skill); | |
| const skillTreesElementArr = skill_trees.map(skillTreesElement => Array.from(skillTreesElement)); | |
| //스킬이 있는 위치 체크 | |
| let checkArr = []; | |
| /** skillTreesElementArr에 있는 배열 순서대로 skillArr의 값과 비교 | |
| * 일치하는 값은 skillArr의 배열번호로 변환하여 새로운 배열에 삽입 | |
| * 배열을 모두 순환했는데도 값이 일치하지 않으면 27 반환 | |
| */ | |
| skillTreesElementArr.forEach((skillTreesElement, i) => { | |
| checkArr[i] = []; | |
| skillArr.forEach((skillElement, j) => { | |
| for(let number = 0; number < skillTreesElement.length; number++){ | |
| if(skillTreesElement[number] === skillElement){ | |
| //같다면 number을 check[i]에 push | |
| checkArr[i].push(number); | |
| break; | |
| }else if(skillTreesElement.length === number+1 && checkArr[i].length === j){ | |
| //값을 다 비교했을 때 매칭되는 것이 없으면 27 입력 | |
| checkArr[i].push(27); | |
| } | |
| } | |
| }) | |
| }) | |
| const checkArr = skill_trees.map(tree => | |
| [...skill].map(s => { | |
| const num = [...tree].findIndex(t => t === s); | |
| return num < 0 ? 27 : num; | |
| }) | |
| ); |
level-2/스킬트리&49993&.js
Outdated
There was a problem hiding this comment.
checkArr에서 오름차순인 것의 갯수를 찾는 것이 목적이라면 아래와 같은 방법도 고려해보세요!
| checkArr.forEach(checkArrElement => { | |
| //배열의 길이가 1일 때 answer++ | |
| if(skill.length === 1){ | |
| answer++; | |
| } | |
| //배열 앞 뒤 크기 비교해서 오름차순인지 확인 | |
| for(let i = 1; i < checkArrElement.length ; i++){ | |
| if(checkArrElement[i-1] > checkArrElement[i]){ | |
| //오름차순이 아니면 break | |
| break; | |
| }else if(i === checkArrElement.length - 1){ | |
| //오름차순이면 answer++; | |
| answer++; | |
| } | |
| } | |
| }); | |
| return answer; | |
| return checkArr.filter(c => c.every((v, i) => (i < c.length - 1 ? v <= c[i + 1] : true))).length; | |
|
와,,, 정성스런 피드백 정말 감사합니다!! 피드백 내용 참고해서 수정하여 push 해보도록 하겠습니다! |
새롭게 추가된 문제 풀이
기존 풀이에 추가한 풀이
레벨 2 / 스킬트리 17150a9
관련 이슈
새로운 방식의 풀이를 추가하였습니다.