-
[백준/BOJ] 2869번 : 달팽이는 올라가고 싶다 (JAVA / 자바)백준 2022. 3. 1. 16:48
안녕하세요~ 코딩하는 코알못 코메인입니다.
https://www.acmicpc.net/problem/2869
- 문제 -
난이도 브론즈 1 문제이다.
자바에서 입력방식은 scanner와 bufferedreader가 있다.
자바를 초반에 접하면 처음에 배우는 입력은 scanner이다. scanner가 bufferedreader보다 편하지만 속도가 느리다.
bufferedreader는 무조건 문자열로 받아오기때문에 정수형이나 실수형 변수에 저장하기 위해서는 입력과 형변환을 해줘야한다.
더 자세한 내용은 아래 글 참고 하면 좋다.
풀이 방법
시간제한을 보면 0.15초다.
문제를 처음보면 당연히 생각하는건 반복문을 통해 올라가고 내려가고 반복해서 원하는 높이에 도달했을때의 횟수를 출력하는 것이다. 하지만 시간제한이 대놓고 반복문을 쓰지 말라고 말을한다.
그렇기때문에 우리는 패턴을 찾아야한다.
달팽이는 V까지 올라가야한다. A만큼 올라가고 B 만큼 내려오는데 V에 도달했으면 내려오지 않는다고 한다. 마지막에 A의 일부분 또는 A만큼 올라간 뒤엔 B만큼 안내려 온다는 것이다. 하지만 마지막에 1~A중 몇만큼 올라갔는지 모른다. 그렇기 때문에 V - B를 해주고, 하루동안 올라가는 높이(A -B)를 나눠준다.
이해가 잘 안된다면, 5 2 12와 5 2 13을 각자 위 상황대로 계산을 해보면 알 것이다.
나눠서 떨어지면 그대로 출력하고, 나눠서 떨어지지 않는다면 +1을 하고 출력하자.
-풀이-
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine()); int A = Integer.parseInt(st.nextToken()); int B = Integer.parseInt(st.nextToken()); int V = Integer.parseInt(st.nextToken()); int high = (V - B) / (A - B); if((V - B) % (A - B) != 0) high++; System.out.println(high); } }
-결과-
아직 코딩 공부가 부족한 필자라 설명과 풀이 방법이 많이 미흡할 수 있다. 코딩 고수분들은 보시고 문제점이 있다면 댓글로 말해주시면 감사한 마음으로 참고 수정 하겠습니다.
'백준' 카테고리의 다른 글
[백준/BOJ] 7568번 : 덩치 (JAVA / 자바) (0) 2022.03.01 [백준/BOJ] 4949번 : 균형잡힌 세상 (JAVA / 자바) (0) 2022.03.01 [백준/BOJ] 2839번 : 설탕 배달 (JAVA / 자바) (0) 2022.03.01 [백준/BOJ] 2805번 : 나무 자르기 (JAVA / 자바) (0) 2022.03.01 [백준/BOJ] 2798번 : 블랙잭 (JAVA / 자바) (0) 2022.03.01