풀이방법
사용된 것:
BufferedReader
StringTokenizer
그리디 알고리즘
2022.01.13
각 장병은 (자신의 위치 좌표)+(자신의 사거리)만큼의 좌표까지 수류탄을 전달할 수 있다.
(위치 좌표)+(사거리)를 '전달 가능 좌표'라 하자.
욱제부터 차례차례 장병들의 전달 가능 좌표를 살핀다.
k번째 장병까지의 전달 가능 좌표의 최댓값보다 k+1번째 장병의 위치 좌표값이 크면 수류탄은 땅에 떨어진다.
k번째 장병까지의 전달 가능 좌표의 최댓값보다 k+1번째 장병의 위치 좌표값이 작으면 k+1번째 장병은 수류탄을 무사히 받을 수 있다.
이 과정을 반복하다가 한 번이라도 수류탄이 땅에 떨어지면 실패 문구를 출력하고 프로그램을 종료한다.
수류탄이 무사히 마지막 장병에게 전달되면 성공 문구를 출력한다.
코드
Java(2022.01.13)
import java.io.*;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
BufferedReader br = new BufferedReader (new InputStreamReader(System.in));
//장병의 수 읽어오기
int n = Integer.parseInt(br.readLine());
//n이 1이면 무조건 성공
if(n == 1) {
System.out.print("권병장님, 중대장님이 찾으십니다");
System.exit(0);
}
//장병 객체 배열
Soldier[] sols = new Soldier[n];
//좌표와 사거리 읽어와 쪼개기
StringTokenizer st1 = new StringTokenizer(br.readLine(), " ");
StringTokenizer st2 = new StringTokenizer(br.readLine(), " ");
//좌표와 사거리를 객체에 저장
for(int i = 0; i<n-1; i++) {
sols[i] = new Soldier(Integer.parseInt(st1.nextToken()),Integer.parseInt(st2.nextToken()));
}
//마지막 병사는 사거리가 0
sols[n-1] = new Soldier(Integer.parseInt(st1.nextToken()),0);
//현재 시점에서 수류탄이 전달될 수 있는 최대 좌표값
int max_len = 0;
for(int i = 0; i<n; i++) {
//수류탄이 땅에 떨어짐
if(max_len<sols[i].getPos()) {
System.out.print("엄마 나 전역 늦어질 것 같아");
System.exit(0);
}
//수류탄이 땅에 떨어지지 않음
if(max_len < sols[i].len()) {
max_len = sols[i].len();
}
}
System.out.print("권병장님, 중대장님이 찾으십니다");
}
}
class Soldier{
//위치
private int position;
//사거리
private int power;
//생성자
public Soldier(int position, int power) {
this.position = position;
this.power = power;
}
public int getPos() {
return position;
}
//해당 병사가 수류탄을 전달할 수 있는 최대 좌표를 리턴하는 함수
public int len() {
return position+power;
}
}
'알고리즘 문제풀이 > 백준' 카테고리의 다른 글
#6996 : 애너그램 (0) | 2022.01.21 |
---|---|
#4583 : 거울상 (0) | 2022.01.19 |
#15904 : UCPC는 무엇의 약자일까? (0) | 2022.01.19 |
#1026 : 보물 (0) | 2022.01.14 |
#11656 : 접미사 배열 (0) | 2022.01.14 |