오늘 뭐했냐/기억하면 좋을 문제들

짝수 홀수 개수, 최댓값 만들기 (1) - 다르게 생각하기

스스로에게 2023. 5. 29. 21:58

1. 정수가 담긴 리스트 num_list가 주어질 때, num_list의 원소 중 짝수와 홀수의 개수를 담은 배열을 return 하도록 solution 함수를 완성해보세요.

 

function solution(num_list) {
    
    var answer = [];
    
    let a = num_list.filter( num => num % 2 === 0 ).length
    let b = num_list.filter( num => num % 2 !== 0 ).length
    
    answer.push (a)
    answer.push (b)
    
    return answer;
}

짝수와 홀수를 각각 담은 배열을 .filter()로 만들어 이것의 길이를 배열에 각각 담는 방식으로 했다 

물론 문제는 없었다 

 

function solution(num_list) {
    var answer = [0,0];

    for(let a of num_list){
        answer[a%2] += 1
    }

    return answer;
}

 이게 일부러 짝수를 앞에 담은 출제자의 의도와 맞는 것 같다

 

어려운 메소드나 코드를 줄이기 위해 가독성은 떨어지게 만든 것이 아니라

생각을 조금 바꿔서 이렇게 생각할 수 있구나 하는 것을 보며 참고할 수 있었다 

 

2. 문자열 배열 strlist가 매개변수로 주어집니다. strlist 각 원소의 길이를 담은 배열을 retrun하도록 solution 함수를 완성해주세요. 

function solution(numbers) {
    let answer = []
    for(let i = 0; i < numbers.length; i++){
        for(let j = i+1; j < numbers.length; j++){
            answer.push(numbers[i]*numbers[j])
        }
}
    return Math.max(...answer);
}

배열의 각 숫자들을 곱을 빈 배열에 담고 이 배열에서의 최댓값을 구했다 

 

이것도 생각을 조금 바꾸면은

function solution(numbers) {
    numbers.sort((a,b)=>b-a);
    return numbers[0]*numbers[1];
}

이렇게 내림차순으로 처리해서 가장 큰 값과 그 다음을 큰 값의 곱을 구하면 만들 수 있는 곱의 최댓값이 된다

 

내가 처리한 방식은 만약에 3개를 곱할 경우에 다시 for문이 하나 중첩되는데

위에 방식은 그 다음으로 큰 값을 곱하는 식으로 늘려가기 쉽다