アルゴリズム13 ReadVertically


質問する
文字列が要素の配列を入力すると、文字列を垂直に読み出すときの文字列を返さなければなりません.
プールコード
function readVertically(arr) {
  // code goes here

  /* 
    1.배열을 입력받는다.
    2.배열의 요소를 세로로 읽는다.
      - 세로로 읽는다?
      - 규칙 : arr[0][0] + arr[1][0] -> arr[0][1] + arr[1][1] -> arr[0][2] + arr[1][2]
      - 첫 번째 인수 범위는 arr의 길이까지, 두 번째 인수는 배열의 요소 중 가장 긴 길이
      - 두 번째 인수 : 배열 요소 중 가장 긴 길이를 구한다.  
      - 이중 for문을 이용해 외부 포문에선 두번째 요소를 기준으로 돌고
      - 내부 for문에선 첫 번째 요소를 기준으로 돈다.
      - 접근한 각 요소를 result에 할당한다.
    3.result를 리턴한다.
  */
   let maxLength = 0;
   for(let i = 0; i < arr.length; i++){
     if(maxLength < arr[i].length){
       maxLength = arr[i].length;
     }
   }

   let result = '';
   for(let i = 0; i < maxLength; i++){
     for(let j = 0; j < arr.length; j++){
       if(arr[j][i] === undefined){
         continue;
       }
       result += arr[j][i];
     }
   }
   return result;
   
   
}
難点
ルールを定める場合,二重複文により複文の条件や基準を特定することは困難である.
KEY
配列要素の中で最も長い長さを求め,外部クエリの基点とする.これは、2 Dアレイ内の行がドア内で回転し、2 D要素の長さが異なる場合、アレイ要素の中で最も長い行がドアの外で2 Dアレイ内の要素を回転させることができるためです.