(JS) 알고리즘 - 문자열 내 p와 y의 개수
2023. 6. 20. 15:38✔ 문제 요약
대문자와 소문자가 섞여있는 문자열 s가 주어집니다. s에 'p'의 개수와 'y'의 개수를 비교해 같으면 True, 다르면 False를 return 하는 solution를 완성하세요. 'p', 'y' 모두 하나도 없는 경우는 항상 True를 리턴합니다. 단, 개수를 비교할 때 대문자와 소문자는 구별하지 않습니다.
예를 들어 s가 "pPoooyY"면 true를 return하고 "Pyy"라면 false를 return합니다.
✔ 문제 접근
대문자와 소문자를 구별하지 않는데 섞여있으므로 대문자와 소문자를 둘 중 하나로 통일한다.
p의 개수와 y의 개수를 각각 구하고 불린값으로 리턴한다.
✔ 문제 풀이
(1) 대문자로 통일하려면 s.toUpperCase, 소문자로 통일하려면 s.toLowerCase를 사용하면 된다.
이번에는 소문자로 통일하고, loweCaseS라는 새로운 변수에 할당했다.
(2) 자바스크립트에서 문자열 lowerCase 중 특정 글자의 수를 구하는 방법은 두가지가 있는데 메서드 filter와 split을 사용한 방법이다.
(1) fitler();
(1) 처음에 filter를 먼저 떠올렸는데, filter는 배열에만 사용할 수 있다. 그래서 어차피 split도 써야한다..
(2) split('') 메서드로 문자열을 배열로 바꾼 뒤, 'p'와 같은 것들만 남긴 배열을 만든 뒤 길이를 구했다.
만약 입력값 s가 "pPoooyY"라면 lowerCaseS.split('').filter((char) => char === 'p')는 ["p","p"]가 된다.
(3) filter()메서드는 const A = 배열.filter((char) => char ~) 일때, char~ 부분이 참인 것들로 새로운 배열 A를 만든다.
여기서 매개변수 char는 원하는대로 바꿔서 사용할 수 있지만 보통 "character"의 줄임말인 char를 사용한다.
char는 컴퓨터가 기억하거나 송출할 수 있는 숫자나 알파벳 또는 특수 기호, 즉 문자를 뜻한다.
(4) 같은 방식으로 yCount도 구한 뒤, 두 변수의 값을 비교한다. 같으면 true를 반환하라고 했으니 ===면 충분하다.
(5) p와 s가 없으면 true를 반환하라고 했는데, pCount도 0이고 yCount도 0이면 ===도 통과하기 때문이다.
return pCount === yCount는 삼항식 return pCount === yCount ? true : false를 간략하게 쓴 것이다.
(2) split();
(1) 소문자로 통일한 문자열 lowerCase를 구분자 'p'로 자른다.
만약 입력값 s가 "pPoooyY"라면 => "ppoooy" => ["","","oooyy"]가 된다.
(2) p가 있던 자리마다 공백이 생기는 형태로 배열화 된다고 생각하면 된다.
그래서 p가 2개 있으면 배열의 길이는 2+1개가 된다.
(3) 따라서, p의 개수를 구하기 위해서는 배열의 길이에 -1을 하면 된다.
(4) 같은 방식으로 yCount도 구한 뒤, 두 변수의 값을 비교한다. 같으면 true를 반환하라고 했으니 ===면 충분하다.
(5) p와 s가 없으면 true를 반환하라고 했는데, pCount도 0이고 yCount도 0이면 ===도 통과하기 때문이다.
return pCount === yCount는 삼항식 return pCount === yCount ? true : false를 간략하게 쓴 것이다.
'JavaScript > 알고리즘' 카테고리의 다른 글
(JS) 알고리즘 - 수박수박수박수박수박수? (0) | 2023.06.20 |
---|---|
(JS) 알고리즘 - 서울에서 김서방 찾기 (0) | 2023.06.20 |
(JS) 알고리즘 - 내적 (0) | 2023.06.20 |
(JS) 알고리즘 - 나누어 떨어지는 숫자 배열 (0) | 2023.06.20 |
(JS) 알고리즘 - 2016년 (0) | 2023.06.20 |