LoginSignup
0
0

More than 5 years have passed since last update.

AtCoderでTLEと言われどうやって綺麗なコードを書くかという話

Posted at

事の発端

エンジニアとしてやはり力をつけるには自発的な勉強が必要と考えてAtCoderの過去問を解き始めることにした。
しかし、日本沈没という問題で以下のコードを提出した所、Time Limit Exceededで怒られてしまった。

JapanSinksTle.java

import java.io.*;
import  java.util.*;
import static java.lang.System.in;
class Main{
    public static void main(String[] args)throws IOException{
      Scanner sc = new Scanner(System.in);
      int field = sc.nextInt();
      int jRyouiki[] = new int[field];
      int high = 0;
      for(int i = 0; i < field; i++){
        jRyouiki[i] = sc.nextInt();
        if(high < jRyouiki[i]){
          high = jRyouiki[i];
        }
      }   
      int umi = 0;
      int island = 0;
      int islandcnt = 0;
      int maxIsland = 0;
      while(high > umi){
        for(int i = 0; i < field; i++){
          if(umi < jRyouiki[i]){
            island = i + 1;
             if(i == (field-1)){
              islandcnt++;
            }
          }else{
            if(island != 0 ){
              islandcnt++;
            }
            island = 0;
          }
        }
        if(islandcnt > maxIsland){
            maxIsland = islandcnt;
        }
        umi++;
        islandcnt = 0;
        island = 0;
      }
      System.out.println(maxIsland);
    }
}

原因と今後

はっきり言ってしまえば、単調なループ処理のせいで実行時間が長くなっているのだろう。
今まで、ただ動けばよいと良いと思っていましたがあまり処理に負荷がかからないスマートなコードをかけるように努力しようと思います。

続く…

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0