자바스크립트에서 문자열은 사실상 문자 배열처럼 작동하며, 대부분의 상황에서 배열과 유사하게 작동합니다.
즉, 문자열에 대해 인덱싱을 사용하여 개별 문자에 액세스할 수 있습니다.
그러나, 문자열은 배열이 아니므로 배열 메서드 (예: filter, map, reduce 등)는 기본적으로 문자열에 대해 사용할 수 없습니다. 문자열은 불변(immutable)이므로 이러한 메서드를 사용하려면 먼저 문자열을 배열로 변환해야 합니다.
이를 위해 당신이 사용한 [...s] 구문은 문자열을 문자 배열로 변환합니다. 이 구문을 사용하지 않으면 filter 메서드를 직접 문자열에 적용할 수 없습니다.
정리.
1.문자열은 배열이 아님.
2.배열처럼 인덱싱은 가능.
3.배열 메서드 사용 불가.
<제출답안>
function solution(s){
let answer = [...s].filter(x => x.toUpperCase() === x);
return answer.length;
}
let str="KoreaTimeGood";
console.log(solution(str));

무난하게 풀었다. 하지만 문자열을 배열의 일종으로 알고 있던 나에게 윗 내용은 살짝 충격이었다.
인덱싱만 가능한 배열이 아닌게 문자열이었구나.

아스키 코드 : 영문 소,대문자 각 26자 총 52개
<아스키 코드를 통한 답안>
밑에 저렇게 문자와 .charCodeAt()을 통해 아스키 코드를 출력가능하다.
function solution(s){
let answer = 0;
for(let x of s){
let b = x.charCodeAt();
if(b>=65 && b<=90) answer++;
}
return answer;
}
console.log('a'.charCodeAt())
let str="KoreaTimeGood";
console.log(solution(str));

24.4.10 업데이트.
아스키 부호 및 변경 메서드는 기억하기 어려울 것 같으니 이렇게 했는데
문제는 대문자가 아닌 부호들을 대문자로 인식할 수 있음.
아래 내용처럼 match라는 정규표현식을 통한 비교 메소드로 알파벳만 인식하도록 보완해서 써야함.
function solution(s) {
let answer = 0;
[...s].forEach((x) => {
if (x === x.toUpperCase()) {
answer++;
}
});
return answer;
}
let str = "KoreaTimeGood";
console.log(solution(str));
<수정코드>
function solution(s) {
let answer = 0;
[...s].forEach((x) => {
if (x === x.toUpperCase() && x.match(/[A-Z]/)) {
answer++;
}
});
return answer;
}
let str = "KoreaTimeGood";
console.log(solution(str));
'🗃️javascript > 코테 프레임 문제' 카테고리의 다른 글
| 2-3 가위 바위 보(24년)[reduce문 acc를 빈 배열로 초기화한 예시] (0) | 2023.09.21 |
|---|---|
| 1-12 대문자로 통일[아스키 코드 활용] (0) | 2023.09.21 |
| 1-10 문자 찾기(24년)[수정된 기존 배열 리턴: map, 기존 배열x : forEach] (0) | 2023.09.19 |
| 1-9 A를 # 으로(24년)[배열은 참조타입, 문자열은 원시타입] (0) | 2023.09.19 |
| 1-8 일곱난쟁이(틀림)(24년 업데이트: 맞춤) (0) | 2023.09.18 |