대소문자 구분한 문자열 경우의 수 찾기

김민아·2023년 3월 4일
0

784. Letter Case Permutation

784. Letter Case Permutation

문제

입력값 s 문자열에 대해 대소문자 구분하는 모든 문자열 조합을 찾는 문제이다. 모든 조합을 찾는 문제이므로 dfs를 쉽게 연상할 수 있었고, 숫자와 문자를 구분하여 문자열일 경우 upperCaselowerCase를 따로 재귀적으로 호출해 주었다.

테스트 케이스

Input: s = "a1b2"
Output: ["a1b2","a1B2","A1b2","A1B2"]

풀이

  1. 완성된 조합을 저장할 result 배열과 dfs 함수를 작성한다.
  2. 하나의 조합을 저장할 빈문자열과 재귀호출을 탈출할 조건으로 사용할 index를 매개변수로 전달한다.
  3. s[index]가 숫자라면 그대로 문자열을 더하여 dfs를 반복한다.
  4. 숫자가 아니라면 대문자, 소문자 두 경우가 있기 때문에 각각 dfs를 작성해 준다.
const letterCasePermutation = function(s) {
  const result = [];

  const dfs = (string, index) => {
    if (index === s.length) { // 모든 문자열을 다 변환한 경우
      result.push(string);
      return;
    }

    if (isNaN(s[index])) { // 문자인 경우
      dfs(string + s[index].toLowerCase(), index + 1); // 소문자로 변환한 경우 탐색
      dfs(string + s[index].toUpperCase(), index + 1); // 대문자로 변환한 경우 탐색
    } else { // 숫자인 경우
      dfs(string + s[index], index + 1); // 탐색하지 않고 그대로 추가
    }
  };

  dfs('', 0); // 탐색 시작

  return result;
};

0개의 댓글