프론트엔드 개발자의 기록 공간

[프로그래머스 JavaScript] 최소직사각형 본문

알고리즘_JS/프로그래머스_Level1

[프로그래머스 JavaScript] 최소직사각형

[리우] 2022. 4. 8. 22:19

🚩 최소직사각형 JS

 

📖 문제 설명 : 가로, 세로 길이가 적힌 명함들의 정보가 주어질 때, 최소한의 크기로 명함 지갑을 만들려고 할 때, 필요한 가로, 세로 크기를 구해라. 단 명함은 가로로 눕혀 가로 세로를 바꿀 수 있다.

 

💡 명함을 가로 세로 전환이 가능하므로(눕힐 수 있다) 명함 당 가로를 큰 쪽, 세로를 작을 쪽으로 돌린다.

 

function solution(sizes) {
  let answer = 1

  // 가로의 길이를 제일 긴 변으로 설정 후 회전
  for (let i = 0; i < sizes.length; i++) {
    if (sizes[i][0] < sizes[i][1]) {
      ;[sizes[i][0], sizes[i][1]] = [sizes[i][1], sizes[i][0]]
    }
  }

  // 가로의 최대값 * 세로의 최대값 = 최소 지갑
  let x = sizes.sort((a, b) => b[0] - a[0])[0][0]
  let y = sizes.sort((a, b) => b[1] - a[1])[0][1]
  answer = x * y
  return answer
}

👨‍💻 코드 설

1. 명함들을 순회하면서 가로를 큰 쪽으로 돌린다. 즉, 명함이 세로가 더 길고 가로가 더 짧으면 눕혀서 가로 세로를 반대로 바꾸어 가로를 큰 쪽으로, 세로를 작은 쪽으로 돌린다.

 

2. 1번을 수행하고 나면, 모든 명함이 큰 쪽이 가로, 작은 쪽이 세로가 되어있다.

그러면 최소한의 지갑을 만들기 위해서는 가로에서 제일 큰 값, 세로에서 제일 큰 값의 지갑을 만들어야 한다.

 

3. 정렬을 통해 원하는 부분을 추출하고 return 한다.

 

잘못된 설명, 코드, 예외 케이스가 있다면 댓글 남겨주시면 수정하겠습니다.

728x90
Comments