白駿2884号:目覚まし時計(Java/Kotlin)


質問する
https://www.acmicpc.net/problem/2884

に道を教える
  • で入力された分が45未満の場合、時間-1、分60-(45-入力分)が計算されます.
  • に入力された分の数が45以上の場合、入力された分の数は-45です.
  • 詩が0より小さい場合は、詩を23に修正します.
  • BufferedReaderを入力して演算する方法があります.
  • Scannerを入力して演算する方法がある.
  • BufferedReaderとして入力して演算するコード
    Java
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.io.IOException;
    import java.util.StringTokenizer;
    
    public class Main{
        public static void main(String[] args) throws IOException {
            
    	BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            
    	String str = br.readLine();
    	StringTokenizer st = new StringTokenizer(str," ");
    	int H = Integer.parseInt(st.nextToken());
    	int M = Integer.parseInt(st.nextToken());
            
    	if(M < 45) {
    		H--;
    		M = 60 - (45 - M);
                 
    		if(H < 0) {
      			H = 23;
    		}
                 
    		System.out.println(H + " " + M);
    	}
    	else {
    		System.out.println(H + " " + (M - 45));
    	}
        }
    }
    Kotlin
    import java.io.BufferedReader
    import java.io.InputStreamReader
    import java.util.StringTokenizer
    
    fun main() = with(System.`in`.bufferedReader()){
        
        val str = readLine()
        val token = StringTokenizer(str," ")
        
        var H = token.nextToken().toInt()
        var M = token.nextToken().toInt()
        
        if (M<45){
            H--
            M = 60-(45-M)
            
            if(H < 0){
                H = 23
            }
            println("${H} ${M}")
            
        } else {
            println("${H} ${M-45}")
        } 
    }
    
    に答える
  • BufferedReaderで文字列を受信する方法で、readline()を表します.
  • readline()は1行をすべて読み込むため、入力した文字列をスペースで区切る必要があります.
  • オブジェクトを作成する場合は、StringTokenizer(文字列、区切り記号)クラスを使用して区切ります.
  • で区切られた変数を抽出する場合、nextToken()を使用して文字列を順次返します.
  • で返される文字列は、返されると同時にオブジェクトから消えます.
  • BufferedReaderとは何ですか?
  • 私たちはパソコンから文章を読むまで、バイトタイプにデータを転送して文字(Char)に変換するプロセスがあります.
  • 以降、それらの文字はまた再配列生成(文字列)され、私たちが読む文章(String)になります.
  • Scannerは、文字列を返すまで多くの正規表現をチェックする必要があるため、速度が遅い.
  • BufferedReaderは、バッファを介して入力された文字を積み重ね、文字列のように一度に送信するため、配列を生成することなくStringで受信でき、スキャナよりも高速です.
  • 整理する
    BufferedReaderはScannerのように配列を作成するのではなく、文字列を直接取得するので、より高速です.

    スキャンコード
    Java
    import java.util.Scanner;
    
    public class Main{
        public static void main(String[] args){
            Scanner sc = new Scanner(System.in);
            
            int H = sc.nextInt();
            int M = sc.nextInt();
            sc.close();
            
            if(M<45){
                H--;
                M= 60-(45-M);
                
                if(H<0){
                    H=23;
                }
                
                System.out.println(H + " " + M);   
            }
            else {
                System.out.println(H + " " + (M-45));
            }
              
        }
    }
    Kotlin
    import java.util.Scanner
    
    fun main() = with(Scanner(System.`in`)){
        var H = nextInt()
        var M = nextInt()
        
        if (M<45){
            H--
            M = 60-(45-M)
            
            if(H < 0){
                H = 23
            }
            println("${H} ${M}")
            
        } else {
            println("${H} ${M-45}")
        }
        
    }
    コメントとソース
    [伯俊]2884号:目覚まし時計-JAVA[Java]
    [伯俊]1000号:A+B-JAVA[Java]
    JAVA[Java]-入力[スキャナ、InputStream、BufferedReader]を開く