728x90

문제


https://programmers.co.kr/learn/courses/30/lessons/12916?language=javascript 

 

코딩테스트 연습 - 문자열 내 p와 y의 개수

대문자와 소문자가 섞여있는 문자열 s가 주어집니다. s에 'p'의 개수와 'y'의 개수를 비교해 같으면 True, 다르면 False를 return 하는 solution를 완성하세요. 'p', 'y' 모두 하나도 없는 경우는 항상 True를

programmers.co.kr

 

코드


function solution(s){
    const count_p = s.match(/p|P/g); //p의 개수 , /p/gi
    const count_y = s.match(/y|Y/g); //y의 개수 , /y/gi
    if ((!count_p) && (!count_y)) return true;
    else if ((!count_p) || (!count_y)) return false;
    else return (count_p.length === count_y.length) ? true : false;
}

 

후기


  • 문제 이해 : 문자열 내 p와 y의 개수를 비교해 같으면 true, 다르면 false를 return하고, p,y가 모두 없으면 항상 true를 return하기
  • 문제를 보자마자 정규식을 이용하여 p,y의 개수를 구해야겠다는 생각을 하였고, 이를 활용하기 위해 match함수를 사용했다
  • match() : 문자열 안에 특정 단어를 찾고 싶을 때 사용하는 함수로서 특정 단어가 포함되어 있는지 여부를 알 수 있다. 나아가 특정 단어를 찾는 데 그치지 않고 정규식을 이용하여 특정 패턴을 찾는 것도 가능하다
  • match함수 사용법 : string.match("찾고싶은 특정 단어") >> 특정 단어를 string안에서 찾게 되면 이를 return 함
  • 응용하여 match 함수 뒤에 length를 붙이면 특정 단어의 개수를 알 수 있다
  • 주의할 점) 정규식을 통해 반환된 변수 count_p, count_y의 경우에는 반환할 것이 없으면 빈 배열인 []가 아니라 null이 반환되기 때문에 length가 적용되지 않는다
  • 이 문제는 조건이 까다롭진 않았지만 p만 있는 경우, y만 있는 경우, 둘다 없는경우, 둘 다 있는 경우 등 고려해야 할 것들이 은근 많아서 예외처리를 하느라 if 문을 많이 쓴 것이 좀 아쉬웠다
  • 히든 테스트 케이스 2,3 번과 29,30번이 세트마냥 같이 오류가 나곤 했었는데 if, else if 문을 더 추가해서 예외처리를 해주니 해결되었다

+ Recent posts