반응형

[LeetCode, 리트코드] ZigZag Conversion

반응형


1. Problem


The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows like this: (you may want to display this pattern in a fixed font for better legibility)

주어진 행에서 지그재그 패턴으로 쓰여진 "PAYPALISHIRING" 문자열은 다음과 같다.

P   A   H   N
A P L S I I G
Y   I   R

위 문자열은 위에서부터 오른쪽으로 다음과 같이 읽는다. "PAHNAPLSIIGYIR"

위와 같이 문자열이 읽히도록 하는 코드를 작성하라

string convert(string s, int numRows);

Example 1:

Input: s = "PAYPALISHIRING", numRows = 3
Output: "PAHNAPLSIIGYIR"

Example 2:

Input: s = "PAYPALISHIRING", numRows = 4
Output: "PINALSIGYAHRPI"
Explanation:

P     I    N
A   L S  I G
Y A   H R
P     I


2. Solution


복잡하게 생각하지 말고 간단하게 접근하는 것이 좋다. 변형된 문자열에서 각 행들을 수평분할했을 시의 부분문자열들을 저장하는 eachRowString 배열을 만든다. 그리고 하나씩 순회하면서 마지막 row와 맨 첫번 째 row에 도달했을 시 순회방향을 바꾸어 주면 된다.



3. What I solved

class Solution {
public:
    string convert(string s, int numRows) {
        if(numRows == 1) 
            return s;
        vector eachRowString(1000, "");
        
        int row = 1;
        bool updown = true; // 아래가 true 위가 false
        for(char c : s){
            eachRowString[row-1] += c;
            if(row == numRows && updown){
                updown = false;
            }
            else if(row == 1 && !updown) {
                updown = true;
            }
            if(updown)
                row++;
            else
                row--;
        }
        
        string ret = "";
        for(string s : eachRowString){
            ret += s;
        }
        
        return ret;
    }
};



4. Best Solution


위와 동일

반응형

이 글을 공유하기

댓글

Designed by JB FACTORY