문제 설명
주어진 문제에 따르면 명함 지갑을 만드는 회사에서 지갑의 크기를 정하려고 하는데 다양한 모양의 크기의 명함들을 모두 수납할 수 있는 지갑을 만들기 위해 명함의 가로, 세로 크기를 값으로 가지고 있는 이차원 배열 size(int[][])에 대해 주어진 짝에 대해 가장 작은 직사각형을 만들 수 있는 경우에 수를 찾아 반환하는 문제이다.
더보기
※ 제한 사항으로는 size의 길이는 1 이상 10,000 이하 / 가로, 세로 크기는 1 이상 1,000 이하인 자연수여야 한다.
풀이
문제에서 주어진 변수 size(int[][])에는 가로, 세로 크기가 한 쌍으로 여러 개의 값이 담겨있다. 모든 명함이 들어가는 가장 작은 직사각형을 만들어야 하기 때문에 가로, 세로 크기를 합해서 최댓값을 찾은 다음 최댓값을 제외한 나머지 값 중에서 최댓값과 곱이 제일 작은 값을 찾아주면 된다. 단, 모든 명함이 들어가야 한다고 했으므로 최댓값의 나머지 한 쌍보다 값이 커야한다.
아래는 풀이에 사용한 코드이다.
function solution(sizes) {
let answer = 0;
let maxA = 0;
let maxB = 0;
// 최댓값을 찾아주는 부분
maxA = Math.max.apply(null,sizes.map((data)=>data[0]))
maxB = Math.max.apply(null,sizes.map((data)=>data[1]))
// 가로에서 최댓값을 찾았을 경우와, 세로에서 최댓값을 찾았을 경우를 각각 구현하였다.
maxA > maxB ?
// 가장 작은 직사각형을 만족하는 값을 찾는 부분
// 찾은 값을 answer에 저장한다.
sizes.map((data)=> {
data[0] > data[1] ?
answer < maxA * data[1] ? answer = maxA * data[1] : '' :
answer < maxA * data[0] ? answer = maxA * data[0] : ''
}) :
sizes.map((data)=> {
data[0] > data[1] ?
answer < maxB * data[1] ? answer = maxB * data[1] : '' :
answer < maxB * data[0] ? answer = maxB * data[0] : ''
})
// 찾은 값 반환
return answer;
}
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] Lv.02 연습문제 영어 끝말잇기 (JavaScript) (0) | 2024.04.18 |
---|---|
[프로그래머스] Lv.02 연습문제 하노이의 탑 (JavaScript) (0) | 2024.04.15 |
[프로그래머스] Lv01 연습문제 약수의 개수와 덧셈 (JavaScript) (0) | 2024.04.14 |
[프로그래머스] Lv.01 연습문제 과일 장수 (JavaScript) (0) | 2024.04.10 |
[프로그래머스] Lv.01 연습문제 바탕화면 정리 (JavaScript) (0) | 2024.04.08 |