🗃️javascript/코테 프레임 문제

1-11 대문자 찾기[문자열 != 배열 || 아스키 코드 출력 : charCodeAt()]

하얀성 2023. 9. 20. 09:48

자바스크립트에서 문자열은 사실상 문자 배열처럼 작동하며, 대부분의 상황에서 배열과 유사하게 작동합니다. 

즉, 문자열에 대해 인덱싱을 사용하여 개별 문자에 액세스할 수 있습니다.

그러나, 문자열은 배열이 아니므로 배열 메서드 (예: 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));