[JS]_daily coding #14

seul·2022년 6월 13일
0

Algorithm

목록 보기
13/31

코플릿 데일리 코딩 13_readVertically


수도코드

  1. 문자열(str)을 요소로 갖는 배열 => 배열에 2개 요소가 들어있을 경우, 'str1[0]str2[0]str1[1]str2[1]...'으로 조합된 문자열 반환
  2. 결과를 담아줄 빈 문자열 변수를 선언한다.
  3. 배열에 담긴 문자열 길이는 다양하기 때문에 가장 긴 문자열 길이를 기준으로 반복해야 한다.
  4. 배열에 담긴 문자열 중에서 가장 긴 문자열 길이를 구한다. maxLength
  5. 가장 긴 문자열 길이만큼 반복하는 반복문 안에서 배열의 길이만큼(배열에 담긴 문자열 갯수) 반복하는 반복문을 만들어준다.
  6. 해당하는 자리에 문자열이 있는 경우에만 결과 변수에 값을 담아준다.
  7. 결과를 반환한다.

첫번째 코드

배열요소들의 길이 중에서 가장 긴 길이를 구하기 위해서 Math.max()메서드를 이용했다.

function readVertically(arr) {
  let result = '' 
  let wordLength = arr.map(el => el.length) //배열 안에 담긴 문자열의 길이가 담긴 배열 
  let maxLength = Math.max(...wordLength) // 해당 배열에서 가장 큰 값을 구해줌(가장 긴 문자열 길이)

  for(let i = 0; i < maxLength; i++) {         //가장 긴 문자열 길이만큼 반복
    for (let j = 0; j< arr.length ; j++) {     //배열의 요소 갯수만큼 반복한다. 
      if (arr[j][i]) {                         //해당하는 인덱스 값이 있을경우에만 
        result += arr[j][i]                    //값을 담아준다. 
      }
    }
  }
  return result
}

두번째 코드

reduce()를 이용해서 가장 긴 길이를 구하는 코드로 바꿔봤다.

function readVertically(arr) {
  let result = '' 
  let wordLength = arr.map(el => el.length) 
  let maxLength = wordLength.reduce((previous, current) => {
    return (previous > current ? previous: current)
})

  for(let i = 0; i < maxLength; i++) {         
    for (let j = 0; j< arr.length ; j++) {     
      if (arr[j][i]) {                         
        result += arr[j][i]                    
      }
    }
  }
  return result
}

remind

이중 for문은 풀 때마다 헷갈린다. 오늘도 역시나 손으로 그려가면서 풀었다..! 많이 써보면서 익숙해지는 수 밖에 없을 것 같다.
쉬면서 풀어본 grasshopper라는 앱에서 이중 for문을 설명한 예제 코드가 직관적이어서 메모했다.

for (let activity of ['dancing', 'jumping', 'singing']) {
  for (let family of ['brother', 'mother', 'father']) {
    console.log(activity + ' ' + family);
  }
	console.log('\n');
}

/*출력 결과 
dancing brother
dancing mother
dancing father

jumping brother
jumping mother
jumping father

singing brother
singing mother
singing father 
*/
profile
Connecting dots

0개의 댓글