개발후라이
개발후라이
개발후라이
  • 분류 전체보기 (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
  • 홈

인기 글

태그

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

최근 댓글

최근 글

전체 방문자
오늘
어제

티스토리

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

개발후라이

Problem Solved/HackerRank

[HackerRank][Javascript] Two Strings

2020. 7. 27. 12:07
반응형

문제 - Two Strings

설명

두 개의 문자 사이에 같은 문자열이 존재하는지 판별하는 문제

첫번째 풀이

Map을 2개를 사용한다. 1개는 s1을 저장하기 위해 쓰이고, 1개는 true, false 값을 저장하기 위해 쓰인다.
s1 리스트가 반복문을 돌면서 맵에 개수가 저장된다.
s2 리스트로 s1 문자열 중에 같은 문자열이 존재하는지 판단해 Map에 저장하며 반복한다.
마지막 반환할 때 mapOfResult에 true가 있는지를 some 메소드를 통해 판별한다.

  • 하지만, Map을 두 개나 만들고 불필요하게 반복문을 돌게 되는 것 같아 스터디에서 알게 된 내용으로 다시 풀어 보았다.

두번째 풀이

Set에 s1을 저장한다. 여기서 처음 알게 된 사실은 Set에는 String이 들어가도 하나씩 배열로 바뀌면서 저장된다는 것이다. 속도가 느리지 않을까 싶었는데 Stackoverflow를 보니 빠르기는 일반 배열보다 빠른 것 같다.
그리고 s2가 반복문(some)을 돌면서 Set에 문자열이 있는지 확인한다.
여기서 some이 forEach보다 좋은 점은 true가 하나라도 존재하면 바로 반환한다는 것이다. 첫번째 풀이에서 이 점 때문에 Map을 하나 더 만들었었는데 some을 사용하면 이런 불편함이 없어진다.

  • 고차함수를 더 잘 활용해야겠다는 생각이 든다.

첫번째 풀이

function twoStrings(s1, s2) {
  let mapOfPair = new Map();
  let mapOfResult = new Map();

  const s1List = s1.split("");
  const s2List = s2.split("");

  s1List.forEach((value) => {
    if (!mapOfPair.has(value)) mapOfPair.set(value, 1);
    else mapOfPair.set(value, mapOfPair.has(value) + 1);
  });

  s2List.forEach((value, index) => {
    if (!mapOfPair.has(value)) mapOfResult.set(value, false);
    else mapOfResult.set(value, true);
  });

  return [...mapOfResult.values()].some((value) => value) ? "YES" : "NO";
}

두번째 풀이

function twoStrings(s1, s2) {
  let setOfs1 = new Set(s1);

  return s2.split("").some((value) => setOfs1.has(value)) ? "YES" : "NO";
}
반응형
저작자표시 (새창열림)
    'Problem Solved/HackerRank' 카테고리의 다른 글
    • [HackerRank][Javscript] Map - Count Triplets
    • [HackerRank][Javascript] Sherlock and Anagrams
    • [HackerRank][Javascript] Hash Tables: Ransom Note
    • [HackerRank][Javascript] Array - Minimum Swaps 2
    개발후라이
    개발후라이
    어제보다 오늘 발전하기 위한 공간 https://github.com/choisohyun

    티스토리툴바