문자열이 y와 일치할 때와 p와 일치하는 갯수를 각각 변수로 선언하려다
변수를 최대한 적게 선언하고 싶어서 filter와 length를 써서 바로 반환했다.
저 return문 라인이 실행 시 true면 true가 반환되고 false면 false가 반환될 거라 return true, return false가 들어가는 조건 분기문도 필요 없었다. (filter 짱..!)
하지만 점수는 자그마치 1점이 떴다. 한시도 방심할 수 없는 코딩의 세계 😇
function solution(s){
const string = s.toLowerCase().split('');
return string.filter((s) => s === 'y').length === string.filter((s) => s === 'p').length;
}
다른 사람 풀이를 보니 한 줄로 끝낸 코드가 있었다.
얼핏 봤을 때는 내 코드에서 string 변수만 없앤 줄 알았는데 아니었다.
p와 y인 경우 두 갯수가 서로 일치하는지만 확인하면 되는데 이때 p와 y의 '실제' 갯수가 아니라, 둘을 기준으로 나눈 갯수를 세도 되는 거였다.
즉 관련된 갯수가 서로 같은 지 다른 지만 비교하면 된다.
둘의 각각의 갯수를 정확히 구하는 filter 메서드는 필요가 없었다(!)
function solution(s){
return s.toUpperCase().split('P').length === s.toUpperCase().split('Y').length;
}
이전 코테 문제들을 풀며 알게 됐던 것은
1. 자바스크립트 문자열 메서드는 시간을 많이 소모한다.
2. 메서드 갯수 자체를 줄일수록 시간이 덜 든다.
였다. 즉, 아무리 편리한 메서드라도 최대한 적게 쓰는 것이 시간상 유리하다.
새로운 풀이를 통해 split 메서드의 또 다른 활용법을 배웠다 👏