프로그래머스 [문자열 내 p와 y의 개수] / [K번째 수]

맹뿌·2021년 7월 10일
0

알고리즘 문제

목록 보기
4/5
post-thumbnail

1. 문자열 내 p와 y의 개수

💬 문제 요약

대문자와 소문자가 섞여있는 문자열 s가 주어짐. s에 'p'의 개수와 'y'의 개수를 비교해 같으면 True, 다르면 False를 return 하는 solution를 완성해야함. 'p', 'y' 모두 하나도 없는 경우는 항상 True를 리턴. 단, 개수를 비교할 때 대문자와 소문자는 구별하지 않음.

예를 들어 s가 "pPoooyY"면 true를 return하고 "Pyy"라면 false를 return.

💬 풀이 방법

function solution(s){
    var answer = true;
    let NumOfP = 0;
    let NumOfY = 0;
    
    s = s.toLowerCase();
    
    for(let i = 0; i < s.length; i++) {
        if(s[i] === 'p')
            NumOfP += 1;
        else if(s[i] === 'y')
            NumOfY += 1;
    }
    
    answer = (NumOfP === NumOfY) ? true : false;

    return answer;
}

일단 대문자 소문자가 섞여있으므로 문자열 전부를 대문자 혹은 소문자로 바꿔주는 작업을 해야 더 간단하게 풀이가 가능하다고 생각. 문자열을 전부 다 소문자로 바꿔줌. 그리고 반복문을 통해 p가 발견되면 p의 개수에 +1, y가 발견되면 y의 개수에 +1을 해줌. 마지막으로 삼항 연산자를 통해서 NumOfP와 NumOfY가 같으면 true 반환, 다르면 false 반환.

  • 알게 된 점
    1. split 활용한 다른 사람 풀이
      자바스크립트 문자열에 써둔 여러가지 문자열 함수에서 split를 활용하면 쉽게 풀이가 가능.
      s.toUpperCase().split("P").length === s.toUpperCase().split("Y").length;
      split은 인자로 전달된 문자를 기준으로 문자열을 구분하기 때문.

2. K번째 수

💬 문제 요약

배열 array의 i번째 숫자부터 j번째 숫자까지 자르고 정렬했을 때, k번째에 있는 수를 구하려 함. 예를 들어 array가 [1, 5, 2, 6, 3, 7, 4], i = 2, j = 5, k = 3이라면

  1. array의 2번째부터 5번째까지 자르면 [5, 2, 6, 3]입니다.
  2. 1에서 나온 배열을 정렬하면 [2, 3, 5, 6]입니다.
  3. 2에서 나온 배열의 3번째 숫자는 5입니다.

배열 array, [i, j, k]를 원소로 가진 2차원 배열 commands가 매개변수로 주어질 때, commands의 모든 원소에 대해 앞서 설명한 연산을 적용했을 때 나온 결과를 배열에 담아 return 하도록 solution 함수를 작성.

commands 형식 : [[2, 5, 3], [4, 4, 1], [1, 7, 3]]

💬 풀이 방법

function solution(array, commands) {
    var answer = [];
    let temporary = [];
    
    for(let i = 0; i < commands.length; i++) {
        temporary = array.slice((commands[i][0]-1), commands[i][1]);
        temporary.sort((a,b) => a - b);  // 가장 애먹은 부분
        answer[i] = temporary[(commands[i][2]-1)];
    }
    return answer;
}
  • 알게 된 점
    1. sort 함수의 경우, ASCII 코드 순서대로 정렬되어 순서대로 출력되지 않음. 이럴 경우에는
      temporary.sort((a,b) => a - b); // 오름차순,
      temporary.sort((a,b) => b - a); // 내림차순
      필요한 경우에 따라 맞춰서 사용하면 됨.
      => 🎁 sort 숫자 정렬 출처

🎁 문제 출처

profile
무엇이든 할 수 있고, 무엇이든 될 수 있는

0개의 댓글