[Programmers] 2022-09-29

김택수·2022년 9월 29일
0

문자열 내 p와 y의 개수

대소문자가 섞인 문자열 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 메서드를 찾게됐음.

  • sort() : 배열의 요소를 적절하게 배치해줌. 유니코드 포인트를 따라 정렬하게 되며, 숫자는 숫자의 순서와 같은 순서로 유니코드 포인트를 가지고 있기 때문에 숫자순서대로 정렬 가능함.

3) sort를 하게 되면 내림차순이 아닌 오름차순으로 수가 정렬되는데, 이 때 다시 reverse메서드를 통해 거꾸로 돌려줄 수 있다.

4) 거꾸로 돌려준 배열을 join메서드에 인자를 ""로 넣어주면서 공백없이 하나의 문자열로 변환시키면서 해결가능 (join메서드에 인자를 넣지않으면 ,로 나누어 문자열로 반환하는것이 기본)

profile
개발자 키우기 Lv1

0개의 댓글