- 대소문자로 되어있는 문자열 s가 주어집니다.
- 대소문자를 구분하지 않고, p와 y의 개수가 같은지 체크합니다.
- 문자열은 알파벳으로만 이루어져 있습니다.
[방법 1] for문 사용
한 글자씩 대조한 후 선택된 글자들의 개수를 구하는 방법
function solution(s){
var answer = true;
var p = 0;
var y = 0;
for(var i = 0; i < s.length; i++) {
if(s[i] == 'p' || s[i] == 'P') {
p++;
} else if(s[i] == 'y' || s[i] == 'Y') {
y++;
}
}
if(y != p || y == 0 ) {answer = false;}
return answer;
}
[방법 2] match 사용
match가 일치하는 부분을 찾아내면, 그 길이를 체크해 비교하는 방법입니다.
function solution(s){
var answer = true;
const p_length = s.match(/[p]/gi) == null ? 0 : s.match(/[p]/gi).length;
const y_length = s.match(/[y]/gi) == null ? 0 : s.match(/[y]/gi).length;
answer = p_length == y_length ? true : false;
return answer;
}
[방법 3] reduce 사용
reduce를 사용해 각각 -값 +값을 주어, 두 개의 개수가 같은지를 체크하는 방법입니다.
split('')은 문자열에 grapheme clusters가 있을 경우, 유니코드 플래그를 설정해도 오류가 발생하기 때문에
split('') 대신 split(/(?:)/u) 사용하는 것을 권장하고 있습니다.
function solution(s){
var answer = true;
var count = 0;
const arr = s.split(/(?:)/u);
answer = arr.reduce(function(acc, cur) {
if(cur == 'p' || cur == 'P') {
count += 1
} if(cur == 'y' || cur == 'Y') {
count -= 1;
}
return count
}, 0);
answer = count == 0 ? true : false;
return answer;
}
String.match() : 문자열에서 정규식과 일치하는 부분을 찾는 메서드
String.split() : 문자열을 지정한 구분자(separator)를 기준으로 나누는 메서드
Array.reduce() : 배열을 하나의 값으로 줄이는 함수를 실행하여 하나의 결괏값을 반환하는 메서드
'프로그래머스 > JavaScript' 카테고리의 다른 글
[프로그래머스 Javascript] Level1 문자열 다루기 기본 (0) | 2019.02.03 |
---|---|
[프로그래머스 Javascript] Level1 최대공약수와 최소공배수 (0) | 2019.02.03 |
[프로그래머스 Javascript] Level1 나누어 떨어지는 숫자 배열 (0) | 2019.01.26 |
[프로그래머스 Javascript] Level1 핸드폰 번호 가리기 (0) | 2019.01.23 |
[프로그래머스 Javascript] Level1 두 정수 사이의 합 (0) | 2019.01.23 |