문제

대문자로 이루어진 영어단어가 입력되면 단어에 포함된 ‘A'를 모두 ’#‘으로 바꾸어 출력하는 프로그램을 작성하세요.


나의 계획!

  • 대문자로 이뤄진 영단어인지 확인
  • 그렇다면 'A'를 찾기 ('a'는 아님)
  • 'A'를 '#'으로 바꿔서 단어를 리턴

짠 코드

<script>
  function solution(s) {
  let answer = "";
  // false = 대문자가 없는 단어, true = 대문자가 존재하는 단어
  let checkUpperCase = false;

  // 아스키 코드를 이용해서, 주어진 단어가 대문자가 포함된 단어인지 확인하는 함수
  const checkUpperCaseFunc = function () {
    for (let i = 0; i < str.length; i++) {
      console.log(str[i].codePointAt(0));
      if (str[i].codePointAt(0) >= 65 && str[i].codePointAt(0) <= 90) {
        checkUpperCase = true;
      }
    }
  };

  const switchA = function () {
    // 단어의 대문자 유무를 알았으니..
    if (checkUpperCase == true) {
      console.log("대문자를 포함한 단어입니다.");
      for (let i = 0; i < str.length; i++) {
        // 이번엔 아스키코드로 'A'를 찾는다.
        if (str[i].codePointAt(0) == 65) {
          console.log(str[i]);
          // 'A'를 찾았으니, '#'으로 바꿔주자
          // 그런데 왜 splice를 사용하면 에러가 나는거지??
          // str.splice(i, 1, '#');
        }
      }
      answer = "변환된 단어: " + str;
    } else {
      answer = "대문자 or A를 포함하지 않는 단어입니다.";
    }
  };

  // 테스트 ~
  checkUpperCaseFunc();
  switchA();
  return answer;
}

let str = "BANANA";
console.log(solution(str));
</script>

문제발생;

A를 #으로 바꿔주는 함수를 만들었는데, 바꿔주는 부분
str.splice(i, 1, '#'); 에서 splice는 함수가 아니라는 에러가 뜬다.


문제해결!!!

혹시 문자열은 splice메소드를 못 사용하는 건가 싶어서, switchA 함수를 다음과 같이 수정해봤다.

const switchA = function () {
  // 단어의 대문자 유무를 알았으니..
  if (checkUpperCase == true) {
    console.log("대문자를 포함한 단어입니다.");
    // 문자열을 배열로 변환
    let newArr = Array.from(str);
    for (let i = 0; i < newArr.length; i++) {
      // 이번엔 아스키코드로 'A'를 찾는다.
      if (newArr[i].codePointAt(0) == 65) {
        newArr.splice(i, 1, "#");
      }
    }
    // 배열을 문자열로 변환
    newArr = newArr.join("");
    answer = newArr;
  } else {
    answer = "대문자 or A를 포함하지 않는 단어입니다.";
  }
};

결과는 매우 성공적!! 😆


나의 최종코드~

<script>
  function solution(s) {
  let answer = "";
  // false = 대문자가 없는 단어, true = 대문자가 존재하는 단어
  let checkUpperCase = false;

  // 아스키 코드를 이용해서, 주어진 단어가 대문자가 포함된 단어인지 확인하는 함수
  const checkUpperCaseFunc = function () {
    for (let i = 0; i < str.length; i++) {
      console.log(str[i].codePointAt(0));
      if (str[i].codePointAt(0) >= 65 && str[i].codePointAt(0) <= 90) {
        checkUpperCase = true;
      }
    }
  };

  const switchA = function () {
    // 단어의 대문자 유무를 알았으니..
    if (checkUpperCase == true) {
      console.log("대문자를 포함한 단어입니다.");
      // 문자열을 배열로 변환
      let newArr = Array.from(str);
      for (let i = 0; i < newArr.length; i++) {
        // 이번엔 아스키코드로 'A'를 찾는다.
        if (newArr[i].codePointAt(0) == 65) {
          newArr.splice(i, 1, "#");
        }
      }
      // 배열을 문자열로 변환
      newArr = newArr.join("");
      answer = newArr;
    } else {
      answer = "대문자 or A를 포함하지 않는 단어입니다.";
    }
  };

  // 테스트 ~
  checkUpperCaseFunc();
  switchA();
  return answer;
}

let str = "BANANA";
console.log(solution(str));
</script>

인강 강사의 풀이..

업뎃예정!

profile
개인 이력, 포폴 관리 및 기술 블로그 사이트 👉 https://aimzero-web.vercel.app/

2개의 댓글

comment-user-thumbnail
2022년 11월 20일

대문자만 주어지기 때문에
let a = 'BANANA'
return a.replaceAll('A','#')
이렇게 하면 안되나요?

1개의 답글