Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

레벨 2 / 스킬트리 - feat: 풀이 추가 #112

Open
wants to merge 1 commit into
base: main
Choose a base branch
from

Conversation

minkyeongJ
Copy link

새롭게 추가된 문제 풀이

기존 풀이에 추가한 풀이

레벨 2 / 스킬트리 17150a9

관련 이슈

새로운 방식의 풀이를 추가하였습니다.

Copy link
Owner

@codeisneverodd codeisneverodd left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

고생하셨습니다!! 코멘트는 참고용으로만 확인해주세요 😄
변경사항을 반영하고 싶다면, 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;
}


//파라미터로 받은 값을 모두 비교가능하게 쪼갬
const skillArr = Array.from(skill);
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

문자열은 유사배열 객체이기 때문에 위와 같은 방법도 가능합니다!
다만 함수는 최대한 적게 써야 좋으니 아래와 같이 가독성 좋은 방법도 고려해보세요!

Suggested change
const skillArr = Array.from(skill);
const skillArr = [...skill]

혹은
const skillArr = skill.split('')

//파라미터로 받은 값을 모두 비교가능하게 쪼갬
const skillArr = Array.from(skill);
const skillTreesElementArr = skill_trees.map(skillTreesElement => Array.from(skillTreesElement));
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
const skillTreesElementArr = skill_trees.map(skillTreesElement => Array.from(skillTreesElement));
const skillTreesElementArr = skill_trees.map(skillTreesElement => [...skillTreesElement]);

Comment on lines +36 to +47
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);
}
}
})
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

for 문 에서 if 조건에 해당하는 값을 발견하지 못했을 때 '27' 이라는 값을 push 하는 것이 목표였다면 아래와 같은 표현도 고려해보세요!
forEach 내에서 return은 다음 forEach 의 반복으로 가는 것을 의미합니다!

Suggested change
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);
})

Comment on lines +24 to +48
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);
}
}
})
})
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

고차함수를 사용하면 코드가 조금 checkArr를 만드는 과정이 더 간결해질 수 있을 것 같습니다!!

아래와 같은 방법을 고려해보세요 😄

Suggested change
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;
})
);

Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

레퍼런스

Comment on lines +51 to +68
//배열의 길이가 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;
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

checkArr에서 오름차순인 것의 갯수를 찾는 것이 목적이라면 아래와 같은 방법도 고려해보세요!

Suggested change
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;

Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

레퍼런스

@minkyeongJ
Copy link
Author

와,,, 정성스런 피드백 정말 감사합니다!! 피드백 내용 참고해서 수정하여 push 해보도록 하겠습니다!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants