본문 바로가기

② 심화/알고리즘

JAVA독과 함께!

728x90

문제

저기 징검다리가 보이지? 내 친구들이 징검다리를 건널거야! 하지만 징검다리는 버틸수 있는 내구도가 한계가 있지! 내 친구들의 몸무게, 돌의 내구도, 친구들의 점프력을 고려하여 내 친구 루비독, 피치피독, 씨-독, 코볼독이 각각 다리를 건널 수 있는지 알아봐줘! 친구들은 더 추가 될 수도, 덜 건널 수도 있어!

  1. 각 돌들이 얼마나 버틸수 있는지 배열로 주어집니다. (내구도 0까지는 독의 몸무게를 버틸 수 있습니다. 0미만이 되면 독은 살아남지 못합니다.)

  2. 각 독들의 개인정보가 JSON(JSON은 큰 따옴표로 묶여야 합니다. 가능하다면 json을 import하여 풀어보세요!)으로 주어집니다. 개인정보는 보호되지 않습니다.

  3. 각 돌에 독들이 착지할 때 돌의 내구도는 몸무게만큼 줄어듭니다. ex) [1,2,1,4] 각 돌마다 몸무게 1인 독 1마리 2마리 1마리 4마리의 착지를 버틸 수 있습니다.

  4. 독들의 점프력이 각자 다릅니다. ex) 점프력이 2라면 2칸씩 점프하여 착지합니다.

  5. 각 독들은 순서대로만 다리를 건넙니다.

입력
돌의내구도 = [1, 2, 1, 4]
독 = [{
    "이름" : "루비독",
    "나이" : "95년생",
    "점프력" : "3",
    "몸무게" : "4",
    },{
    "이름" : "피치독",
    "나이" : "95년생",
    "점프력" : "3",
    "몸무게" : "3",
    },{
    "이름" : "씨-독",
    "나이" : "72년생",
    "점프력" : "2",
    "몸무게" : "1",
    },{
    "이름" : "코볼독",
    "나이" : "59년생",
    "점프력" : "1",
    "몸무게" : "1",
    },
]

출력
생존자 : ['씨-독']

입력
돌의내구도 = [5, 3, 4, 1, 3, 8, 3]
독 = [{
    "이름" : "루비독",
    "나이" : "95년생",
    "점프력" : "3",
    "몸무게" : "4",
    },{
    "이름" : "피치독",
    "나이" : "95년생",
    "점프력" : "3",
    "몸무게" : "3",
    },{
    "이름" : "씨-독",
    "나이" : "72년생",
    "점프력" : "2",
    "몸무게" : "1",
    },{
    "이름" : "코볼독",
    "나이" : "59년생",
    "점프력" : "1",
    "몸무게" : "1",
    },
]

출력
생존자 : ['루비독', '씨-독']

 

문법

while문 : while문은 조건문이 참일 때 실행되는 반복문이다. 조건은 문장안이 실행되기 전에 참, 거짓을 판단한다.

var n = 0;
var x = 0;

while (n < 3) {
  n++;
  x += n;
}

break : 현재 반복문,switch문, 또는label문을 종료하고, 그 다음 문으로 프로그램 제어를 넘깁니다.

let i = 0;

while (i < 6) {
  if (i === 3) {
    break;
  }
  i = i + 1;
}

console.log(i);
// expected output: 3

continue : 문은 현재 또는 레이블이 지정된 루프의 현재 반복에서 명령문의 실행을 종료하고 반복문의 처음으로 돌아가여 루프문의 다음 코드를 실행합니다.

let text = '';

for (let i = 0; i < 10; i++) {
  if (i === 3) {
    continue;
  }
  text = text + i;
}

console.log(text);
// expected output: "012456789"

 

문제풀이

const 내구도 = [1, 2, 1, 4];
const 독 = [{
    "이름" : "루비독",
    "나이" : "95년생",
    "점프력" : "3",
    "몸무게" : "4",
    },{
    "이름" : "피치독",
    "나이" : "95년생",
    "점프력" : "3",
    "몸무게" : "3",
    },{
    "이름" : "씨-독",
    "나이" : "72년생",
    "점프력" : "2",
    "몸무게" : "1",
    },{
    "이름" : "코볼독",
    "나이" : "59년생",
    "점프력" : "1",
    "몸무게" : "1",
    },
];

function 징검다리를건너라(내구도, 독){
  let answer = [];
  for (let 개별독 of 독){
    let 독의위치 = 0;
    let 실패 = false;
    while(독의위치 < 내구도.length){
      독의위치 += parseInt(개별독['점프력'], 10);
      내구도[독의위치 - 1] -= parseInt(개별독['몸무게'], 10);
      if(내구도[독의위치 - 1] < 0){
        실패 = true;
        break
      }
    }
    if(!실패){
      answer.push(개별독['이름']);
    }
  }
  return answer
}

징검다리를건너라(내구도, 독);

 

728x90