Front-End

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

알고리즘

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

jeongsso 2023. 8. 7. 22:23

일요일은 놀았으니 오늘 많이 풀겟슴두 
8문항 풀었어요!

 

 

문제 8.  문자 리스트를 문자열로 변환하기


문제 설명

문자들이 담겨있는 배열 arr가 주어집니다. 

arr의 원소들을 순서대로 이어 붙인 문자열을 return 하는 solution함수를 작성해 주세요.

 

 

입출력 예

arr result
["a", "b", "c"] "abc"

 

입출력 예 설명

그냥 딱봐도! 배열 합쳐서 문자열 하나로 만들어라~입니다

 

 

저의 풀이!

function solution(arr) {
    return [...arr].join('');
}

console.log(solution(['a', 'b', 'c']));

 

메모

전에 했던 join이라는 메서드를 사용해서 풀어냈습니다.

그리고 전개연산자까쥐

 

 

 

 

 

문제 9.  대문자로 바꾸기


문제 설명

알파벳으로 이루어진 문자열 myString이 주어집니다. 

모든 알파벳을 대문자로 변환하여 return 하는 solution 함수를 완성해 주세요.

 

 

입출력 예

myString result
"aBcDeFg" "ABCDEFG"
"AAA" "AAA"

 

입출력 예 설명

그냥 딱봐도! 문자열 준거에서 소문자있으면 전부다 대문자로 바꿔라입니다요

 

저의 풀이!

 
function solution(myString) {
    return myString.toUpperCase();
}

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

 

메모

알파벳 대문자로 바꾸는거 toUpperCase() 메서드를 사용하면 됩니다!

소문자로 바꾸려면 toLowerCase() 메서드를 사용하면 됩니다!

 

 

 

 

문제 10.  정수 부분


문제 설명

실수 flo가 매개 변수로 주어질 때, 

flo의 정수 부분을 return하도록 solution 함수를 완성해주세요.

 

입출력 예

flo result
1.42 1
69.32 69

 

입출력 예 설명

1.42의 정수 부분은 1입니다.
입출력 예 #2

69.32의 정수 부분은 69입니다.

 

저의 풀이!

function solution(flo) {
    return parseInt(flo);
}
console.log(solution(1.42));

메모

parseInt (소수점 버리고 실수를 정수로 변환)
Math.round() ( 반올림해주는 메소드)
roundXL(숫자, 자릿수) (지정한 소수점 이하에서 반올림을 한다.)

 

 

 

 

 

문제 11.  flag에 따라 다른 값 반환하기


문제 설명

두 정수 a, b와 boolean 변수 flag가 매개변수로 주어질 때,

flag가 true면 a + b를 false면 a - b를 return 하는 solution 함수를 작성해 주세요.

 

입출력 예

a b flag result
-4 7 true 3
-4 7 false -11

 

입출력 예 설명

예제 1번에서 flag가 true이므로 a + b = (-4) + 7 = 3을 return 합니다.

예제 2번에서 flag가 false이므로 a - b = (-4) - 7 = -11을 return 합니다.

 

저의 풀이!

function solution(a, b, falg) {
    return falg ? a + b : a - b;
}
console.log(solution(-4, 7, true));

 

메모

조건에 === true 를 굳이 하지않아도 인정됨

 

 

 

 

 

문제 12.  문자열 곱하기


문제 설명

문자열 my_string과 정수 k가 주어질 때, 

my_string을 k번 반복한 문자열을 return 하는 solution 함수를 작성해 주세요.

 

 

입출력 

my_string k result
"string" 3 "stringstringstring"
"love" 10 "lovelovelovelovelovelovelovelovelovelove"

입출력 예 설명

예제 1번의 my_string은 "string"이고 이를 3번 반복한 문자열은 "stringstringstring"이므로 이를 return 합니다.

예제 2번의 my_string은 "love"이고 이를 10번 반복한 문자열은 "lovelovelovelovelovelovelovelovelovelove"이므로 이를 return 합니다.

 

저의 풀이!

function solution(my_string, k) {
return my_string.repeat(k);
}
console.log(solution('string', 4));

 

메모

array.repeat(숫자) 메서드를 사용햇슴당.

 

=> repeat() 메서드는 문자열을 주어진 횟수만큼 반복해 붙인 새로운 문자열을 반환해줍니당.

 

 

 

 

 

 

 

문제 13.  공백으로 구분하기


문제 설명

단어가 공백 한 개로 구분되어 있는 문자열 my_string이 매개변수로 주어질 때,

my_string에 나온 단어를 앞에서부터 순서대로 담은 문자열 배열을 return 하는 solution 함수를 작성해 주세요.

 

 

입출력 예

myString result
"i love you" ["i", "love", "you"]
"programmers" ["programmers"]

 

입출력 예 설명

예제 1번의 my_string은 "i love you"로 공백 한 칸으로 나누어진 단어들은 앞에서부터 순서대로 "i", "love", "you" 이므로 ["i", "love", "you"]를 return 합니다.

예제 2번의 my_string은 "programmers"로 단어가 하나만 있습니다. 따라서 ["programmers"]를 return 합니다.

 

저의 풀이!

function solution(my_string) {
return my_string.split(' ');
}

console.log(solution('i love you'));

 

메모

여기서 보면 split을 사용해서 풀었습니다!

어떤걸로 나눠서 쪼개줄가!? 하는 거에 ' ' 빈문자열이아닌 띄어쓰기를 넣었습니다. (공백한개~)

그래서 

출력된 것은 "i", "love", "you"  로 잘 찍혔어요~

 

 

 

 

 

문제 14.  문자열 정수의 합


문제 설명

한 자리 정수로 이루어진 문자열 num_str이 주어질 때, 

각 자리수의 합을 return하도록 solution 함수를 완성해주세요.

 

입출력 예

num_str result
"123456789" 45
"1000000" 1

 

입출력 예 설명

문자열 안의 모든 숫자를 더하면 45가 됩니다.

문자열 안의 모든 숫자를 더하면 1이 됩니다.

 

저의 풀이!

 
function solution(num_str) {
    let sum = 0;
    let answer = num_str.split('');

    for (let i = 0; i < answer.length; i++) {
        sum += Number(answer[i]);
    }
    return sum;
}

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

이것도 맞는 풀이 이긴한데, 다른방법이 있지않을까해서 찾아봤습니다.

1)

function solution1(num_str1) {
let sum = 0;

num_str1.split('').forEach(num => {
sum += Number(num);
});
return sum;
}

2)

function solution2(num_str2) {
    return [...num_str2].reduce((acc, cur) => acc + Number(cur), 0);
}

전개연산자 자체가 객체, 배열을 하나하나 넘기는 용도로 쓰는걸로만 알았는데,

문자열에 사용할 경우 하나하나 나눠서 배열로 담아주기도 한다고 합니다...!!

 

 

 

메모

forEach 메서드도 공부해보면 좋을것 같다!

=> for문과 다른점 : 매개 변수와 함께 배열의 각 요소에 적용하게 될 콜백함수를 전달합니다.

Current Value(명명된 매개변수) - 처리할 현재 요소

Index(선택적 매개변수) - 처리할 현재 요소의 인덱스

Array(선택적 매개변수) - forEach 메서드를 호출한 배열 

 

우선 forEach 메서드를 사용해 배열을 순회하려면 콜백 함수 또는 익명 함수가 필요합니다.

numbers.forEach(function(number) {
    console.log(number);
});

콜백 함수는 각요소에 대해 실행되며, 배열의 요소를 나타내는 매개변수를 반드시 하나 이상 사용해야 합니다.

물론 화살표 함수로도 사용할 수 있습니다.

numbers.forEach(number => console.log(number));

 

 

기본값을 보면 편할것같당.

    arr.forEach(callback(currentvalue[, index[, array]]))

arr =>  forEach를 호출한 배열

callback => 각요소에 대해 실행할 함수

current Value => 처리할 현재 요소

index => 현재 처리할 요소의 인덱스

 

 

 

 

그리고 전개연산자 한번만 더 찾아보자

=>  함수 호출시, 배열 리터럴과 문자열, 객체리터럴에서 사용할 수 있다!!

(배열만 가능한줄알았다 ㅎㅎ)

 

 

 

문제 15.  주사위 게임 1


문제 설명

1부터 6까지 숫자가 적힌 주사위가 두 개 있습니다. 

두 주사위를 굴렸을 때 나온 숫자를 각각 a, b라고 했을 때 얻는 점수는 다음과 같습니다.

a와 b가 모두 홀수라면 a2 + b2 점을 얻습니다.
a와 b 중 하나만 홀수라면 2 × (a + b) 점을 얻습니다.
a와 b 모두 홀수가 아니라면 |a - b| 점을 얻습니다.(무조건양수)
두 정수 a와 b가 매개변수로 주어질 때, 얻는 점수를 return 하는 solution 함수를 작성해 주세요.

 

 

입출력 예

a b result
3 5 34
6 1 14
2 4 2

 

 

입출력 예 설명

예제 1번에서 두 주사위 숫자가 모두 홀수이므로 32 + 52 = 9 + 25 = 34점을 얻습니다. 따라서 34를 return 합니다.

예제 2번에서 두 주사위 숫자 중 하나만 홀수이므로 2 × (6 + 1) = 2 × 7 = 14점을 얻습니다. 따라서 14를 return 합니다.

예제 3번에서 두 주사위 숫자가 모두 홀수가 아니므로 |2 - 4| = |-2| = 2점을 얻습니다. 따라서 2를 return 합니다.

 

 

저의 풀이!

function solution(a, b) {
    if (a % 2 === 1 && b % 2 === 1) {
        return a ** 2 + b ** 2;
    } else if (a % 2 === 1 || b % 2 === 1) {
        return 2 * (a + b);
    } else if (a % 2 === 0 && b % 2 === 0) {
        return Math.abs(a - b);
    }
}

console.log(solution(2, 4));

 

메모

일단 저는 if문으로 해결했습니다.

그리고 양수에 대한 부분은 Math.abs() 메서드를 사용했습니다!

이부분도 공부해서 수정해 올리도록 하겠습니다~

=> Math 메서드는 알아두면 사실 쓰기 유용할 때가 종종 있다.

 

1. Math.min(x, y, z ...)
     => 가장 작은값 반환

 

2. Math.max(x, y, z ...) 
     => 가장 큰값 반환

 

3. Math.random()

0보다 크거나 같고 1보다 작은 무작위 숫자 반환
     => Math.round(x) 소수점 첫 번째 자리에서 반올림 후 반환


4. Math.floor(x)

     => 인수와 같거나 작은 수 중에서 가장 큰 정수 반환


5. Math.ceil(x)

     => 인수와 같거나 큰 수 중에서 가장 작은 정수 반환


6. Math.abs(x)

     => x의 절댓값 반환


7. Math.sqrt(x)

     => x의 제곱근 반환


8. Math.cbrt(x)

     => x의 세제곱근 반환


9. Math.exp(x)

     => e의 x제곱근 값을 반환


10. Math.log(x)

     => x의 자연로그 값을 반환.(ln x)


11. Math.log2(x)

     => x의 2를 밑으로 가지는 로그 값을 반환

 


12. Math.pow(x,y)

     => x의 y제곱을 반환


13. Math.sign(x)

     => x의 부호 값을 반환

 

 

 

 

 

문제 16.  대문자로 바꾸기


문제 설명

알파벳으로 이루어진 문자열 myString이 주어집니다. 

모든 알파벳을 대문자로 변환하여 return 하는 solution 함수를 완성해 주세요.

 

 

입출력 예

myString result
"aBcDeFg" "ABCDEFG"
"AAA" "AAA"

 

입출력 예 설명

그냥 딱봐도! 문자열 준거에서 소문자있으면 전부다 대문자로 바꿔라입니다요

 

저의 풀이!

function solution(myString) {
    return myString.toUpperCase();
}

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

 

메모

알파벳 대문자로 바꾸는거 toUpperCase() 메서드를 사용하면 됩니다!

소문자로 바꾸려면 toLowerCase() 메서드를 사용하면 됩니다!

 

 

 

 

 

 

문제 17.  대문자로 바꾸기


문제 설명

알파벳으로 이루어진 문자열 myString이 주어집니다. 

모든 알파벳을 대문자로 변환하여 return 하는 solution 함수를 완성해 주세요.

 

 

입출력 예

myString result
"aBcDeFg" "ABCDEFG"
"AAA" "AAA"

 

입출력 예 설명

그냥 딱봐도! 문자열 준거에서 소문자있으면 전부다 대문자로 바꿔라입니다요

 

저의 풀이!

function solution(myString) {
    return myString.toUpperCase();
}

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

 

메모

알파벳 대문자로 바꾸는거 toUpperCase() 메서드를 사용하면 됩니다!

소문자로 바꾸려면 toLowerCase() 메서드를 사용하면 됩니다!

 

 

 

 

 

 

문제 18.  대문자로 바꾸기


문제 설명

알파벳으로 이루어진 문자열 myString이 주어집니다. 

모든 알파벳을 대문자로 변환하여 return 하는 solution 함수를 완성해 주세요.

 

 

입출력 예

myString result
"aBcDeFg" "ABCDEFG"
"AAA" "AAA"

 

입출력 예 설명

그냥 딱봐도! 문자열 준거에서 소문자있으면 전부다 대문자로 바꿔라입니다요

 

저의 풀이!

function solution(myString) {
    return myString.toUpperCase();
}

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

 

메모

알파벳 대문자로 바꾸는거 toUpperCase() 메서드를 사용하면 됩니다!

소문자로 바꾸려면 toLowerCase() 메서드를 사용하면 됩니다!

 

 

 

 

 

 

문제 19.  대문자로 바꾸기


문제 설명

알파벳으로 이루어진 문자열 myString이 주어집니다. 

모든 알파벳을 대문자로 변환하여 return 하는 solution 함수를 완성해 주세요.

 

 

입출력 예

myString result
"aBcDeFg" "ABCDEFG"
"AAA" "AAA"

 

입출력 예 설명

그냥 딱봐도! 문자열 준거에서 소문자있으면 전부다 대문자로 바꿔라입니다요

 

저의 풀이!

function solution(myString) {
    return myString.toUpperCase();
}

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

 

메모

알파벳 대문자로 바꾸는거 toUpperCase() 메서드를 사용하면 됩니다!

소문자로 바꾸려면 toLowerCase() 메서드를 사용하면 됩니다!

 

 

 

 

Comments