JAVA독과 함께!

이종혁·2020년 6월 13일
0

알고리즘

목록 보기
2/4

arr는 징검다리이고, 각 돌의 내구도이다.
dogs 중에서 무사히 돌다리를 건널 수 있는 dogs들만 반환한다.
징검다리 돌 내구도는 dogs이 지나갈때마다 내구도가 줄어들고,
dogs의 몸무게가 돌의 내구도보다 더 높으면 dogs는 가라 앉는다.
점프력은 dogs이 매번 이동할 수 있는 거리이다.

let arr = [5, 3, 4, 1, 3, 8, 3]
let dogs = [{
    "이름" : "루비독",
    "나이" : "95년생",
    "점프력" : "3",
    "몸무게" : "4",
    },{
    "이름" : "피치독",
    "나이" : "95년생",
    "점프력" : "3",
    "몸무게" : "3",
    },{
    "이름" : "씨-독",
    "나이" : "72년생",
    "점프력" : "2",
    "몸무게" : "1",
    },{
    "이름" : "코볼독",
    "나이" : "59년생",
    "점프력" : "1",
    "몸무게" : "1",
    },
]
function Crossing(arr, dogs) {
    let result = [];
    for(let eachDogs of dogs) {
        let position = 0;
        let fail = false;
        while(position < arr.length - 1) {                    
        position += parseInt(eachDogs['점프력'], 10);
        arr[position - 1] -= parseInt(eachDogs['몸무게'], 10);
        if(arr[position - 1] < 0) {
            fail = true;
            break;
	        }
        }
        if(!fail) {
            result.push(eachDogs['이름']);
        }
    }
    return result;
}
while(position < arr.length - 1)

: dogs의 position이 arr의 길이보다 크면 다리를 건넜다는 의미이다.
다리를 건너는 동안 dogs의 arr에서의 위치를 '점프력'을 이용해서 위치를 누적하고,
해당 위치에서 '돌의 내구도' - '몸무게'를 구한뒤에 dogs가 건널지 말지 결정한다.

position += parseInt(eachDogs['점프력'], 10);

: dogs의 위치

arr[position - 1] -= parseInt(eachDogs['몸무게'], 10);

: 돌 내구도 - dogs의 몸무게

if(arr[position - 1] < 0) 

: 돌의 내구도가 0보다 작으면, 돌이 없어진 것.

if(!fail) 

: 무사히 돌다리를 건넌 dogs들의 이름을 return.

출처 : https://www.inflearn.com/course/코딩-테스트-전날

profile
Junior Developer

0개의 댓글