티스토리 뷰

반응형

처음 이 문제를 풀면서 다음과 같은 수식을 만들었습니다.

 

day++;

meter=0;

meter = meter +(A-B);

 

간단한 수식을 만들어 실행한때 정상적으로 문제의 답이 나왔으나 

 

문제 제출하면 "시간 초과"가 뜨더라고요.

import java.util.Scanner;

public class Main{
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		int A = sc.nextInt();
		int B = sc.nextInt();
		int V = sc.nextInt();
		int meter =0;
		int day =0;
		
		while(true) {
			day++;
			meter= meter+A;
			
			if(meter<V) {
				meter= meter-B;
			}else {
				break;
			}
			
		}
		System.out.println(day);
	}
	}

 

문제는 V의 값이 너무나도 커지면 반복문을 끝없이 반복하게되서 지정된 시간 제한을 넘어버리게 됩니다.

 

문제점을 보도록 하겠습니다.

 

1. 답은 day를 구하는 것이지 길이를 구하는 것은 나중이다.

즉  meter = meter +(A-B);  수식을 만들어 적용할 필요가 없다

 

meter 거리에 B 거리를 보완후 하루동안 이동한 거리(A-B)를 나누어 day를 구하는 방식을 적용했습니다.

최초 한번만 실행하기 때문에 과도한 반복시간은 배제가 가능!

 

그리고 if문을 적용하여 목적 거리에 도착을 못하면 day+1 을 입력하여 보정해준다.

 

2. 정수 입력 방식을 바꿔 보자 

정수를 입력하는 방법은

Integer.parseInt 방식

Scanner 방식

Tokenizer 방식

 

각 방식의 목적은 입력이지만 입력 버퍼와 시간의 차이가 있습니다.

 

저는 방식을 바꾸어 Tokenizer 방식과 Integer.parseInt 방식을 사용했습니다.

import java.io.*;
import java.util.*;


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 day =(V-B)/(A-B);
		
		
		if((V-B)%(A-B)!=0) {
			day++;
			
		}
		System.out.println(day);
	}
	}

 

시간초과 의 의미는 이해했으나 처음으로 코딩하면서 코딩과 시간관계의 문제를 해결하기 위해 고민해본 시간이었습니다. 

 

반응형
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/12   »
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
글 보관함