Front-End

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

알고리즘

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

jeongsso 2023. 8. 16. 18:38

 

 

문제 31.  문자열 뒤의 n글자


문제 설명

문자열 my_string과 정수 n이 매개변수로 주어질 때,

my_string의 뒤의 n글자로 이루어진 문자열을 return 하는 solution 함수를 작성해 주세요.

 

 

입출력 예

my_string n result
"ProgrammerS123" 11 "grammerS123"
"He110W0r1d" 5 "W0r1d"

 

 

입출력 예 설명

예제 1번의 my_string에서 뒤의 11글자는 "grammerS123"이므로 이 문자열을 return 합니다.

 

예제 2번의 my_string에서 뒤의 5글자는 "W0r1d"이므로 이 문자열을 return 합니다.

 

 

저의 풀이!

function solution(my_string, n) {
    return my_string.substr(my_string.length - n);
}

console.log(solution('ProgrammerS123', 11));

 

메모

문자열을 자르기 위한 함수로는 

substr(), substring(), slice() 함수가 있다.

문자열을 뒤에서부터 자를거면 사실 slice를 사용해서 하면 효율적이다.

slice부터 봐보자.

var str = '자바스크립트';

var result1 = str.slice(0, 2);
// 결과 : "자바"

var result2 = str.slice(2, 6);
// 결과 : "스크립트"

var result3 = str.slice(2);
// 결과 : "스크립트"

// 음수로 하면 뒤에서부터 숫자까지입니다.

var result4 = str.slice(-4);
// 결과 : "스크립트"

var result5 = str.slice(-4, 5);
// 결과 : "스크립"

var result6 = str.slice(2, -1);
// 결과 : "스크립"

slice("시작 위치", "종료 위치") 또는 slice("시작 위치")

 

 

이렇게 해도되고, 

substr 함수로는

var str = '자바스크립트';

var result1 = str.substr(0, 2);
// 결과 : "자바"

var result2 = str.substr(2, 4);
// 결과 : "스크립트"

var result3 = str.substr(2);
// 결과 : "스크립트"

substr("시작 위치", "길이") 또는 substr("시작 위치")

여기서는 저는 result3처럼 시작위치만 지정했는데, 

조건에 맞게 숫자를 잘적어주면 됩니다. 

my_string.length-n 이걸 보면 그 문자열 길이에서 n만큼 뺀숫자부터 시작해서 마지막까지가게끔만하면되서 이렇게 풀었어요 저는 

 

이런식으로 해도 됩니다요.

 

 

 

문제 32.  n 번째 원소까지


문제 설명

정수 리스트 num_list와 정수 n이 주어질 때,

num_list의 첫 번째 원소부터 n 번째 원소까지의 모든 원소를 담은 리스트를 return하도록 solution 함수를 완성해주세요.

 

 

입출력 예

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

 

 

입출력 예 설명

[2, 1, 6]의 첫 번째 원소부터 첫 번째 원소까지의 모든 원소는 [2]입니다.

[5, 2, 1, 7, 5]의 첫 번째 원소부터 세 번째 원소까지의 모든 원소는 [5, 2, 1]입니다.

 

 

저의 풀이!

 
function solution(num_list, n) {    
    let answer = [];

    for (let i = 0; i < n; i++) {
        answer.push(num_list[i]);
    }
    return answer;
}

console.log(solution([2, 1, 6], 1));

 

 

메모

간~단합니다~

 

 

 

 

 

 

문제 33.  문자열을 정수로 변환하기


문제 설명

숫자로만 이루어진 문자열 n_str이 주어질 때, 

n_str을 정수로 변환하여 return하도록 solution 함수를 완성해주세요.

 

입출력 예

n_str result
"10" 10
"8542" 8542

 

입출력 예 설명

"10"을 정수로 바꾸면 10입니다.

 

"8542"를 정수로 바꾸면 8542입니다.

 

 

저의 풀이!

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

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

 

메모

너무 쉬웟당

 

 

 

문제 34.  정수 찾기


문제 설명

정수 리스트 num_list와 찾으려는 정수 n이 주어질 때,

num_list안에 n이 있으면 1을 없으면 0을 return하도록 solution 함수를 완성해주세요.

 

입출력 예

num_list n result
[1, 2, 3, 4, 5] 3 1
[15, 98, 23, 2, 15] 20 0

 

입출력 예 설명

[1, 2, 3, 4, 5] 안에 3이 있으므로 1을 return합니다.

[15, 98, 23, 2, 15] 안에 20이 없으므로 0을 return합니다.

 

 

저의 풀이!

 
function solution(num_list, n) {
    return Number(num_list.includes(n));
}

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

 

 

메모

간~단합니다~

 

 

 

 

 

 

문제 35.  문자열로 변환


문제 설명

정수 n이 주어질 때, n을 문자열로 변환하여 return하도록 solution 함수를 완성해주세요.

 

 

입출력 예

n result
123 "123"
2573 "2573"

 

 

입출력 예 설명

123을 문자열로 변환한 "123"을 return합니다.

2573을 문자열로 변환한 "2573"을 return합니다.

 

 

저의 풀이!

function solution(n) {
    return String(n);
}

console.log(solution(123));

 

메모

이것도 매우 간단했습니당.

 

 

 

 

 

 

문제 36.  원소들의 곱과 합


문제 설명

정수가 담긴 리스트 num_list가 주어질 때, 

모든 원소들의 곱이 모든 원소들의 합의 제곱보다 작으면 1을 크면 0을 return하도록 solution 함수를 완성해주세요.

 

입출력 예

num_list result
[3, 4, 5, 2, 1] 1
[5, 7, 8, 3] 0

 

입출력 예 설명

모든 원소의 곱은 120, 합의 제곱은 225이므로 1을 return합니다.

모든 원소의 곱은 840, 합의 제곱은 529이므로 0을 return합니다.

 

 

저의 풀이!

 
function solution(num_list) {
    let 곱한거 = 1;
    let 제곱 = 0;

    for (let i = 0; i < num_list.length; i++) {
        곱한거 *= num_list[i];
        제곱 += num_list[i];
    }
    return 곱한거 < 제곱 ** 2 ? 1 : 0;
}

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

 

 

메모

간~단합니다~

조건 만들어서 변수에 담아주고, 마지막에 삼항연산자로 한번더 걸러주면됩니다.

아! 주의할점 곱할땐 0부터하면 0만나오니까 1로 시작해요!

 

 

 

 

 

문제 37.  배열 비교하기


문제 설명

이 문제에서 두 정수 배열의 대소관계를 다음과 같이 정의합니다.

두 배열의 길이가 다르다면, 배열의 길이가 긴 쪽이 더 큽니다.


배열의 길이가 같다면 각 배열에 있는 모든 원소의 합을 비교하여 다르다면 더 큰 쪽이 크고, 같다면 같습니다.
두 정수 배열 arr1과 arr2가 주어질 때, 위에서 정의한 배열의 대소관계에 대하여 arr2가 크다면 -1, arr1이 크다면 1, 

두 배열이 같다면 0을 return 하는 solution 함수를 작성해 주세요.

 

 

입출력 예

arr1 arr2 result
[49, 13] [70, 11, 2] -1
[100, 17, 84, 1] [55, 12, 65, 36] 1
[1, 2, 3, 4, 5] [3, 3, 3, 3, 3] 0

 

 

 

입출력 예 설명

예제 1번에서는 arr1의 길이는 2이고 arr2의 길이는 3으로 arr2의 길이가 더 깁니다. 따라서 arr2가 arr1보다 크므로 -1을 return 합니다.

예제 2번에서는 arr1의 길이과 arr2의 길이가 4로 같습니다. arr1의 모든 원소의 합은 100 + 17 + 84 + 1 = 202이고 arr2의 모든 원소의 합은 55 + 12 + 65 + 36 = 168으로 arr1의 모든 원소의 합이 더 큽니다. 따라서 arr1이 arr2보다 크므로 1을 return 합니다.

예제 3번에서는 arr1의 길이와 arr2의 길이가 5로 같고 각 배열의 모든 원소의 합 또한 15로 같습니다. 따라서 arr1과 arr2가 같으므로 0을 return 합니다.

 

 

저의 풀이!

 
function solution(arr1, arr2) {
    if (arr1.length === arr2.length) {
        if (arr1.reduce((a, c) => a + c) > arr2.reduce((a, c) => a + c)) {
            return 1;
        } else if (arr1.reduce((a, c) => a + c) === arr2.reduce((a, c) => a + c)) {
            return 0;
        } else {
            return -1;
        }
    } else if (arr1.length > arr2.length) {
        return 1;
    } else {
        return -1;
    }
}

console.log(solution([49, 13], [70, 11, 2]));

 

 

메모

처음에 조건문으로만 여러번 했더니 헷갈리고 가독성이 좋지않다 생각했습니다.

그래서 조건을 좀 단축해보고, 변수를 지정해봤습니다. 

 

function solution(arr1, arr2) {
    let arr1모든원소합 = arr1.reduce((a, c) => a + c);
    let arr2모든원소합 = arr2.reduce((a, c) => a + c);

    if (
        (arr1.length === arr2.length && arr1모든원소합 > arr2모든원소합) ||
        arr1.length > arr2.length
        ) {
            return 1;
    } else if (
        (arr1.length === arr2.length && arr1모든원소합 < arr2모든원소합) ||
            arr1.length < arr2.length
        ) {
            return -1;
    } else if (arr1.length === arr2.length && arr1모든원소합 === arr2모든원소합) {
        return 0;
    }
}

 

 

 

 

 

문제 38.  n 번째 원소부터


문제 설명

정수 리스트 num_list와 정수 n이 주어질 때, 

n 번째 원소부터 마지막 원소까지의 모든 원소를 담은 리스트를 return하도록 solution 함수를 완성해주세요.

 

입출력 예

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

 

 

입출력 예 설명

[2, 1, 6]의 세 번째 원소부터 마지막 원소까지의 모든 원소는 [6]입니다.

[5, 2, 1, 7, 5]의 두 번째 원소부터 마지막 원소까지의 모든 원소는 [2, 1, 7, 5]입니다.

 

 

저의 풀이!

 
function solution(num_list, n) {
    return num_list.slice(n - 1, num_list.length);
}

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

 

 

메모

array.slice(시작점(인덱스), 끝점인덱스)
인덱스라는 걸 감안하고 n-1 을 적용했다.
num_list.length 여기에 적용안한 이유는 어차피 없으니까 빈값으로 들어오기때문이다

 

 

 

 

 

 

문제 39.  배열에서 문자열 대소문자 변환하기


문제 설명

문자열 배열 strArr가 주어집니다. 

모든 원소가 알파벳으로만 이루어져 있을 때, 

배열에서 홀수번째 인덱스의 문자열은 모든 문자를 대문자로, 

짝수번째 인덱스의 문자열은 모든 문자를 소문자로 바꿔서 반환하는 solution 함수를 완성해 주세요.

 

 

입출력 예

my_string result
["AAA","BBB","CCC","DDD"] ["aaa","BBB","ccc","DDD"]
["aBc","AbC"] ["abc","ABC"]

 

 

입출력 예 설명

strArr[0]과 strArr[2]는 짝수번째 인덱스의 문자열이므로 모두 소문자로 바꿔서 "aaa"와 "ccc"가 됩니다.
strArr[1]과 strArr[3]는 홀수번째 인덱스의 문자열인데 원래 대문자이므로 그대로 둡니다.
따라서 ["aaa","BBB","ccc","DDD"]를 return 합니다.
입출력 예 #2

strArr[0]은 짝수번째 인덱스의 문자열이므로 소문자로 바꿔서 "abc"가 됩니다.
strArr[1]은 홀수번째 인덱스의 문자열이므로 대문자로 바꿔서 "ABC"가 됩니다.
따라서 ["abc","ABC"]를 return 합니다.

 

 

저의 풀이!

 
function solution(strArr) {
    let answer = [];

    for (let i = 0; i < strArr.length; i++) {
        if ( i % 2 === 0) {
            answer.push(strArr[i].toLowerCase());
        } else {
            answer.push(strArr[i].toUpperCase());
        }
    }
    return answer;
}

console.log(solution(['AAA', 'BBB', 'CCC', 'DDD']));

메모

 

일단,

빈배열 변수 만들고~

반복문으로 전체를 돌게끔 해서 조건을 인덱스가 짝수거나 홀수 일때를 적용해주면됩니다!

 

 

 

 

 

 

 

 

 

 

Comments