항해 프로그래머스

항해3주차 자바스크립트 프로그래머스 - 문자열 내 p와 y의 개수

완두노예 2023. 1. 30. 14:06

처음 풀이

function solution(s){
    var answer = 0;
    let p = 0;
    let y = 0;
    
    for(let i=0, i < s.length;, i++)
       if (p === y) {return = true};
        else if (p != y) {return = false};
    else {return = true};
    

    return answer;
}
//for문 돌리기
//p=y true
//s의 p,y를 뭐라표현하더라
//!= false
// else = true
//삼항연산자를 이럴때 쓰던가

수정 풀이

function solution(s){
    var p = 0;
    var y = 0;
    var str = s.toUpperCase();
    var answer = true;
    for(var i = 0; i<str.length; i++) {
        if(str[i] === 'P') p++;
        else if(str[i] === 'Y') y++;
    }
    (p == y) ? answer = true : answer = false;
 
    return answer;
}

다른 풀이

 

function solution(s){
var answer = true;

// s의 모든 영문을 소문자로 바꿔준다(같은 것을 찾을 때 확실히 하기위해서)
let str = s.toLowerCase();
// 소문자로 바꾼 s의 문자열들을 배열로 하나씩 나눠준다.
str = [...str];

// 먼저 변수 p,y 에 값을 0으로 선언해준다.
let p = 0;
let y = 0;

// for문으로 i를 str의 총 배열 갯수만큼 증가시키고 str[i]의 값과 "p" 가 일치할 때마다 p를 증가, 같은 방법으로 y와도 일치할 시 y도 증가시켜준다.
for(let i=0; i<str.length; i++){
    if(str[i] == 'p'){
        p++;
    } else if (str[i] == 'y'){
        y++;
    }
}

// 그렇게 증가시켜준 값이 들어간 p 와 y 의 수가 같으면 answer에 true를 대입
if(p == y){
    answer = true;
// 그게 아니면 answer에 false를 대입해준다.
} else {
    answer = false;
}

return answer;
}
function solution(s){

    return [...s.toLowerCase()].reduce((acc, cur) => {
        if(cur ==='p') return acc + 1;
        else if(cur ==='y') return acc - 1;
        return acc;
    }, 0) ? false : true;
}
function numPY(s){
  let pLength = s.match(new RegExp("p", "ig")).length,
      yLength = s.match(new RegExp("y", "ig")).length;

  if( pLength === yLength ){
        return true;
  } else {
    return false;
  }
}