대소문자가 섞인 문자열 s에 p와 y의 개수가 같으면 true, 아니면 false를 리턴하는 문제
function solution(s){
var answer = true;
const array = s.toLowerCase().split("");
let countP = 0;
let countY = 0;
array.forEach(el => {
if(el == 'p') {
countP += 1;
} else if(el == 'y') {
countY += 1;
}
})
if(countP == 0 && countY == 0) {
answer = true;
}
else if(countP == countY) {
answer = true;
} else if(countP != countY) {
answer = false;
}
return answer;
}
1) 문자열을 split메서드를 통해 배열로 만들고, forEach를 통해 각 요소의 값이 'p'인 경우 countP를 1씩, 값이 'y'인 경우 countY를 1씩 더해주고, 두 값을 비교하여 true, false를 반환하는 조건문을 만듬
2) 테스트 케이스는 통과하였으나, 채점 시 많은 문제들이 실패하였음.
3) 대소문자 구분을 하지 않아 채점 시 통과하지 못했음. 주어진 문자열 s를 먼저 toLowerCase메서드를 통해 소문자로 변환 후, split해주어 해결.
x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나뉠 수 있어야 함. 예를 들어 18의 자릿수의 합은 1+8로 9이며, 18은 9로 나누어 떨어지기 때문에 하샤드 수이다. 하샤드 수인지 아닌지 검사하는 메서드를 작성하는 문제
function solution(x) {
var answer = true;
const char = String(x).split("");
let sum = 0;
for(let i = 0; i < char.length; i++) {
sum += Number(char[i]);
}
if(x % sum === 0) answer = true;
else answer = false;
return answer;
}
1) 숫자 x를 문자로 바꿔주고 split메서드를 이용해 배열로 변환.
2) for문을 이용해 변수 sum에 각각의 요소들을 숫자로 변환해 저장.
3) 처음엔 sum % x을 작성하여 나눠지지 않아 오류가 발생했음. 둘을 바꿔줌으로써 해결가능.
인자로 받은 n을 큰 것부터 작은 순으로 정렬한 새로운 정수를 리턴하는 문제
function solution(n) {
var answer = Number(String(n).split("").sort().reverse().join(""));
return answer;
}
1) 첫 접근은 n을 문자열로 바꾸고 split을 통해 배열로 바꿨다. 그리고 for문을 통해 맨 마지막 줄을 기준으로 큰것은 unshift로 앞배치하고 작은것은 push로 뒷배치를 하여 새로운 배열을 만들어냈는데, 마지막 자리 하나를 기준으로 하기 때문에 숫자가 큰 수에 상관없이 쌓여가기만 했음.
2) 배열 메서드들을 검색하다가, sort 메서드를 찾게됐음.
3) sort를 하게 되면 내림차순이 아닌 오름차순으로 수가 정렬되는데, 이 때 다시 reverse메서드를 통해 거꾸로 돌려줄 수 있다.
4) 거꾸로 돌려준 배열을 join메서드에 인자를 ""로 넣어주면서 공백없이 하나의 문자열로 변환시키면서 해결가능 (join메서드에 인자를 넣지않으면 ,로 나누어 문자열로 반환하는것이 기본)