[JavaScript/프로그래머스] 연습문제 - 카드 뭉치

2023. 5. 8. 20:24·Coding Test/Programmers_JavaScript
728x90

문제 링크

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 


 

초기 정답 코드

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
'Coding Test/Programmers_JavaScript' 카테고리의 다른 글
  • [JavaScript/프로그래머스] 연습문제 - 덧칠하기
  • [JavaScript/프로그래머스] 연습문제 - 기사단원의 무기
  • [JavaScript/프로그래머스] 연습문제 - 최댓값과 최솟값
  • [JavaScript/프로그래머스] Dev-Matching: 웹 백엔드 개발자(상반기) - 로또의 최고 순위와 최저 순위
ThreeLight
ThreeLight
ThreeLight Studio의 블로그, TimeMap.exe에 오신 것을 환영합니다.
  • ThreeLight
    TimeMap.exe
    ThreeLight
  • 전체
    오늘
    어제
    • 분류 전체보기 (245)
      • Checkpoint (1)
      • (3D)Dev Deep Dive (0)
        • Templates & Guides (9)
        • Frontend origin (9)
        • Backend origin (1)
        • TroubleShootings (4)
      • Development Study (95)
        • Frontend (36)
        • Backend (21)
        • CS(Computer Science) (2)
        • Background Knowledges (11)
        • Algorithm (2)
        • Mobile (3)
        • AWS (6)
        • Python (6)
        • MSW(MapleStoryWorlds) (8)
      • Coding Test (59)
        • 문제.zip (1)
        • BaekJoon_JavaScript (0)
        • Programmers_JavaScript (9)
        • BaekJoon_Python (23)
        • Programmers_Python (10)
        • Undefined_Python (3)
        • Programmers_SQL (13)
      • 활동내역.zip (43)
        • 개인 (21)
        • Techeer (12)
        • Bootcamp (7)
        • Hackathon (1)
        • TeamProjects (2)
      • 여기 괜찮네??(사이트 | App) (5)
      • 재미있는 주제들 (8)
      • 개발 외 공부 저장소 (11)
        • 생산운영관리 (3)
        • 생활속의금융 (6)
        • 경영정보시스템 (2)
  • 링크

    • TimeMap.dmg (Portfolio)
    • GitHub 바로가기
    • 오픈프로필(카카오톡)
    • Medium 바로가기
    • Disquiet 바로가기
    • LinkedIn 바로가기
  • 인기 글

  • 태그

    Python
    react
    TypeScript
    programmers
    HTML
    JavaScript
    Baek Joon
    프로그래머스
    SQL
    CSS
  • 최근 글

  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.1
ThreeLight
[JavaScript/프로그래머스] 연습문제 - 카드 뭉치
상단으로

티스토리툴바