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