[Code-kata] week4 - day3 : JavaScript

nomadhj·2022년 6월 5일
0

Code-kata

목록 보기
4/6

Code-kata week4-day3 자바스크립트 풀이


- 문제

다음과 같이 input이 주어졌을 때,같은 알파벳으로 이루어진 단어끼리 묶어주세요.

Input: ["eat", "tea", "tan", "ate", "nat", "bat"],
Output:
[
  ["ate","eat","tea"],
  ["nat","tan"],
  ["bat"]
]

output에서 순서는 상관없습니다.

- 나의 풀이

  • 먼저 Input의 각 요소들을 알파벳 순으로 정렬 한 후, 그 결과를 객체의 key로 삼고, 각 요소들을 해당되는 key의 value로 저장해보았다.
        let temp = {};

        for (let i = 0; i < input.length; i++) {
          temp[input[i].split("").sort().join("")] === undefined
            ? (temp[input[i].split("").sort().join("")] = input[i] + ",")
            : (temp[input[i].split("").sort().join("")] += input[i] + ",");
        }
  • 코드는 복잡해보이지만 잘 보면, input 배열의 각 문자열을 문자별로 쪼개고(split), 알파벳 순으로 정렬하고(sort), 이를 다시 문자열로 합친 후(join) 그 결과가 temp 객체의 키로 존재하지 않는다면, 새로운 키를 생성하고 원본 요소에 ,를 붙여서 값으로 주고, 이미 temp 객체의 키로 존재한다면, 원본요소에 ,를 붙여서 기존 값에 더하는 과정이다.

  • 이를 통해 특정 알파벳으로 이루어진 단어들은 동일한 키에 ,로 구분되어 저장되게 된다.

  • 이후 각 key의 value 들을 배열로 바꾸기만 하면 되는데 이를 구현 한 코드는 아래와 같다.

        const result = Object.values(temp).map((ele) => {
          let tmp = ele.split(",");
          tmp.pop();
          return tmp;
        });
  • Object.values(temp)를 통해 객체의 value들로 구성 된 배열을 만들고 map() 을 통해 각 배열의 문자열을 다시 배열로 쪼개는 과정을 거쳤다.

  • 전체 코드는 아래와 같다.

      const groupAnagrams = (input) => {
        let temp = {};

        for (let i = 0; i < input.length; i++) {
          temp[input[i].split("").sort().join("")] === undefined
            ? (temp[input[i].split("").sort().join("")] = input[i] + ",")
            : (temp[input[i].split("").sort().join("")] += input[i] + ",");
        }

        const result = Object.values(temp).map((ele) => {
          let tmp = ele.split(",");
          tmp.pop();
          return tmp;
        });

        return result
      };
profile
프론트엔드 개발과 맥주에 관심 있습니다.

0개의 댓글