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

김태영·2022년 5월 24일
0

[JavaScript] Coding test

목록 보기
11/11

문제 자세히 보기



[나의 풀이]

function solution(s){
    let upperCase = s.toUpperCase()
    let p = []
    let y = []
    
    for (let i=0; i < upperCase.length; i++) {
      if ( upperCase[i] === "P") p.push(s[i])
      else if ( upperCase[i] === "Y") y.push(s[i])
    }
	  
  	if (p.length === y.length) return true
    else return false
}

변수 upperCase에 주어진 s를 모두 대문자로 변경하여 저장하였다.
그후 for문을 돌면서 대문자 "P""Y"랑 일치하는 문자를 변수py에 저장하고 두 변수의 크기를 비교하여 참, 거짓을 구분하였다.




생각하기
작성한 코드를 보면 p와 y 변수를 배열로 활용하였는데 내가 알고 있는 것이 맞다면 배열이나 객체의 경우 number나 string 등에 비해 메모리를 더 많이 사용하는 것으로 알고 있다.

그렇기 때문에 메모리를 적게 사용하는 방법을 생각해 봤는데 아래처럼 number를 사용하면 조금은 더 좋은 코드가 될 것 같다.

let p = 0
let y = 0

for (let i=0; i < upperCase.length; i++) {
  if ( upperCase[i] === "P") p++
  else if ( upperCase[i] === "Y") y++
}

if (p === y) return true
else return false




다른 사람들의 풀이

생각하기에서 카운트를 사용하여 코드를 작성하였는데 다른 사람들의 풀이를 찾아보면서 이 코드도 더 간단하게 작성할 수 있는 방법이 있었다.

function solution(s){
    let str= s.toLowerCase();
    let count = 0
    for(let i = 0; i <s.length; i++){
        if(str[i]==="p") count++;
        else if(str[i]=== "y") count--
    }
    return count === 0 ? true : false
}

내가 작성했던 코드는 p와 y의 카운트를 따로 변수에 저장하여 비교하는 코드였는데 위의 코드는 p와 동일한 개수만큼 카운트를 올리고 y와 동일한 개수만큼 카운트를 줄여서 결과값이 0이라면 true를 아니라면 false를 반환하도록 하는 코드였다.

변수를 하나 줄이기 때문에 당연히 메모리는 더 효율적으로 관리 될 것이고 마지막의 참 거짓을 판한하는 코드도 삼항연사자를 사용하여 보기 좋게 작성하였다.


위의 것은 그래도 내가 작성했던 코드와 비슷한 방식의 풀이인데 다른 메소드를 사용하여 매우 짧게 코드를 작성하는 방법도 있었다.

function numPY(s){
    return s.toUpperCase().split("P").length === s.toUpperCase().split("Y").length;
}
function numPY(s) {
  return s.match(/p/ig).length == s.match(/y/ig).length;
}

두 코드를 보고 정말 많이 공부하고 생각을 조금 더 해봐야겠다는 생각이 든다.

profile
즐거운 개발을 위해~

0개의 댓글