07
27

한 번 사용한 최초문자

문자열에서 한번만 사용한 문자를 찾으려고 합니다. 매개변수 s에 문자열이 주어지면 한번만 사용한 문자 중 문자열에서 가장 먼저 나타난 문자의 인덱스 번호를 반환하는 프로그램을 작성하세요. 인덱스는 1부터 시작합니다. 한번만 사용한 문자가 없을 경우 -1를 반환하세요.

s answer

"statitsics" 3
"aabb" -1
"stringshowtime" 3
"abcdeabcdfg" 5

제한사항: • 문자열 s의 길이는 100을 넘지 않습니다. • 문자열은 소문자로만 이루어져 있습니다.

입력예제 1 설명 : 한번만 사용한 문자는 a, c이고, 문자열에서 먼저 나타난 것은 a이고 인덱스는 3입니다.

const func = (string) => {
  // 주어진 문자열을 각 문자로 분리하여 배열로 만든다.
  const strArr = string.slice().split('');
  // 결과를 저장할 객체를 생성한다.
  const result = {};

  // strArr 배열의 각 문자에 대해 처리,
  for (let i = 0; i < strArr.length; i++) {
    const currentChar = strArr[i];
    // 현재 문자가 result 객체의 프로퍼티로 존재하는지 반복문으로 확인한다.
    const existingValue = result[currentChar];

    // 현재 문자의 값이 존재하는지 확인한다.
    // 존재하는 경우 해당 값을 1 증가시킨다.
    // 존재하지 않는 경우(빈 값인 경우) 새로운 키를 생성하고 값을 1 준다.
    result[currentChar] = existingValue ? existingValue + 1 : 1;
  }

  // 0일 경우 -1이기 때문에 중간에 한번 걸러준다.
  const filterFunc = (result) => {
    return result === 0 ? -1 : result;
  }
  return filterFunc(Object.values(result).findIndex((el) => el === 1) + 1);
}
COMMENT