KimMinJun
Coding Note
KimMinJun
전체 방문자
오늘
어제
  • 분류 전체보기 (486)
    • ALGORITHM (11)
      • 정렬 (6)
      • 최단경로 (1)
      • 자료구조 (1)
      • 슬라이딩 윈도우 (1)
      • etc (2)
    • Git (5)
    • Web (24)
      • Vanilla JS (13)
      • TS (2)
      • React (7)
      • ETC (1)
    • React 공식문서 (번역, 공부) (11)
      • Quick Start (2)
      • Installation (0)
      • Describing the UI (9)
      • Adding Interactivity (0)
      • Managing State (0)
      • Escape Hatches (0)
    • Next.js 공식문서 (번역, 공부) (3)
      • Getting Started (2)
      • Building Your Application (1)
    • PS (431)
      • 백준 (187)
      • Programmers (104)
      • CodeUp (21)
      • STL (3)
      • 제코베 JS 100제 (50)
      • SWEA (0)
      • LeetCode (65)
    • IT (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 관리

공지사항

인기 글

태그

  • codeup
  • tree
  • C++
  • string
  • Level 2
  • C
  • recursion
  • 백준
  • Level 0
  • js
  • 다이나믹 프로그래밍
  • 수학
  • programmers
  • Level1
  • 제코베 JS 100제
  • LeetCode
  • 문자열
  • 그래프
  • Level 1
  • 정렬

최근 댓글

최근 글

hELLO · Designed By 정상우.
KimMinJun

Coding Note

제코베 JS 100제 / 80 / 순열과 조합
PS/제코베 JS 100제

제코베 JS 100제 / 80 / 순열과 조합

2022. 9. 22. 22:50

조합이란 원소들을 조합하여 만들 수 있는 경우의 수이며 원소의 순서는 신경 쓰지 않습니다.

순열이란 원소의 값이 같더라도 순서가 다르면 서로 다른 원소로 취급하는 선택법입니다.

 

한글의 자모 24자 중 자음은 총 14개입니다.

이 중 입력받은 자음을 n개를 선택하여 나올 수 있는 모든 조합과, 조합의 수를 출력하고 싶습니다.

 

'한글 맞춤법'의 제 2장 제4항에서는 한글의 기본 자모 24자 "ㄱ(기역), ㄴ(니은), ㄷ(디귿), ㄹ(리을), ㅁ(미음), ㅂ(비읍), ㅅ(시옷), ㅇ(이응), ㅈ(지읒), ㅊ(치읓), ㅋ(키읔), ㅌ(티읕), ㅍ(피읖), ㅎ(히읗), ㅏ(아), ㅑ(야), ㅓ(어), ㅕ(여), ㅗ(오), ㅛ(요), ㅜ(우), ㅠ(유), ㅡ(으), ㅣ(이)"를 제시

 

나올 수 있는 모든 조합을 아래와 같이 출력해 주세요.

 

<--요구 조건-->

1. 첫 번째 입력으로 선택할 한글 자음이 주어집니다.

2. 두 번째 입력으로 조합의 수가 주어집니다.

3. 주어진 조합의 수에 따라 조합과 조합의 수를 출력해 주세요.

 

 

 

function getCombination(consonantArray, combinationNum) {
  const result = [];

  // 한개만 골라서 조합을 할 경우 그냥 모든 원소 return
  if (combinationNum === 1) return consonantArray.map((el) => [el]);

  consonantArray.forEach((el, idx) => {
    // 현재 인덱스 뒤로 모든 원소
    const rest = consonantArray.slice(idx + 1);
    // 현재 원소인 el을 하나 고르고, 한 개 뺀 나머지를 rest에서 고름
    const combinations = getCombination(rest, combinationNum - 1);
    // rest에서 고른 조합을 현재 원소인 el과 붙여줌
    const attach = combinations.map((combination) =>
      [el, ...combination].join('')
    );
    result.push(...attach);
  });

  return result;
}

const consonantArray = ['ㄱ', 'ㄴ', 'ㄷ', 'ㄹ'];
const combinationNum = 3;

const result = getCombination(consonantArray, combinationNum);
console.log(result);

처음 딱 문제를 봤을때 조합문제라고 생각을하여 처음엔 반복문으로 모든 조합을 구하려고 했다.

그런데 그렇게 될 경우 예시에서는 3개라 얼마 안걸리지만, 배열의 길이가 길어지고 구하려는 조합의 길이가 길어질수록 오랜 시간이 걸려서 비효율적이라고 생각했다.

 

그래서 조합 공식을 검색해봐서 참고해서 했다.

처음에 재귀를 따라가기 어려웠으나 그리면서 해보니까 많이 도움되었다.

저작자표시

'PS > 제코베 JS 100제' 카테고리의 다른 글

제코베 JS 100제 / 82 / 수학 괄호 파싱  (0) 2022.09.25
제코베 JS 100제 / 81 / 지뢰찾기  (0) 2022.09.25
제코베 JS 100제 / 79 / 순회하는 리스트  (1) 2022.09.21
제코베 JS 100제 / 78 / 원형 테이블  (0) 2022.09.21
    'PS/제코베 JS 100제' 카테고리의 다른 글
    • 제코베 JS 100제 / 82 / 수학 괄호 파싱
    • 제코베 JS 100제 / 81 / 지뢰찾기
    • 제코베 JS 100제 / 79 / 순회하는 리스트
    • 제코베 JS 100제 / 78 / 원형 테이블
    KimMinJun
    KimMinJun

    티스토리툴바