문제 설명
대문자와 소문자가 혼합된 문자열 s가 주어집니다. s의 ‘p’의 수와 ‘y’의 수를 비교하여 같으면 True, 다르면 False를 반환하는 해를 완성하시오. ‘p’도 ‘y’도 없으면 항상 True를 반환합니다. 단, 개수를 비교할 때 대문자와 소문자는 구분하지 않는다.
예를 들어 s가 “pPoooyY”이면 true를 반환하고 s가 “Pyy”이면 false를 반환합니다.
제한
- 문자열 길이 s: 50 이하의 자연수
- 문자열 s는 문자로만 구성됩니다.
샘플 I/O 응답
| “푸이이” | 진실 |
| “파이” | 잘못된 |
I/O 예시 설명
I/O 예제 #1
‘p’의 개수는 2이고 ‘y’의 개수는 2이므로 true를 반환합니다.
I/O 예제 #2
‘p’의 개수는 1이고 ‘y’의 개수는 2이므로 false를 반환합니다.
솔루션 1
<!DOCTYPE html>
<html lang="en">
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
function solution(s){
let answer = true;
let uc = s.toUpperCase(); //toUpperCase() == 문자열을 대문자로 바꿔서 반환
let a = (...uc);
console.log(a);
let count1=0, count2=0; //초기값 정수 0으로 지정 안하면 NaN나옴.
for(let i=0; i<a.length; i++){
if(a(i) == 'P'){
count1 += 1;
}
if(a(i)=='Y'){
count2 += 1;
}
if(count1 == count2){
answer = true;
}
else{
answer =false;
}
}
return answer;
}
solution("pPoooyY"); //함수는 script 안에서만!
</script>
</body>
</html>
- toUpperCase()를 사용하여 문자열을 대문자로 변환
- 숫자를 셀 때 초기화가 필요합니다! (그렇지 않으면 결과가 NaN으로 반환됩니다.)
- 스크립트에서만 기능을 실행하십시오!
솔루션 2(다른 솔루션 참조)
<!DOCTYPE html> <html lang="en"> <head> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> <script> function solution(s){ //console.log(s.match(/p/ig) == s.match(/y/ig)); //match함수는 배열뿐만 아니라 문자열에도 가능-->문자열도 배열(?) //console.log(s.match(/p/ig)); //console.log(s.match(/y/ig)); t = s.match(/p/); console.log console.log(typeof document.write return s.match(/p/ig).length == s.match(/y/ig).length; } //regExp ig 입력하면 대문자와 소문자 구분할 필요 없음. solution("pPoooyY"); </script> </body> </html>
- 내 솔루션에 비해 매우 짧고 간단합니다.
- 게임 기능문자열과 배열 모두에 적용할 수 있습니다.
- match() 일치시킬 문자에 대해 i(대소문자 무시) 및 g(모든 요소 일치)로 나눈 배열을 반환합니다./ g를 입력하지 않으면 어레이 값 대신 다음과 같이 표시됩니다. –> g를 입력하여 모든 요소를 찾고 배열로 반환합니다.

- match.length로 배열의 길이를 비교하고 같으면 true를 반환하고 그렇지 않으면 false를 반환합니다.