개발후라이
개발후라이
개발후라이
  • 분류 전체보기 (285)
    • Web Front End (74)
      • Javascript & Typescript (26)
      • React (11)
      • Vue (4)
      • Nodejs (1)
      • HTML (6)
      • CSS (7)
      • HTTP (6)
      • 책 - Review (8)
    • TIL (0)
    • Problem Solved (135)
      • 알고리즘 (4)
      • BOJ (67)
      • Programmers (8)
      • HackerRank (33)
      • LeetCode (23)
    • 회고 (4)
      • 오늘의 회고 (16)
      • 주간 회고 (15)
      • 월간 회고 (7)
      • WakaTime (9)
    • Git (3)
    • 기타 (15)
      • 취업 (5)
      • 자격증 (1)

블로그 메뉴

  • GitHub
  • LinkedIn
  • 홈

인기 글

태그

  • 노마드북클럽
  • 회고
  • 프론트엔드
  • 자바스크립트
  • TypeScript
  • 오늘의회고
  • 릿코드
  • JavaScript
  • 노개북
  • 개발자

최근 댓글

최근 글

전체 방문자
오늘
어제

티스토리

hELLO · Designed By 정상우.
개발후라이

개발후라이

Problem Solved/LeetCode

[LeetCode][javascript] 345번 문제 - Reverse Vowels of a String

2020. 3. 13. 21:01
반응형

문제

345번 문제 - Reverse Vowels of a String

문제 설명

문자열에서 모음(aeiou)만 반대 순서로 뒤집는 문제

내가 푼 코드

  1. 입력받은 문자열을 배열로 만든다.
  2. 모음의 인덱스를 저장할 빈 배열과 모음을 저장하는 문자열을 만든다.
  3. 반복문을 돌며 모음인 문자열(대문자 포함)의 인덱스를 2번에서 만든 배열에 추가한다.
  4. 반복문을 돌며 만들어진 배열을 배열의 크기의 반만큼 반복되게 한다.
  5. 반복문을 돌며 해당 인덱스에 해당하는 모음을 반대로 저장시킨다.
  6. join을 사용해 문자열로 만들고 반환한다.

풀이 코드

  1. 정규표현식과 고차함수인 filter를 활용해 모음만 있는 문자열을 배열로 저장한다.

정규표현식의 test() 메소드는 대상 문자열 속에 일치하는 문자열이 포함되어 있는지 검사하고 true 또는 false를 반환한다.

  1. 입력된 문자열을 또다시 정규식을 이용해 split하고, split될 때마다 1번에서 저장된 배열의 값을 추가하면 모음만 reverse된 값이 저장된다.
  • 고차함수는 정말 바로 떠올려 내기 어려운 것 같다. 고차함수 많이 쓰는 연습하기 필수!!

성공 코드

내가 푼 코드

const reverseVowels = s => {
  const strList = s.split("");
  const vowels = "aeiou";
  let vowelIndexList = [];

  strList.forEach((element, index) => {
    if (vowels.includes(element.toLowerCase())) {
      vowelIndexList.push(index);
    }
  });

  const SIZE = vowelIndexList.length;
  const halfIndex = Math.floor(SIZE / 2);

  for (let i = 0; i < halfIndex; i++) {
    const j = vowelIndexList[i];
    let temp = strList[j];
    strList[j] = strList[vowelIndexList[SIZE - 1 - i]];
    strList[vowelIndexList[SIZE - 1 - i]] = temp;
  }

  return strList.join("");
};

풀이 코드

const reverseVowels = s => {
    const vowels = s.split('').filter(a => /[aeiou]/i.test(a));
    return s.split(/[aeiou]/i).reduce((res, a) => res + a + (vowels.pop() || ''), '');
};
반응형
저작자표시 (새창열림)
    'Problem Solved/LeetCode' 카테고리의 다른 글
    • [LeetCode][Javascirpt] 15번 - 3Sum
    • [LeetCode][javascript] 137번 문제 - Single Number II
    • [LeetCode][javascript] 344번 문제 - Reverse String
    • [LeetCode][Javascript] 136번 - Single Number
    개발후라이
    개발후라이
    어제보다 오늘 발전하기 위한 공간 https://github.com/choisohyun

    티스토리툴바