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;}
- charCount[char]의 값이 존재한다면, 그 값을 사용한다.
- 만약 charCount[char]의 값이 존재하지 않는다면, 0을 사용한다.
- 그리고나서 1을 더한다.
예를 들어, charCount 객체에 'a'라는 속성이 존재하지 않는다면 charCount['a']는 undefined가 된다.
이때 undefined || 0은 0으로 평가되므로, (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"가 주어졌을 때, 각 문자의 첫 번째와 마지막 등장 인덱스를 확인하여 문자가 한 번만 등장하는지를 판별해보기
- 문자 'a'의 경우:
- 첫 번째 등장 인덱스: 0
- 마지막 등장 인덱스: 10
- 따라서 첫 번째 등장 인덱스와 마지막 등장 인덱스가 동일하지 않으므로 'a'는 한 번 이상 등장한다.
- 문자 'b'의 경우:
- 첫 번째 등장 인덱스: 1
- 마지막 등장 인덱스: 8
- 따라서 첫 번째 등장 인덱스와 마지막 등장 인덱스가 동일하지 않으므로 'b'는 한 번 이상 등장한다.
- 문자 'c'의 경우:
- 첫 번째 등장 인덱스: 2
- 마지막 등장 인덱스: 2
- 따라서 첫 번째 등장 인덱스와 마지막 등장 인덱스가 동일하므로 'c'는 한 번만 등장한다.
- 문자 'd'의 경우:
- 첫 번째 등장 인덱스: 3
- 마지막 등장 인덱스: 3
- 따라서 첫 번째 등장 인덱스와 마지막 등장 인덱스가 동일하므로 'd'는 한 번만 등장한다.
- 문자 'r'의 경우:
- 첫 번째 등장 인덱스: 4
- 마지막 등장 인덱스: 9
- 따라서 첫 번째 등장 인덱스와 마지막 등장 인덱스가 동일하지 않으므로 'r'는 한 번 이상 등장한다.
728x90
'Coding Test > Programmers' 카테고리의 다른 글
[프로그래머스/JavaScript] 코딩 테스트 풀이 (문제 69 - 컨트롤 제트) (0) | 2024.04.04 |
---|---|
[프로그래머스/JavaScript] 코딩 테스트 풀이 (문제 68 - 7의 개수 ) (0) | 2024.04.04 |
[프로그래머스/JavaScript] 코딩 테스트 풀이 (문제 66 - 진료 순서 정하기) (0) | 2024.04.04 |
[프로그래머스/JavaScript] 코딩 테스트 풀이 (문제 65 - 가까운 수) (2) | 2024.04.03 |
[프로그래머스/JavaScript] 코딩 테스트 풀이 (문제 64 - 숨어있는 숫자의 덧셈 (2)) (0) | 2024.04.02 |