encodeDuplicate.js

Codewars 알고리즘 풀이


Problem

  • The goal of this exercise is to convert a string to a new string where each character in the new string is ‘(‘ if that character appears only once in the original string, or ‘)’ if that character appears more than once in the original string.
    • 문자열을 새 문자열로 변환한다.
    • 문자가 한 번만 나타나는 경우 ‘(‘, 두 번 이상 나타나는 경우 ‘)’로 변환한다.
  • Ignore capitalization when determining if a character is a duplicate.
    • 대소문자는 구분하지 않는다.



Solution 01

function encodeDuplicate(str) {
  str = str.toLowerCase();
  let obj = {};
  let result = '';
  
  for (let i = 0; i < str.length; i++) {
    if (obj[str[i]]) {
      obj[str[i]] += 1;
    } else {
      obj[str[i]] = 1;
    }
  }
  
  for (let j = 0; j < str.length; j++) {
    if (obj[str[j]] === 1) {
      result += '(';
    } else {
      result += ')';
    }
  }
  return result;
}

encodeDuplicate('recede');   // ()()()
encodeDuplicate('Success');  // )())())
encodeDuplicate('(( @');     // ))((
encodeDuplicate('abcd');     // ((((
encodeDuplicate('aaaa');     // ))))
encodeDuplicate('ssup');     // ))((


Solution 02

function encodeDuplicate(str) {
  str = str.toLowerCase();
  let result = '';
  
  for (let i = 0; i < str.length; i++) {
    if (str.indexOf(str[i]) === str.lastIndexOf(str[i])) {
      result += '(';
    } else {
      result += ')';
    }
  }
  return result;
}

encodeDuplicate('recede');   // ()()()
encodeDuplicate('Success');  // )())())
encodeDuplicate('(( @');     // ))((
encodeDuplicate('abcd');     // ((((
encodeDuplicate('aaaa');     // ))))
encodeDuplicate('ssup');     // ))((


Solution 03

function encodeDuplicate(str) {
  return str.toLowerCase().split('').map((i, index, arr) => (arr.indexOf(i) === arr.lastIndexOf(i) ? '(' : ')')).join('');
}

encodeDuplicate('recede');   // ()()()
encodeDuplicate('Success');  // )())())
encodeDuplicate('(( @');     // ))((
encodeDuplicate('abcd');     // ((((
encodeDuplicate('aaaa');     // ))))
encodeDuplicate('ssup');     // ))((


Solution 04

function encodeDuplicate(str) {
  str = str.toLowerCase();
  return str.replace(/./g, i => (str.indexOf(i) === str.lastIndexOf(i) ? '(' : ')'));
}

encodeDuplicate('recede');   // ()()()
encodeDuplicate('Success');  // )())())
encodeDuplicate('(( @');     // ))((
encodeDuplicate('abcd');     // ((((
encodeDuplicate('aaaa');     // ))))
encodeDuplicate('ssup');     // ))((