기본적인 문제는 문제풀이 없이 Solution만 작성되어 있습니다.
Title
Description
Santa's elves are boxing presents, and they need your help! Write a function that takes two sequences of dimensions of the present and the box, respectively, and returns a Boolean based on whether or not the present will fit in the box provided. The box's walls are one unit thick, so be sure to take that in to account.
[ Example Output ]
- Examples : Present and box respectively
[10, 7, 16] , [13, 32, 10] --> true, box is bigger than present
[5, 7, 9] , [9, 5, 7] --> false, present and box are same size
[17, 22, 10] , [5, 5, 10]) --> false, box is too small
How Can I Solved
문제 요구사항 정의
선물상자에 선물이 담길 수 있는지 구하여라.
문제 접근
// => 결과값 : 선물상자에 선물을 넣을 수 있는지를 판단하여 True 또는 False 로 반환
// => 조건 1 . 상자는 두께가 1이다.
// => 상자 크기 : [13, 32, 10]
// => 담을수 있는 선물 크기 : [12, 31, 9]
문제 풀이
1. function 의 인자를 확인했다.
function 의 첫번째 인자는 present 로 선물 크기 , function 의 두번째 인자는 box 로 상자 크기
function WillFit ( present , box ){
. . .
}
2. function 의 인자로 받은 값을 오름차순 ( ASC ) 으로 정렬해주었다.
예제로 주어진 Data 를 통해서 Data 가 정렬된 값이 아닌 뒤죽박죽 섞인 값으로 넘어온다는 것을 확인했기 때문이며,
정렬을 해줌으로써 보다 쉬운 방법으로 문제를 풀어나갔다.
- 배열에 담긴 문자를 정렬할때 : sort( )
- 배열에 담긴 숫자를 정렬할때 ( ASC ) : sort( ( a, b ) => a - b )
- 배열에 담긴 숫자를 정렬할때 ( DESC ) : sort( ( a, b ) => b - a )
function WillFit ( present , box ){
let presentSize = present.sort((a,b)=> a-b)
let boxSize= box.sort((a,b)=> a-b)
. . .
}
2 - 2. 하지만, 한가지 주의해야 할것이 있다.
문제에는 아래와 같은 문구가 적혀있는데, 이 문구에서는 상자가 1 의 두께를 가지고 있다고 적혀있다.
The box's walls are one unit thick, so be sure to take that in to account.
( 상자의 벽은 두께가 1 단위이므로 반드시 고려해야합니다. )
만약 box 배열에 담긴 숫자들의 값에 각각 -1 을 해주지 않는다면,
TestCase 는 통과해도 Attempt 에서 막히는 상황이 발생한다.
이 상황은 기존에 작성한 코드에 map() 메서드를 사용함으로써 간단하게 해결 할 수 있다.
function WillFit ( present , box ){
let presentSize = present.sort( ( a , b ) => a - b )
//let boxSize= box.sort( ( a , b ) => a - b ) // => 수정 전
let boxSize= box.map( v => v - 1 ).sort( ( a , b ) => a - b ) // => 수정 후
. . .
}
3. 이제 선물이 상자에 들어갈 수 있는지 확인하는 과정이 필요하다.
presentSize 배열의 요소들과 boxSize 배열의 요소들을 비교한다.
- boxSize 값이 presentSize 보다 큰 경우 true 를 반환한다. ( boxSize > presentSize )
- boxSize 값이 presentSize 보다 작은 경우 false 를 반환한다. ( presentSize > boxSize )
let result = presentSize.map((v,idx)=>{
return boxSize[idx] > v ? true : false
})
4. 최종적으로 이 선물이 상자에 들어갈 수 있는지 판단한다.
일련의 과정들을 통해 result 배열에는 Boolean 값의 요소들이 담겨져 있다.
- result 배열에 false 가 하나라도 있는 경우 false 를 반환한다.
- result 배열애 false 가 없는 경우 true 를 반환한다.
if(result.includes(false)){return false}
return true
Solution
function willFit(present, box){
console.log('nonSortPresent : ',present)
console.log('nonSortBox : ',box)
let presentSize = present.sort((a,b)=>a-b)
let boxSize = box.map(v=>v-1).sort((a,b)=>a-b)
// HaHa... You Must Be Consider that the box's walls are one unit thick
let result = presentSize.map((v,idx)=>{
return boxSize[idx] > v ? true : false
})
console.log('sortPresentSize : ',presentSize)
console.log('sortBoxSize : ',boxSize)
console.log(result)
if(result.includes(false)){ return false }
return true
}
글 읽어주셔서 감사합니다.
보다 유익한 컨텐츠를 제작할 수 있도록 노력하겠습니다.
- 작성자 이창훈 -
'알고리즘 > CodeWars' 카테고리의 다른 글
[CodeWars] javascript - 6kyu : Returning Strings (0) | 2020.08.10 |
---|---|
[CodeWars] javascript - 6kyu - Number Zoo Patrol 문제풀이 (0) | 2020.05.07 |
[CodeWars] javascript - 6kyu - Difference of 2 문제풀이 (0) | 2020.05.06 |
[CodeWars] javascript - 7kyu - Vowel Count 문제풀이 (0) | 2020.05.01 |
[CodeWars] javascript - 6kyu - Replace With Alphabet Position 문제풀이 (0) | 2020.04.29 |
댓글