일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 좀비고루틴
- go panic
- git
- go
- air 환경변수
- 신입개발자
- go 맥 air 환경변수
- 2년차개발자
- gin middleware
- go channel
- go air 환경변수
- go clean architecture
- gin logger
- gopath 환경변수
- go 캐릭터
- go air
- go 맥 air
- go디자인패턴
- 고루틴 채널
- clean architecture middleware
- go 대기그룹
- gin recovery
- 개발자
- go 맥
- golang gopher
- go recover
- 골랑 고퍼
- go middleware
- go 마스코트
- go 환경변수
- Today
- Total
뽀미의 개발노트
백준 2869 달팽이는 올라가고 싶다 본문
A : 올라가는 거리
B : 내려오는 거리
V : 막대기 총 길이
하루 : 밤 + 낮 (-B +A)
2 1 5
+2/(-1 +2)*3번 이렇게 되므로 4일 걸림
5 1 6
+5/(-1 +5)*1번 이렇게 되므로 2일 걸림
100 99 1000000000
+100/(-99 +100)*999999900번 이므로 999999901일 걸림
5 1 22
걸리는 날 수 = V-A를 A-B로 나눈 몫 + 1임
만약 저 몫이 자연수면 그대로 쓰고 소수점 나오면 올림 해줘야함!
몫이 자연수면 : 나머지가 0이다
아니면 : 나머지가 0이 아니다
- 자바의 Scanner와 System.out.println은 시간이 매우느리다!! 시간초과를 막기 위해서 BufferedReader와 BufferedWriter를 쓰는게 시간이 단축된다.
- BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
- 근데 BR은 입력한걸 문자열로밖에 못 받는다!!
- 그리고 public static void main(String[] args) throws IOException { 이렇게 main 함수 옆에 throws IOException을 해줘야된다!!
- 숫자를 받으려면 바꿔줘야되고, 그리고 한줄당 하나씩밖에 못 받아서 StringTokenizer로 잘라줘야한다.
- StringTokenizer st = new StringTokenizer(bf.readLine()); 이렇게 한 뒤
- int A = Integer.parseInt(st.nextToken());
- int B = Integer.parseInt(st.nextToken());
- int V = Integer.parseInt(st.nextToken());
- 이렇게 써줘야 한줄에 세개를 정수로 받을 수가 있다.
- BW 또한 문자열밖에 출력을 못해서 정수는 문자열로 바꾸고 출력해야한다.
- String str = Integer.toString(i);
- bw.write(str);
- bw.flush();
- bw.close();
- 콘솔창에 출력후 남아있는걸 다 날려주고(flush) 닫아주는(close) 과정이 필요하다.
- 그런데도 시간초과가 떴네....ㅠㅠ
- 버퍼를 쓰고 말고의 문제가 아니었음!! 반복문을 돌며 달팽이가 막대기를 올라갈때마다 i를 하나씩 올린다면 i가 엄청엄청 커질 수도 있어서 시간초과 뜬 거였음!!
- 그래서 V-A를 A-B로 나눈 몫에 +1한거 출력했더니 드디어 통과했음!!
- Scanner쓴게 코드는 짧지만 BufferedReader 쓴거보다 시간 훨씬 길게 나옴!!
- 저 몫이 자연수일때랑 아닐때 나눠서 풀었음
- 다른 사람들도 비슷하게 품!!
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
public class Main {
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 = new StringTokenizer(bf.readLine());
int A = Integer.parseInt(st.nextToken());
int B = Integer.parseInt(st.nextToken());
int V = Integer.parseInt(st.nextToken());
int distance_after_firstday = V-A;
int distance_per_day = A-B;
int days;
if(distance_after_firstday % distance_per_day == 0) {
days = distance_after_firstday / distance_per_day + 1;
}
else {
days = distance_after_firstday / distance_per_day + 2;
}
String str = Integer.toString(days);
bw.write(str);
bw.flush();
bw.close();
}
}
'Algorithm_Test' 카테고리의 다른 글
sw 1961. 숫자 배열 회전 (자바) (1) | 2023.08.11 |
---|---|
sw 1940. 가랏! RC카! (자바) (1) | 2023.08.06 |
sw 1989. 초심자의 회문검사 (자바) (0) | 2023.08.04 |
백준 10250 ACM 호텔 (3) | 2023.03.15 |
백준 2292 벌집 (1) | 2023.03.15 |