알고리즘 66 - Two to One

jabae·2021년 10월 31일
0

알고리즘

목록 보기
66/97

Q.

Take 2 strings s1 and s2 including only letters from ato z. Return a new sorted string, the longest possible, containing distinct letters - each taken only once - coming from s1 or s2.

Examples:

a = "xyaabbbccccdefww"
b = "xxxxyyyyabklmopq"
longest(a, b) -> "abcdefklmopqwxy"

a = "abcdefghijklmnopqrstuvwxyz"
longest(a, a) -> "abcdefghijklmnopqrstuvwxyz"

A)

function longest(s1, s2) {
  let s1s2Obj = (s1+s2).split('').reduce((obj, el) => {
    if (el in obj) obj[el] += 1;
    else obj[el] = 1;
    return obj;}, {});
  return Object.keys(s1s2Obj)
    .sort()
    .join('');
}
function longest(s1, s2) {
  let newArr = (s1+s2).split('')
  let result = [];
  
  for (let i = 0; i < newArr.length; i++) {
    let flag = 0;
    for (let j = i + 1; j < newArr.length; j++) {
      if (newArr[i] === newArr[j])
        flag = 1;
    }
    if (flag === 0)
      result.push(newArr[i]);
  }
  return result.sort().join('');
}

내가 그냥 .sort()이렇게 해도 알파벳이니 오름차순으로 정렬될 것을, .sort((a, b) => a - b)로 하다가 한참을 헤메었다. 어휴! 🤦‍♀️그래서 두가지 방법으로 풀게 되었다 하하

other

새로운 메소드를 발견!
new Set() : Set 객체는 자료형에 관계 없이 원시 값과 객체 참조 모두 유일한 값을 저장할 수 있습니다.
예를 들어, 반복되는 문자가 있다면 그것을 빼고 유일한 문자들을 담아 객체로 반환하는 것이다.

let str = "aabbccddefg";
console.log(new Set(str))  // Set(7) {'a', 'b', 'c', 'd', 'e', …} 객체값으로 나온다.

따라서 위의 문제를 위해서는 spread로 펼쳐서 객체 안에 담아주어서 풀어야 한다. 이 방법을 보고 머리를 탁 쳤다! 🤭

const longest = (s1, s2) => [...new Set(s1+s2)].sort().join('')
profile
it's me!:)

0개의 댓글