事の発端
エンジニアとしてやはり力をつけるには自発的な勉強が必要と考えて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);
}
}
原因と今後
はっきり言ってしまえば、単調なループ処理のせいで実行時間が長くなっているのだろう。
今まで、ただ動けばよいと良いと思っていましたがあまり処理に負荷がかからないスマートなコードをかけるように努力しようと思います。
続く…