본문 바로가기

프로그래머스/JavaScript

[프로그래머스 Javascript] Level1 문자열 내 p와 y의 개수

- 대소문자로 되어있는 문자열 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() : 배열을 하나의 값으로 줄이는 함수를 실행하여 하나의 결괏값을 반환하는 메서드