728x90
문제 링크
초기 정답 코드
function solution(cards1, cards2, goal) {
let answer = "Yes";
// 여기에 이전 사용한 카드 뭉치 명 저장
let lastCards = "cards2";
// 여기에 만들어지는 문장 저장
let sentence = [];
// 각각의 카드들에서 하나씩 빼가면서 0번째 자리에 들어갈 수 있는 지 확인하는 로직
goal.forEach((g) => {
if (g === cards1[0] && cards1) {
sentence.push(cards1[0]);
cards1.shift();
} else if (g === cards2[0] && cards2) {
sentence.push(cards2[0]);
cards2.shift();
} else {
return "No";
}
});
return sentence.join("") === goal.join("") ? "Yes" : "No";
}
함수 소개
function solution(cards1, cards2, goal)
- 이 함수는 카드 뭉치(cards1, cards2)와 목표 문장(goal)을 입력받아 목표 문장을 만들 수 있는지 여부를 반환합니다.
변수 설명
let answer = "Yes"
- 목표 문장을 만들 수 있는지 여부를 저장하는 변수입니다. 초기값은 "Yes"로 설정합니다.
let lastCards = "cards2"
- 이전에 사용한 카드 뭉치의 이름을 저장하는 변수입니다. 초기값은 "cards2"로 설정합니다.
let sentence = []
- 만들어지는 문장을 저장할 배열입니다.
로직 설명
goal.forEach((g) => {...})
- 목표 문장의 각 문자에 대해 반복문을 실행합니다.
if (g === cards1[0] && cards1)
- 만약 목표 문자가 cards1의 첫 번째 카드와 같고, cards1이 비어있지 않다면,
sentence.push(cards1[0])
- 만드는 문장(sentence)에 cards1의 첫 번째 카드를 추가합니다.
cards1.shift()
- cards1의 첫 번째 카드를 제거합니다.
else if (g === cards2[0] && cards2)
- 만약 목표 문자가 cards2의 첫 번째 카드와 같고, cards2가 비어있지 않다면,
sentence.push(cards2[0])
- 만드는 문장(sentence)에 cards2의 첫 번째 카드를 추가합니다.
cards2.shift()
- cards2의 첫 번째 카드를 제거합니다.
else
- 목표 문자를 만들 수 없다면,
return "No"
- "No"를 반환하고 함수를 종료합니다.
return sentence.join("") === goal.join("") ? "Yes" : "No"
- 만들어진 문장(sentence)이 목표 문장(goal)과 같으면 "Yes"를 반환하고, 그렇지 않으면 "No"를 반환합니다.
이 로직을 사용하여 카드 뭉치 2개에서 카드를 차례대로 뽑아 목표 문장을 만들 수 있는지 여부를 확인할 수 있습니다.
1차 개선 - 변수 감소, 로직 개선
사용되지 않는 변수인 answer, lastCards를 삭제하였습니다.
함수를 종료하기 위해 return "No"를 사용하는 대신, answer 변수를 사용하였습니다.
-> 변수를 통해 결과를 추적하고 forEach 문을 완료한 후 반환하여 가독성을 높였습니다.
function solution(cards1, cards2, goal) {
let answer = "Yes";
let sentence = [];
goal.forEach((g) => {
if (g === cards1[0] && cards1) {
sentence.push(cards1[0]);
cards1.shift();
} else if (g === cards2[0] && cards2) {
sentence.push(cards2[0]);
cards2.shift();
} else {
answer = "No";
}
});
return answer === "Yes" && sentence.join("") === goal.join("") ? "Yes" : "No";
}
End
728x90
'Coding Test > Programmers_JavaScript' 카테고리의 다른 글
[JavaScript/프로그래머스] 연습문제 - 덧칠하기 (0) | 2023.05.09 |
---|---|
[JavaScript/프로그래머스] 연습문제 - 기사단원의 무기 (0) | 2023.05.09 |
[JavaScript/프로그래머스] 연습문제 - 최댓값과 최솟값 (0) | 2023.05.08 |
[JavaScript/프로그래머스] Dev-Matching: 웹 백엔드 개발자(상반기) - 로또의 최고 순위와 최저 순위 (0) | 2023.05.08 |
[JavaScript/프로그래머스] 연습문제 - 명예의 전당 (1) (0) | 2023.05.04 |