JAVA SCRIPT/코딩테스트
프로그래머스 :: 문자열 내 p 와 y 의 개수
ㅈㅣㄴ
2023. 12. 4. 15:15
프로그래머스 :: 문자열 내 p 와 y 의 개수
문제 설명
대문자와 소문자가 섞여있는 문자열 s가 주어집니다. s에 'p'의 개수와 'y'의 개수를 비교해 같으면 True, 다르면 False를 return 하는 solution를 완성하세요. 'p', 'y' 모두 하나도 없는 경우는 항상 True를 리턴합니다. 단, 개수를 비교할 때 대문자와 소문자는 구별하지 않습니다.
예를 들어 s가 "pPoooyY"면 true를 return하고 "Pyy"라면 false를 return합니다.
제한사항
· 문자열 s의 길이 : 50 이하의 자연수
· 문자열 s는 알파벳으로만 이루어져 있습니다.
입출력 예
s answer "pPoooyY" true "Pyy" false
입출력 예 #1'p'의 개수 2개, 'y'의 개수 2개로 같으므로 true를 return 합니다.
입출력 예 #2'p'의 개수 1개, 'y'의 개수 2개로 다르므로 false를 return 합니다.
문제 풀이
function solution(s) {upper_s = s.toUpperCase();let pNum = 0;let yNum = 0;for (let i = 0; i < upper_s.length; i++) {if (upper_s[i] == 'P') {pNum++;} else if (upper_s[i] == 'Y') {yNum++;}}if (pNum == yNum || (pNum == 0 && yNum == 0)) {return true;} else {return false;}}
- 개인적으로 조금 고민했던 문제
- s 를 전부 대문자로 바꾼 후 for 문을 이용하여 풀이하였다.
- toUpperCase() 메소드는 문자열을 대문자로 변경한다.
다른 사람의 문제 풀이
function numPY(s){ return s.toUpperCase().split("P").length === s.toUpperCase().split("Y").length; }
toUpperCase 메서드를 이용하여 s를 대문자로 반환하고, split 으로 P와 Y 문자를 기준으로 배열을 만든 후 배열 길이를 비교하는 코드로 해석된다.
개인적으로 기발하다고 생각했던 코드이다.function numPY(s){ return s.match(/p/ig).length == s.match(/y/ig).length }
match 메소드를 이용한 코드이다. 이해하기도 쉽고 보기도 쉬운 코드라고 생각이 들어서 참고가 되었던 코드이다.
match 메소드는 대상 문자열과 인수로 전달받은 정규 표현식과의 매칭 결과를 배열로 반환한다.
패턴과 함께 정규 표현식을 구성하는 플래그는 정규 표현식의 검색 방식을 설정하기 위해 사용한다.
플래그 의미 설명 i Ignore case 대소문자를 구별하지 않고 패턴을 검색한다. g Global 대상 문자열 내에서 패턴과 일치하는 모든 문자열을 전역 검색한다. m Multi line 문자열의 행이 바뀌더라도 패턴 검색을 계속한다. ex ) const text = "Hello my name is Jin.";
console.log(text.match(/jin/ig)); //[ 'Jin' ]