(알고리즘) codewars : first NonRepeatedCharacter

호두파파·2021년 3월 9일
0

알고리즘 연습

목록 보기
8/60
post-thumbnail

Description

Given an arbitrary input string, return the first non-repeated character in the string.

For example:

  • firstNonRepeatedCharacter('ABA'); // => 'B'
  • firstNonRepeatedCharacter('AABCABD'); // => 'C'

문제 풀이

해쉬 유형의 문제라고 생각하고 문제를 풀었다.
물론 해쉬 유형의 문제는 new Table()로 선언해 코드를 작성하나, 아직까진 빈 객체에 키가 있는지를 판별해서 값을 더하는 방식으로 푸는게 익숙하다.

빈 객체에 문자열의 문자를 하나씩 넣어주고, 값을 증감하는 방식으로 값을 채운다.
객체는 키와 벨류의 한 쌍으로 이루어진 값들이 채워진다.
for(let x in obj)로 벨류를 조회해서 1인 값들만 빈 배열로 전달해주었다.

반복되지 않는 가장 첫 문자열을 반환해주면 된다.
(나는 여기서 알파벳 순서대로 리턴하도록 문제를 한 번 더 꼬아주었다. 원 문제대로라면 sort()를 제거하면 된다.)

// 반복되지 않는 첫 번째 문자열 반환하기
// 해쉬
function solution(s) {
  let answer = [];
  let obj={};
  for (let x of s) {
    if (obj[x]) {
      obj[x] += 1;
    } else {
      obj[x] = 1;
    }
  }
  for(let key in obj) {
    if (obj[key] === 1) {
      answer.push(key);
    }
  }
  console.log(answer);
  answer.sort();
  return answer[0];
}

const s = 'ABA';
const n = 'AABCABD';
const x = 'AABDABC';

console.log(solution(s));
console.log(solution(n));
console.log(solution(x));

다른 문제 풀이

가장 처음으로 중복이 없는 문자를 리턴하는 문제이다.
문자열의 문자를 객체에 담고,
위 객체에 없다면 indexOf()를 사용해 중복 문자가 없는지 loop를 돌며 검사한다.
중복 문자가 없는 문자를 발견하면 해당 문자를 리턴한다.

let checked = {};
let strArr = string.split('');

for(let i = 0; i < strArr.length; i++) {
  if (!checked[strArr[i]]) {
    checked[strArr[i]]= true;
    let repeatCharacter = strArr.indexOf(strArr[i], i+1);
    if (repeatCharater === -1) {
      return strArr[i];
    }
  }
}

중복 문자열을 검색하는 가장 클래식한 방법

function firstNonRepeatedCharacter (string) {
  let low = string.toLoweCase();
  let answer = '';
  for(let i = 0; i < string.length; i++) {
    if(low.indexOf(low[i]) === low.lastIndexOf(low[i])) {
      answer = s[i];
    }
  }
  return answer
}
profile
안녕하세요 주니어 프론트엔드 개발자 양윤성입니다.

0개의 댓글