DAY3-Zigzag Conversion[Level: Medium]

김보람's avatar
Jan 04, 2026
DAY3-Zigzag Conversion[Level: Medium]

문제.Zigzag Conversion

내 풀이 코드.

/**
 * @param {string} s
 * @param {number} numRows
 * @return {string}
 */
var convert = function(s, numRows) {
	if (numRows === 1 || s.length <= numRows) {
	//numRows가 1거나 문자열길이가 행보다 작거나 같으면 그대로 리턴
        return s;
    }

    const rows =  Array(numRows).fill("")

    let currentRowsIndex = 0 
	//글자를 넣을 rows의 현재 인덱스

    let preTopDown = 0 
	//이전 꼭지점이 위였는지 아래였는지 0이면 index 0 1이면 인덱스 numRows - 1

    for(let str = 0; str < s.length; str++){
       
        if(preTopDown > 0){
            rows[currentRowsIndex] += s[str]
             currentRowsIndex --

        }else {
             rows[currentRowsIndex] += s[str]
             currentRowsIndex ++
        }

        if(currentRowsIndex === numRows -1 ) preTopDown = 1
        if(currentRowsIndex === 0 ) preTopDown = 0

    }
   

    return rows.join("")
};

말로 푸는 코드 풀이.

  1. 주어진 행만큼의 배열을 빈 스트링으로 채워 준비함

    Aray(numRows).fill(““)

  2. 그다음은 주어진 문자열의 글자수만큼 돌면서 준비한 지그재그로 위치에 더해주어야 한다

    1. 넣을 배열내 index를 기억하고 → 코드내 currentRowsIndex

    2. 지그재그로 배열에 넣어야 하기때문에 내가지금 지그재그의 오르막인지 내리막인지를 기억해야한다 → 코드내 preTopDown

    3. preTopDown이 0일경우를 오르막의 시작으로, preTopDown가 1일경우 내리막의 시작으로 정의한다

    4. 오르막일경우 rows[currentRowsIndex] += 현재요소 를 넣어주고 currentRowsIndex ++ 로 오르막길을 만들어 줌 반대일경우 —

  3. 반복이 모두 돈 후 rows.join("")으로 합친 문자로 리턴

Share article

김보람 | 930802qhfka@gmail.com