1+1을 배웠는데 log3(2x-3) 을 풀어야 할 때

WOODIE·2025년 1월 2일
0

#Record

목록 보기
7/24
post-thumbnail

대문자와 소문자가 섞여있는 문자열 s가 주어집니다. s에 'p'의 개수와 'y'의 개수를 비교해 같으면 True, 다르면 False를 return 하는 solution를 완성하세요. 'p', 'y' 모두 하나도 없는 경우는 항상 True를 리턴합니다. 단, 개수를 비교할 때 대문자와 소문자는 구별하지 않습니다.

예를 들어 s가 "pPoooyY"면 true를 return하고 "Pyy"라면 false를 return합니다.


[풀이1]

function solution(s) {
  const lowerCaseStr = s.toLowerCase();
  
  const pCount = lowerCaseStr.split('p').length - 1;
  const yCount = lowerCaseStr.split('y').length - 1;
  
  return pCount === yCount;
}

toLowerCase 는 문자열을 소문자로 변환하는 메서드. 문자를 소문자로 전부 바꾸어 계산한다.


split() 메서드는 문자열을 지정한 구분자를 기준으로 나누고, 나눠진 결과를 배열로 반환한다. 예를 들어

const str = "apple";
const result = str.split('p');
console.log(result); // ["a", "", "le"]

p 를 기준으로 나누었으므로, 첫 번째 p 의 앞부분 a , 두 p 사이의 공백인 "" , 그리고 두 번째 p 이후의 부분인 le 로 나뉘어 ["a", "", "le"] 가 반환된다.


toLowerCase 로 소문자화한 문자열을 p 로 나눠준다. lowerCaseStr.split('p') 로 문자열을 모든 p 기준으로 나눈다. 만일 ppyyoo를 나누면, 문자열의 첫 p 앞에 아무 것도 없으므로 빈 문자열인 "" , 두 번째 p 와 첫 번째 p 사이도 "" , 그리고 마지막 p 이후의 나머지 문자열인 yyoo 로 나뉘어 ["", "", "yyoo"] 의 배열이 반환된다.

split('p') 로 나눠진 배열의 길이는, 문자열에 등장한 p 의 개수보다 1만큼 더 많다. 따라서 split('p').length - 1 을 해주어야 p 의 개수를 얻을 수 있다.

∴ 주어진 문자열에서 py 의 개수를 구할 수 있는 코드는 아래와 같다.

cosnt pCount = lowerCaseStr.slpit('p').length - 1;
// p 의 개수 구하기
const yCount = lowerCaseStr.split('y').length - 1;
// y 의 개수 구하기

이렇게 정확한 알파벳의 개수를 구해서 비교하면 끝!


하지만

생각해보면 -1 을 하나 안하나 어차피 개수 비교는 같은 숫자가 뜬다. 그리고 꼭 스트링을 따로 변환한 후에 비교하지 않아도 될 것 같은데 그러면 더 간단하게 코드를 짤 수 있다!

function solution(s) {
 return s.toLowerCase().split('p').length === s.toLowerCase().split('y').length 
}

이렇게 짜면 한 줄로 코드 완성!

0개의 댓글