programmers 코딩테스트 : 문자열 내 p와 y의 개수

H·2022년 6월 16일
0

Coding Test

목록 보기
24/26

문자열내 p와 y의 개수

문제 설명
대문자와 소문자가 섞여있는 문자열 s가 주어집니다. s에 'p'의 개수와 'y'의 개수를 비교해 같으면 True, 다르면 False를 return 하는 solution를 완성하세요. 'p', 'y' 모두 하나도 없는 경우는 항상 True를 리턴합니다. 단, 개수를 비교할 때 대문자와 소문자는 구별하지 않습니다.

예를 들어 s가 "pPoooyY"면 true를 return하고 "Pyy"라면 false를 return합니다.

제한사항
문자열 s의 길이 : 50 이하의 자연수
문자열 s는 알파벳으로만 이루어져 있습니다.


통과한 코드

 function solution(s) {
   let answer = true;
   const pLength = Array.from(s.toUpperCase()).filter(
     (el) => el === "P"
   ).length;
   const yLength = Array.from(s.toUpperCase()).filter(
     (el) => el === "Y"
   ).length;
   answer = pLength === yLength ? answer : !answer;

   return answer;
 }

📌 내가 생각한 로직
1. 문자열 s를 대문자(혹은 소문자로)일괄 변경 후 배열로 만듦
2. filter()로 해당 배열에서 p, y를 찾아 각각의 변수에 담음
3. 해당 변수끼리 비교 후 true, false
4. return answer;

✔ 아쉬운점
1. 더 간단한게 쓸 수 있었을 텐데,,,,,,


통과한 코드 for()문을 풀기

function solution(j) {
  let answer = true;
  const arr = j.toUpperCase().split("");
  let p = 0;
  let y = 0;
  for (let i = 0; i < arr.length; i++) {
    arr[i] === "P" ? p++ : 0;
    arr[i] === "Y" ? y++ : 0;
  }
  p === y ? (answer = answer) : (answer = !answer);
  return answer;
}

for문으로 filter의 역할을 바꿨을 뿐 크게 달리진게 없다.

✔ 아쉬운점
1. 굳이 배열로 변경하지 않아도 for문으로 돌릴 수 있었을텐데,,,


남의 코드 split()

function numPY(s){
    return s.toUpperCase().split("P").length === s.toUpperCase().split("Y").length;
}

//str pypypypy
//str.toUpperCase().split("P") (5) ['', 'Y', 'Y', 'Y', 'Y']
//toUpperCase().split("Y") (5) ['P', 'P', 'P', 'P', '']
//numPY true

📌 split('') 을 쓸때는 대체로 ('') 빈 문자열 처리를 해서 배열로 변경했었는데 사실은 ('문자열')을 찾아 지우고 남은 배열을 다시 반환해준다는 역할이라는것을 다시 한번 새기고 갑니다...


남의 코드 (정규식)

function numPY(s) {
  return s.match(/p/ig).length == s.match(/y/ig).length;
}

📌match() : 문자열이 정규식과 매치되는 부분을 검색하는 매서드
str.match(regexp) //regexp 정규식 개체

profile
🤘 돌머리도 ROCK이다! 🤘

0개의 댓글