[ 내가 푼 풀이 ]
//제일 처음 혼자 풀었던 풀이
function solution(s) {
let yCount = s.match(/y/gi).length;
let pCount = s.match(/p/gi).length;
if (yCount == pCount) {
true;
} else {
false;
}
}
1. 대소문자 구분 없게 하기 위해 //gi를 써서 넣음
2. if 문 까지는 어찌저찌 성공, 하지만 p, y 가 없을 땐 도대체 어떻게 해야되지? 라는 고민의 굴레에 빠짐
3. 구글의 도움을 받은 아래가 2번째 풀이
function solution(s) {
let str = s.toUpperCase();
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;
}
구글링 해보니 알파벳의 일부는 소문자로 변환 할 때 왕복 할 수 없기 때문에 대문자 방법이 선호된다고 함
그래서 toUppercase()로 변환 후 P를 찾으면 +1, Y를 찾으면 -1 을 해 결과값이 0 이면 true, 아니면 false
이 과정에서 P, Y 둘다 없다면 count 값은 계속 0 이므로 항상 true 반환 할 것
찾다보니 한 줄로도 가능한 코드를 발견했다.
function solution(s){
return s.toUpperCase().split("P").length === s.toUpperCase().split("Y").length;
}
대문자로 바꾼 후 문자열에서 P를 잘라낸 배열과 Y를 잘라낸 배열의 길이가 같으면 true, 아니면 false 반환!
이 때, split의 개념이 헷갈려서 console 창에 하나하나 다 찍어 봄
const s = "Avdc"
const a = s.toUpperCase().split("P"); // a = ['AVDC']
const aLength = s.toUpperCase().split("P").length; // aLength = 1
const s = "Avdcp"
const a = s.toUpperCase().split("P"); // a = (2) ['AVDC', '']
const aLength = s.toUpperCase().split("P").length; // aLength = 2
// 이 때, a[1] = ''
즉, split(separator, limit) 은 separator 로 잘라 limit 크기 이하의 "배열"에 잘라진 문자를 저장
이 때, split("p") 라는 뜻은 separator를 p로 지정해 자른 후 조각을 배열에 담아 리턴해주는 것
따라서 첫 번째 경우 p가 없기에 전체를 length 가 1 인 배열에 담아 리턴
두번째 경우, p 를 구분자로 써 'AVDC' 와 '' (공백) 을 리턴해줌 ( length 길이 = 2 )
결국, 문자열에 P , Y 둘 다 없다면 length의 길이가 1 인 배열을 리턴해줄 것
[STUDY 리더님의 풀이 조언]
function solution(s) {
const upperStr = s.toUpperCase(); // 좀 더 명확한 변수명
let count = 0;
for (let i = 0; i < s.length; i++) {
if (upperStr[i] === "P") count++;
else if (upperStr[i] === "Y") count--;
}
return !count ? true : false;
}
1. 변수명을 upperStr 로 좀 더 명확하게 지어줄 것
2. 연산자 사용시 == (동등 연산자) 보다 === (일치 연산자) 써 줄 것 ( 더 정확하게 비교해줌 )
3. count === 0 과 !count 는 같다 ( 0 은 false 이기 때문에 !count 와 같은 의미 )
* 자동 형변환시에 숫자 0 , 빈문자열은 false인거 기억
// 아래 코드는 동일!
return count === 0 ? true : false;
return !count ? true : false;
4. for ... of 문으로도 사용이 가능함
// for ... of문 예제
for (const el of upperStr) {
if (el === "P") count++;
else if (el === "Y") count--;
}
'코딩 테스트 > Programmers - 1' 카테고리의 다른 글
[JS] 나머지가 1이 되는 수 찾기 (1) | 2022.08.23 |
---|---|
[JS] 수박수박수박수박수박수? (0) | 2022.08.22 |
[JS] 서울에서 김서방 찾기 (0) | 2022.08.22 |
[JS] 3진법 뒤집기 (0) | 2022.08.21 |
[JS] 가운데 글자 가져오기 (0) | 2022.08.20 |