본문 바로가기

Coding Test/Programmers

[프로그래머스/JavaScript] 코딩 테스트 풀이 (문제 67 - 한 번만 등장한 문자)

728x90

 

# 문제

문자열 s가 매개변수로 주어집니다. s에서 한 번만 등장하는 문자를 사전 순으로 정렬한 문자열을 return 하도록 solution 함수를 완성해보세요. 한 번만 등장하는 문자가 없을 경우 빈 문자열을 return 합니다.


# 답안 

// 1. 입력: 문자열 s => "abc" 같은거
// 2. 출력: s에서 한번만 등장하는 문자를 사전 순으로 정렬

// 빈객체, 빈문자열 만들기
// for...of로 문자열 s를 순회 -> 문자열-등장횟수를 객체 형식으로 만들어서 빈객체에 담기
// for...in으로 객체 순회 하면서 등장횟수가 1인 애들만 push로 빈배열에 담기
// sort로 사전순 정렬하고, join으로 연결


function solution(s) {
  const charCount = {};
  const result = [];

  for (let char of s) {
    charCount[char] = (charCount[char] || 0) + 1;
  }

  for (let char in charCount) {
    if (charCount[char] === 1) {
      result.push(char);
    }
  }
  return result.sort().join("");
}

 

 for (let char of s) { charCount[char] = (charCount[char] || 0) + 1;} 

 

  1. charCount[char]의 값이 존재한다면, 그 값을 사용한다.
  2. 만약 charCount[char]의 값이 존재하지 않는다면, 0을 사용한다.
  3. 그리고나서 1을 더한다. 

예를 들어, charCount 객체에 'a'라는 속성이 존재하지 않는다면 charCount['a']undefined가 된다.
이때
undefined || 00으로 평가되므로, (charCount[char] || 0)0이 된다. 그리고나서 +1을 하게 되면 결과적으로는 1이 된다.

 

뭔소린지 모르겠다면 아래 예시로 이해하기

let s = "hello world";
let charCount = {};

for (let char of s) {
    charCount[char] = (charCount[char] || 0) + 1;
}

console.log(charCount);

위의 코드를 실행하면 다음과 같은 결과가 출력된다.

{
  'h': 1,
  'e': 1,
  'l': 3,
  'o': 2,
  ' ': 1,
  'w': 1,
  'r': 1,
  'd': 1
}

 

 

 다른 답안 

function solution(s) {
    let res = [];
    for (let c of s) if (s.indexOf(c) === s.lastIndexOf(c)) res.push(c);
    return res.sort().join('');
}

 

 if (s.indexOf(c) === s.lastIndexOf(c)) 

 

: 문자 c가 문자열 s에서 처음 등장하는 인덱스와 마지막으로 등장하는 인덱스가 동일한지를 확인한다.
즉, 해당 문자가 한 번만 등장하는지를 판별한다.

 

예를 들어, 문자열 "abracadabra"가 주어졌을 때, 각 문자의 첫 번째와 마지막 등장 인덱스를 확인하여 문자가 한 번만 등장하는지를 판별해보기

 

  1. 문자 'a'의 경우:
    • 첫 번째 등장 인덱스: 0
    • 마지막 등장 인덱스: 10
    • 따라서 첫 번째 등장 인덱스와 마지막 등장 인덱스가 동일하지 않으므로 'a'는 한 번 이상 등장한다.
  2. 문자 'b'의 경우:
    • 첫 번째 등장 인덱스: 1
    • 마지막 등장 인덱스: 8
    • 따라서 첫 번째 등장 인덱스와 마지막 등장 인덱스가 동일하지 않으므로 'b'는 한 번 이상 등장한다.
  3. 문자 'c'의 경우:
    • 첫 번째 등장 인덱스: 2
    • 마지막 등장 인덱스: 2
    • 따라서 첫 번째 등장 인덱스와 마지막 등장 인덱스가 동일하므로 'c'는 한 번만 등장한다.
  4. 문자 'd'의 경우:
    • 첫 번째 등장 인덱스: 3
    • 마지막 등장 인덱스: 3
    • 따라서 첫 번째 등장 인덱스와 마지막 등장 인덱스가 동일하므로 'd'는 한 번만 등장한다.
  5. 문자 'r'의 경우:
    • 첫 번째 등장 인덱스: 4
    • 마지막 등장 인덱스: 9
    • 따라서 첫 번째 등장 인덱스와 마지막 등장 인덱스가 동일하지 않으므로 'r'는 한 번 이상 등장한다.

 

 

728x90