今年も台風の季節がやってきました。天気が悪いときはできれば、家から出たくないものです。あなたはそれでも会社に行かなければいけないかもしれません。しかし、あなたが勤めている会社は、あまりに天気が悪く会社に行くことができない場合、自宅待機するよう決められています。自宅から会社までの道で、降水量が一定値以上の箇所が一箇所でもある場合、その道は通れないとし、会社に行くことができません。しかし、自宅から会社に行くことのできる道は複数あるので、どれか一つでも通行できる道がある場合は、その道を使って会社にいかなければなりません。あなたには、複数の道と降水量の情報が以下のような地図として与えられます。自宅を上側、会社を下側におきます。自宅から会社の間を N × N マス目で区切り、各マスの地区には降水量を表す整数が書かれています。

あなたは複数ある列のどれか 1 つを選び、下に向かってまっすぐ進むことしかできません。途中で他の列に移動したり、戻ることはできません。

もし進んでいる道の途中で、降水量が一定値以上の箇所がある場合、その道は通ることができません。

あなたはどうしても会社に行きたくないので、会社に行くことができるルートを確認するプログラムを作成してください。

入力例 1 では降水量が 200 以上の場合通れないので、3 番目の道を通ることができてしまいます。

入力例 2 の場合は降水量が 100 以上の場合通れないので、全ての道が通ることができなく、あなたは会社にいかなくて良いです。

評価ポイント10回のテストケースで、正答率、実行速度、メモリ消費量をはかり得点が決まります。より早い解答時間で提出したほうが得点が高くなります。

  1. 複数のテストケースで正しい出力がされるか評価(+50点)
  2. 解答までの速さ評価(+50点)

入力される値入力は以下のフォーマットで与えられます。

N M p_{1,1} p_{1,2} ... p_{1,N} p_{2,1} p_{2,2} ... p_{2,N} ... p_{N,1} p_{N,2} ... p_{N,N} • ・1 行目にそれぞれ地図のサイズ、通ることのできない降水量を表す整数 N, M がこの順で半角スペース区切りで与えられます。 • ・続く N 行のうちの i 行目 (1 ≦ i ≦ N) には N 個の整数が半角スペース区切りで与えられます。i 行目の j 番目 (1 ≦ j ≦ N) の整数 p_{i, j} は i 行 j 列目の降水量を表します。 • ・入力は合計で N + 1 行となり、入力値最終行の末尾に改行が 1 つ入ります。それぞれの値は文字列で標準入力から渡されます。標準入力からの値取得方法はこちらをご確認ください

期待する出力会社に行くことができる場合は、すべての通ることのできるルートの番号を以下の形式で出力してください。

r_1 r_2 ...・期待する出力は 1 行からなります。・通ることのできるルートの番号を小さい順に r_1, r_2, ... として、半角スペース区切りで全て出力してください。・末尾に改行を入れ、余計な文字、空行を含んではいけません。自宅待機で良い場合は、

waitと、出力してください。

条件すべてのテストケースにおいて、以下の条件をみたします。 • ・1 ≦ N ≦ 10 • ・1 ≦ M ≦ 1,000 • ・0 ≦ p_{i ,j} ≦ 1,000 (1 ≦ i, j ≦ N)

문제 봤을때 생각

그냥 열들을 다 구해서 일일이 비교하는 방법을 생각해서 진행을 해보았는데, 뭔가 더 효율적인게 있지 않을까 하는 생각이 들었음…

뭔가 재귀 같은걸 써야했을까 싶고 ㅋㅋㅋㅋㅋㅋ하지만 정말로 그건 모르겟는걸

두번째 챌린지 였는데 전자의 경우에는 아래와 같은 코드를 작성해주었다.

코드

process.stdin.resume();
process.stdin.setEncoding('utf8');
// 自分の得意な言語で
// Let's チャレンジ!!
var lines = [];
var reader = require('readline').createInterface({
  input: process.stdin,
  output: process.stdout
});
reader.on('line', (line) => {
  lines.push(line);
});
reader.on('close', () => {
  const michi= lines[0].split(" ")[0]
  const raining= lines[0].split(" ")[1]
  const array1=[];
  const array2=[];
const array3=[];
let result=[]
let final=[]
let wait=[];
  for(let i=1; i<lines.length;i++){
      array1.push(lines[i].split(" ")[0])
      array2.push(lines[i].split(" ")[1])
        array3.push(lines[i].split(" ")[2])
      
  }
 
function arrayCheck(arrays){
    let count=0;
    for(let j=0; j<array1.length;j++){
    if(parseInt(arrays[j])<parseInt(raining)){
        count++
    }
    
} result.push(count)

}

arrayCheck(array1)
arrayCheck(array2)
arrayCheck(array3)

for(let i=0; i< array1.length;i++){
    if(  result[i]===3){
        final.push( i+1)
    }else if(  result[i]!==3){
         wait.push('wait')
    }
  
}
if(final.length>0){
    console.log(final.join(" "))
    
}else console.log("wait")

});

그런데 지금 보니까 1 ≦ N ≦ 10 라는 … 걸 확인을 안해서 테스트 케이스 통과가 안되었던 것이다 ㅋㅋㅋㅋㅋㅋㅋㅋ… 그렇다 무조건 3열이 나올거라는 이상한 확신이 문제 였던 것이다…