알고리즘 문제풀이/백준

#15889 : 호 안에 수류탄이야!!

모항 2022. 1. 13. 22:28

 

풀이방법

사용된 것:

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