Front-End

프로그래머스 기초트레이닝 13일차 본문

알고리즘

프로그래머스 기초트레이닝 13일차

jeongsso 2023. 8. 30. 02:49

 

 

 

문제 64 .  0 떼기


문제 설명

정수로 이루어진 문자열 n_str이 주어질 때,
n_str의 가장 왼쪽에 처음으로 등장하는 0들을 뗀 문자열을 return하도록 solution 함수를 완성해주세요.


입출력 예

n_str result
"0010" "10"
"854020" "854020"

 

 

입출력 예 설명

"0010"의 가장 왼쪽에 연속으로 등장하는 "0"을 모두 제거하면 "10"이 됩니다.

"854020"는 가장 왼쪽에 0이 없으므로 "854020"을 return합니다.

 

 

저의 풀이!

function solution(n_str) {
    return String(Number(n_str));
}

console.log(solution('0010'));

 

 

메모

문자열을 숫자로 변경하면 앞에있는 숫자 0들은 사라지고 정수만 남기때문에
일단 숫자로 변환해서 0을제거하고 그 후에 문자열로 출력하게 함

 

 

 

문제 65 .  뒤에서 5등까지


문제 설명

정수로 이루어진 리스트 num_list가 주어집니다. 
num_list에서 가장 작은 5개의 수를 오름차순으로 담은 리스트를 return하도록 solution 함수를 완성해주세요.







 

 

입출력 예

num_list result
[12, 4, 15, 46, 38, 1, 14] [1, 4, 12, 14, 15]

 

 

 

입출력 예 설명

[12, 4, 15, 46, 38, 1, 14]를 정렬하면 [1, 4, 12, 14, 15, 38, 46]이 되고, 앞에서 부터 5개를 고르면 [1, 4, 12, 14, 15]가 됩니다.

 

저의 풀이!

 
function solution(num_list) {
    return num_list.sort((a, b) => a - b).slice(0, 5);
}

console.log(solution([12, 4, 15, 46, 38, 1, 14]));

 

메모

sort함수로 기존 배열의 순서를 오름차순으로 정렬한 후 slice를 이용해서 순서를 잘라주었습니다.

 

 

 

문제 66 .  순서 바꾸기


문제 설명

정수 리스트 num_list와 정수 n이 주어질 때, 
num_list를 n 번째 원소 이후의 원소들과 n 번째까지의 원소들로 나눠 
n 번째 원소 이후의 원소들을 n 번째까지의 원소들 앞에 붙인 리스트를 return하도록 solution 함수를 완성해주세요.


 

입출력 예

num_list n result
[2, 1, 6] 1 [1, 6, 2]
[5, 2, 1, 7, 5] 3 [7, 5, 5, 2, 1]

 

 

 

입출력 예 설명

[2, 1, 6]에서 첫 번째 이후의 원소는 [1, 6]이고 첫 번째까지의 원소는 [2]입니다. 두 리스트를 이어 붙이면 [1, 6, 2]가 됩니다.

[5, 2, 1, 7, 5]에서 세 번째 이후의 원소는 [7, 5]이고 세 번째까지의 원소는 [5, 2, 1]입니다. 두 리스트를 이어 붙이면 [7, 5, 5, 2, 1]가 됩니다.

 

 

저의 풀이!

function solution(num_list, n) {
    let 뒤에거 = num_list.slice(n);
    let 앞에거 = num_list.slice(0, n);

    return 뒤에거.concat(앞에거);
    // return [...뒤에거, ...앞에거];
}

console.log(solution([5, 2, 1, 7, 5], 3));

 

 

메모

n을 기준으로 뒤에랑 앞에를 나눠서 변수에 담은 후
배열합치는 concat 메서드를 사용해서 합쳤습니다.

스프레드로도 가능합니다.
요즘엔 concat 보다는 스프레드로 많이 사용한다고 합니다!

 

 

 

문제 67 .  l로 만들기


문제 설명

알파벳 소문자로 이루어진 문자열 myString이 주어집니다. 
알파벳 순서에서 "l"보다 앞서는 모든 문자를 "l"로 바꾼 문자열을 return 하는 solution 함수를 완성해 주세요.


 

입출력 예

myString result
"abcdevwxyz" "lllllvwxyz"
"jjnnllkkmm" "llnnllllmm"

 

 

 

입출력 예 설명

0 ~ 4번 인덱스의 문자 "a","b","c","d","e"는 각각 "l"보다 앞서는 문자입니다. 따라서 "l"로 고쳐줍니다.
그 외의 문자는 모두 "l"보다 앞서지 않는 문자입니다. 따라서 바꾸지 않습니다.
따라서 "lllllvwxyz"을 return 합니다.

0번, 1번, 6번, 7번 인덱스의 문자 "j","j","k","k"는 각각 "l"보다 앞서는 문자입니다. 따라서 "l"로 고쳐줍니다.
그 외의 문자는 모두 "l"보다 앞서지 않는 문자입니다. 따라서 바꾸지 않습니다.
따라서 "llnnllllmm"을 return 합니다.

 

 

저의 풀이!

function solution(myString) {
    return [...myString].map(a => (a.match(/^[l-z]/g) ? a : 'l')).join('');
}

console.log(solution('abcdevwxyz'));

 

 

메모

;;;;; 저는 map 함수를 이용해서 match로 정규식을 사용해서 마지막에 join을 썼습니다.
근데 ..!! 자바스크립트에서는 문자도 부등호 비교가 가능하다고 합니다..!!!!!

function solution1(myString) {
return [...myString].map(a => (a < 'l' ? 'l' : a)).join('');
}
 
console.log(solution1('abcdevwxyz'));

 

 

 

 

 

문제 68 .  할 일 목록


문제 설명

오늘 해야 할 일이 담긴 문자열 배열 todo_list와 
각각의 일을 지금 마쳤는지를 나타내는 boolean 배열 finished가 매개변수로 주어질 때, 
todo_list에서 아직 마치지 못한 일들을 순서대로 담은 문자열 배열을 return 하는 solution 함수를 작성해 주세요.


 

입출력 예

todo_list finished result
["problemsolving", "practiceguitar", "swim", "studygraph"] [true, false, true, false] ["practiceguitar", "studygraph"]

 

 

 

입출력 예 설명

예제 1번의 todo_list 중에서 "problemsolving"과 "swim"은 마쳤고, "practiceguitar"와 "studygraph"는 아직 마치지 못했으므로 todo_list에서 나온 순서대로 담은 문자열 배열 ["practiceguitar", "studygraph"]를 return 합니다.

 

 

저의 풀이!

function solution(todo_list, finished) {
    let answer = [];

    for (let i = 0; i < todo_list.length; i++) {
        if (finished[i] === true) {
            null;
        } else {
            answer.push(todo_list[i]);
        }
    }
    return answer;
}

console.log(
    solution(
        ['problemsolving', 'practiceguitar', 'swim', 'studygraph'],
        [true, false, true, false]
    )
);

 

 

메모

여기서 저는 반복을 사용해서 만약 true가 아닌 경우 새 배열에 요소를 넣어주면서 출력해 냈습니다.

근데 사실 filter로 조건으로 넣어주면 더 깔끔하게 정리를 할 수 있습니다.>!

function solution1(todo_list, finished) {
    return todo_list.filter((_, i) => !finished[i]);
}
 
console.log(
    solution1(
        ['problemsolving', 'practiceguitar', 'swim', 'studygraph'],
        [true, false, true, false]
    )
);



 

문제 69 .  특이한 이차원 배열 2


문제 설명

n × n 크기의 이차원 배열 arr이 매개변수로 주어질 때,
arr이 다음을 만족하면 1을 아니라면 0을 return 하는 solution 함수를 작성해 주세요.

0 ≤ i, j < n인 정수 i, j에 대하여 arr[i][j] = arr[j][i]

 

입출력 예

arr result
[[5, 192, 33], [192, 72, 95], [33, 95, 999]] 1
[[19, 498, 258, 587], [63, 93, 7, 754], [258, 7, 1000, 723], [587, 754, 723, 81]] 0

 

 

 

입출력 예 설명

 

 

저의 풀이!

function solution(arr) {
    for (let i = 0; i < arr.length; i++) {
        for (let j = 0; j < i; j++) {
            return arr[i][j] === arr[j][i] ? 1 : 0;
        }
    }
}

console.log(
solution([
[19, 498, 258, 587],
[63, 93, 7, 754],
[258, 7, 1000, 723],
[587, 754, 723, 81],
])
);

 

메모

이중 배열이라 이중 반복문을 사용해서 조건을 맞춰주었다.
조큼 생각하면 쉬웠다!

Comments