🌞Algorithm/🔥Baekjoon

[Baekjoon] 4679_The Snail

뿌야._. 2025. 5. 22. 15:40
문제(출처: https://www.acmicpc.net/problem/4679)

< The Snail >

 

문제 풀이 

 

U만큼 오르고, D만큼 내려간다. 하루가 지날수록 첫날 오를 수 있는 U x (F/100) 만큼씩 깎인다. while문을 사용하여 이 과정을 반복해 H보다 높이 오를 수 있는지, 오를 수 없는지 구한다.  

 

my solution (Java)

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
import java.io.OutputStreamWriter;

public class _4679_ { // The Snail

	public static void main(String[] args) throws IOException {
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		StringTokenizer st;

		int H, D, F;
		Double U;

		st = new StringTokenizer(bf.readLine());
		while ((H = Integer.parseInt(st.nextToken())) != 0) {
			U = Double.parseDouble(st.nextToken());
			D = Integer.parseInt(st.nextToken());
			F = Integer.parseInt(st.nextToken());

			double p = 0;
			int d = 0;
			double l = U * (double) F / 100;
			boolean flag = false;
			while (true) {
				d += 1;

				p += U;
				if (p > H) {
					break;
				}

				p -= D;
				if (p < 0) {
					flag = true;
					break;
				}

				U -= l;
				if (U < 0) {
					U = 0.0;
				}
			}
			if (flag) {
				bw.write("failure on day " + d + "\n");
			} else {
				bw.write("success on day " + d + "\n");
			}
			st = new StringTokenizer(bf.readLine());
		}
		bw.flush();
	}
}
변수)
H, U, D, F : 우물의 높이, 낮 동안 올라갈 수 있는 거리, 밤에 미끄러져 내려가는 거리, 피로 계수
p : 현재 위치
d : 성공한 날
l : 피로도에 인해 손실된 거리
flag : 성공 여부

 

 H값이 0이 아닐 때까지 H, U, D, F 값을 입력받는다. 피로도에 인해 손실된 거리를 구해두고 다음 과정을 반복한다.

 

1) d+1

2) U만큼 오르기

3) 오른 후에 H보다 커 우물에서 나왔다면 종료

4) D만큼 미끄러짐

5) 미끄러진 후에 0보다 작다면 실패한 것이므로 flag를 true로 저장 후 종료

6) 피로도에 의해 낮 동안 올라갈 수 있는 거리 감소

7) 낮 동안 올라갈 수 있는 거리가 0보다 작다면 올라가지 않으므로 0으로 저장

 

최종 실패, 성공에 따라 출력한다.



 

'🌞Algorithm > 🔥Baekjoon' 카테고리의 다른 글

[Baekjoon] 26876_New Time  (1) 2025.05.26
[Baekjoon] 10689_Hamza  (1) 2025.05.23
[Baekjoon] 16756_Pismo  (2) 2025.05.21
[Baekjoon] 6325_Definite Values  (1) 2025.05.19
[Baekjoon] 21030_Frequent Alphabet  (2) 2025.05.16