Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

事の発端

エンジニアとしてやはり力をつけるには自発的な勉強が必要と考えて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);
    }
}

原因と今後

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

続く…

Spice-Man
客先常駐にやりがいを見いだせず暇を持て余していたワシ(26)は転職を決意する。 実質経歴が白紙同然の穴を埋めるため三十路手前で努力を始めたしがないエンジニア志望
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away