HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
문제2 : JAVA독과 함께!
문제2 : JAVA독과 함께!
/
🔎
답안
🔎

답안

1. 문제 파악2. 풀이
 
  • for문 버전
 
  • while 무한루프
 

1. 문제 파악

  1. 독이 점프를 시작할 곳은 0부터이고, 독의 점프력이 2라면 두 번째 돌을 밟아야 합니다. 하지만 돌의 위치를 중심으로 봤을 땐 인덱스가 0부터 시작해야 하므로 두 번째 돌은 1번 인덱스의 돌에 해당합니다.
  1. 독들이 차례대로 다리를 건너야 하는데 돌에는 내구도가 있기 때문에 돌을 밟을 때마다 독의 몸무게만큼의 내구도를 감소시켜야 합니다.
  1. 어떤 돌의 내구도가 0보다 작아서 해당 돌을 밟을 수 없을 때에도 독의 점프력에 따라 그 돌을 밟지 않고도 다리를 건널 수 있기 때문에 이 조건 또한 확인해야 합니다.

2. 풀이

  1. 모든 독을 확인해 봐야 하기 때문에 독의 수만큼 반복문을 돌려서 확인합니다.
  1. 독의 위치는 독의 점프력만큼 더합니다.
    1.  
  1. 문제 설명에서 말씀 드렸던 것처럼 돌 배열의 인덱스를 유념하여 독의 위치 -1에 해당하는 돌의 내구도에서 독의 무게만큼 빼주어 돌의 내구도를 감소시킵니다.
    1.  
  1. 돌의 내구도가 0보다 작은지 확인하여 물에 빠지는 독을 flag 변수를 false로 갱신해 줍니다.
    1.  
  1. flag가 true이면 다리를 무사히 건넜다는 의미이기 때문에 answer에 추가합니다.
    1.  
import java.util.ArrayList; public class Q2 { public static void main(String[] args) { int 돌의내구도[] = {5, 3, 4, 1, 3, 8, 3}; 독[] 독배열 = { new 독("루비독", "95년생", 3, 4), new 독("피치독", "95년생", 3, 3), new 독("씨-독", "72년생", 2, 1), new 독("코볼독", "59년생", 1, 1) }; solution(돌의내구도, 독배열); } public static void solution(int[] 돌의내구도, 독[] 독배열) { ArrayList<String> answer = new ArrayList<String>(); for (독 i : 독배열) { int 독의위치 = 0; boolean flag = true; while (독의위치 < 돌의내구도.length) { 독의위치 += i.점프력; if (독의위치 > 돌의내구도.length) { break; } 돌의내구도[독의위치 - 1] -= i.몸무게; if (돌의내구도[독의위치 - 1] < 0) { flag = false; break; } } if (flag) { answer.add(i.이름); } } System.out.println(answer); } } class 독 { String 이름; String 나이; int 점프력; int 몸무게; public 독 (String 이름, String 나이, int 점프력, int 몸무게) { this.이름 = 이름; this.나이 = 나이; this.점프력 = 점프력; this.몸무게 = 몸무게; } }
import java.util.ArrayList; public class Q2 { public static void main(String[] args) { int 돌의내구도[] = {5, 3, 4, 1, 3, 8, 3}; 독[] 독배열 = { new 독("루비독", "95년생", 3, 4), new 독("피치독", "95년생", 3, 3), new 독("씨-독", "72년생", 2, 1), new 독("코볼독", "59년생", 1, 1) }; solution(돌의내구도, 독배열); } public static void solution(int[] 돌의내구도, 독[] 독배열) { ArrayList<String> answer = new ArrayList<String>(); for (독 i : 독배열) { int 독의위치 = 0; boolean flag = true; while (true) { 독의위치 += i.점프력; if (독의위치 > 돌의내구도.length) { break; } 돌의내구도[독의위치 - 1] -= i.몸무게; if (돌의내구도[독의위치 - 1] < 0) { flag = false; break; } } if (flag) { answer.add(i.이름); } } System.out.println(answer); } } class 독 { String 이름; String 나이; int 점프력; int 몸무게; public 독 (String 이름, String 나이, int 점프력, int 몸무게) { this.이름 = 이름; this.나이 = 나이; this.점프력 = 점프력; this.몸무게 = 몸무게; } }
독의위치 += i.점프력; if (독의위치 > 돌의내구도.length) { break; }
돌의내구도[독의위치 - 1] -= i.몸무게;
if (돌의내구도[독의위치 - 1] < 0) { flag = false; break; }
if (flag) { answer.add(i.이름); }