(알고리즘) codewars : first NonRepeatedCharacter
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
}
Author And Source
이 문제에 관하여((알고리즘) codewars : first NonRepeatedCharacter), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@yunsungyang-omc/codewars-first-NonRepeatedCharacter저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)