프로그래머스 코딩테스트 연습 <문자열 내 p와 y의 개수>

12932 단어 CodingTestCodingTest

🔎 <문자열 내 p와 y의 개수>

📝 답안

코딩테스트 연습을 이제 막 시작해 부끄러운 수준의 내 답안과 다른 사람들의 답안을 확인해보자.

🚩 제출한 답안

function solution(s) {
  var answer = true;
  if (s.match(/p/gi).length !== s.match(/y/gi).length) {
      answer = false;
  }
  return answer;
}

match()와 정규표현식을 활용해서 문자열에서 정규표현식이 일치하는 부분을 검색하여 해결하고자 했으나, 테스트 과정에서 런타임 에러가 발생했다. 추측하기로는 정규표현식으로 문자열을 검색하는 과정이 오래 걸리기 때문이라고 생각된다.

또한, match()에 의해 문자열을 검색할 때, p, y가 존재하지 않는 경우 null이 반환되어 에러가 발생하는 것으로 생각된다.

주요 활용 문법

match(), 정규표현식

🚩 다른 사람 답안

includes()을 활용한 답안

function solution(s){
  var answer = true;
  var pCount = 0;
  var yCount = 0;
  
  for (let i = 0; i < s.length; i++) {
    if (s.toLowerCase()[i].includes("p")) {
      pCount++;
    }
  }
  
  for (let j = 0; j < s.length; j++) {
    if (s.toLowerCase()[j].includes("y")) {
      yCount++;
    }
  }
  
  if (pCount !== yCount) {
    answer = false;
  }

  return answer;
}

includes()for 반복문를 활용해 해당 문자가 포함되었는지를 검색할 수 있다. 다만 이경우 대소문자를 구분하기 때문에 toLowerCase() 혹은 toUpperCase()를 활용해 하나로 통일해주어야 한다.

split()을 활용한 답안

function solution(s){
  // 함수를 완성하세요
  return s.toUpperCase().split("P").length === s.toUpperCase().split("Y").length;
  // 해당 문자를 기준으로 나누면, ["", "", "OOOYY"], ["PPOOO", "", ""] 로 구분된다.
}

split()을 활용해 해당 문자를 분리해 배열로 반환한 후 해당 배열의 길이를 통해 검색할 수 있다. 다만, 이 또한 대소문자를 구분하기 때문에 toLowerCase() 혹은 toUpperCase()를 활용해 하나로 통일해주어야 한다.

📌 공부할 점

split()

split(separator) 메서드를 통해 String 객체를 지정한 separator를 이용하여 여러 개의 문자열로 나눌 수 있다. 이때 구분자를 ""로 지정하는 경우 문자 하나씩 나눠진다.

includes()

includes(valueToFind[, fromIndex]) 메서드로 배열이 특정 요소를 포함하고 있는지 판별할 수 있다. fromIndex가 배열의 길이를 초과하는 경우에는 false가 반환된다.

[1, 2, 3].includes(2);     // true
[1, 2, 3].includes(4);     // false
[1, 2, 3].includes(3, 3);  // false
[1, 2, 3].includes(3, -1); // true
[1, 2, NaN].includes(NaN); // true

['a', 'b', 'c'].includes('c', 3);   // false
['a', 'b', 'c'].includes('c', 100); // false

match()

match() 메서드는 문자열이 정규식과 매치되는 부분을 검색한다.

좋은 웹페이지 즐겨찾기