Front-End

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

알고리즘

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

jeongsso 2023. 8. 12. 01:03

회사일이 요즘 많아져서 
일찍 빨리빨리 못올리고 있습니다.

그래도! 꾸준히~ 최대한 하고있습니다요

 

아쉽게 3분지나서 ...연달아 올린게 아니게 되버렸......다....ㅜㅜ

 

문제 23.  더 크게 합치기


문제 설명

연산 ⊕는 두 정수에 대한 연산으로 두 정수를 붙여서 쓴 값을 반환합니다. 예를 들면 다음과 같습니다.

12 ⊕ 3 = 123
3 ⊕ 12 = 312
양의 정수 a와 b가 주어졌을 때, a ⊕ b와 b ⊕ a 중 더 큰 값을 return 하는 solution 함수를 완성해 주세요.

단, a ⊕ b와 b ⊕ a가 같다면 a ⊕ b를 return 합니다.

 

 

입출력 예

a b result
9 91 991
89 8 898

 

 

입출력 예 설명

a ⊕ b = 991 이고, b ⊕ a = 919 입니다. 둘 중 더 큰 값은 991 이므로 991을 return 합니다.

a ⊕ b = 898 이고, b ⊕ a = 889 입니다. 둘 중 더 큰 값은 898 이므로 898을 return 합니다.

 

저의 풀이!

function solution(a, b) {
    return String(a) + String(b) >= String(b) + String(a)
    ? Number(String(a) + String(b))
    : Number(String(b) + String(a));
}

console.log(9 + 91);
console.log(solution(89, 8));

 

메모

 와 우
 toString 을 쓰려면 변수에 담거나 arry 거나 boolean 이면 바로 담기는데,
 그냥 숫자를 넣으려면 앞에도 괄호에 담아야한다.
 (5).toString()  처럼;;
 String() 은 괄호안에 그냥 변경하고 싶은 값을 매개변수로 넣어주면된다 ....

 

그리고 나의 선생님 왈 

' 숫자 연산 문제가 나오면 Math메서드를 한번 먼저 생각 해 보는것도 좋습니다! ' 

그래서 공부하고 Math로 풀어보겠습니다요.

 

=> 일단 문제를 생각해보자

1번의 식과 2번의 식 중에 더큰값을 리턴하고, 만약 그 둘이 같다면 1번을 내보내라~ 였습니다.

그러면 일단 조건 1( 1번식과 2번식 중에  더 큰값을 리턴)

                  조건 2 ( 둘이 같다면 그냥 뭐 아무거나 내보내도 노상관 /// 왜냐면 어차피 둘이 같으니까!!! ) 이죠?

function solution1(a, b) {
    return Math.max(Number(String(a) + String(b)), Number(String(b) + String(a)));
}

 

자 어떻습니까 더 간결하고, 이해하기 더 편해지지 않았습니까요???

 

 

 

 

문제 24.  두 수의 연산값 비교하기


문제 설명

연산 ⊕는 두 정수에 대한 연산으로 두 정수를 붙여서 쓴 값을 반환합니다. 예를 들면 다음과 같습니다.

12 ⊕ 3 = 123
3 ⊕ 12 = 312
양의 정수 a와 b가 주어졌을 때, a ⊕ b와 2 * a * b 중 더 큰 값을 return하는 solution 함수를 완성해 주세요.

단, a ⊕ b와 2 * a * b가 같으면 a ⊕ b를 return 합니다.

입출력 예

a b result
2 91 364
91 2 912

 

입출력 예 설명

a ⊕ b = 291 이고, 2 * a * b = 364 입니다. 둘 중 더 큰 값은 364 이므로 364를 return 합니다.
입출력 예 #2

a ⊕ b = 912 이고, 2 * a * b = 364 입니다. 둘 중 더 큰 값은 912 이므로 912를 return 합니다.

 

 

저의 풀이!

function solution(a, b) {
    let 문자합치기 = `${a}${b}`;
    let 곱하기 = 2 * a * b;

    return Math.max(+문자합치기, 곱하기);
}

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

 

메모

위의 문제와 비슷합니다.

하지만 이번에는 보기좀 편하게 변수에 연산을 담아서 진행했습니다. 훨씬 깔끔하죠!?

 

 

 

 

문제 25.  홀짝에 따라 다른 값 반환하기


문제 설명

양의 정수 n이 매개변수로 주어질 때, 

n이 홀수라면 n 이하의 홀수인 모든 양의 정수의 합을 return 하고 

n이 짝수라면 n 이하의 짝수인 모든 양의 정수의 제곱의 합을 return 하는 solution 함수를 작성해 주세요.

입출력 예

n result
7 16
10 220

 

입출력 예 설명

예제 1번의 n은 7로 홀수입니다. 7 이하의 모든 양의 홀수는 1, 3, 5, 7이고 이들의 합인 1 + 3 + 5 + 7 = 16을 return 합니다.

예제 2번의 n은 10으로 짝수입니다. 10 이하의 모든 양의 짝수는 2, 4, 6, 8, 10이고 이들의 제곱의 합인 22 + 42 + 62 + 82 + 102 = 4 + 16 + 36 + 64 + 100 = 220을 return 합니다.

 

 

저의 풀이!

function solution1(n) {
    if (n % 2 === 0) {
        for (let i = n; i > 0; i--) {
            if (i % 2 === 0) return (i += i) ** 2;
        }
    } else {
        for (let i = n; i > 0; i--) {
            if (i % 2 === 1) return (i += i);
        }
    }
}

console.log(solution1(7));

 

 

메모

일단 제 첫 풀이를 보면 굉장히 번잡스럽습니다.

조건을 넣은게 종 3번이나 반복되서 사용되었습니다. 

그리고 굳이 for문을 안에 두면서 2번이나 반복할 필요가 없다는걸 선생님께서 조언을 해주셨습니다.

 

개선된 풀이 

=>

function solution2(n) {
    let 짝수그릇 = 0;
    let 홀수그릇 = 0;

    for (let i = n; i > 0; i--) {
        if (i % 2 === 0) {
            짝수그릇 += Math.pow(i, 2);
        } else {
            홀수그릇 += i;
        }
    }
    return n % 2 === 0 ? 짝수그릇 : 홀수그릇;
}

console.log(solution2(10));

 

어떠신가용 ? 훨씬 깔끔해보이죠 ?

어떤 점이 달라졌냐면,

for문을 제일 밖에 두고 (왜냐하면 반복해서 증감하며 숫자를 보면서 짝수인지 아닌지 어차피 따지게 된다)

안에 조건으로 인해 풀이되도록 했습니다. 

그리고 마지막에 return 값으로 짝수면~? 짝수그릇 아니면 홀수! 라는 삼항을 사용했습니다.

 

Math.pow 메서드는 제곱근 메서드니 한번 사용해봐도됩니다!
아니면 뭐 i ** 2 이렇게 진행해도 괜찮습니다  ㅎㅎ

 

Comments