6. Zigzag Conversion

mm723·2022년 5월 4일
0

리트코드

목록 보기
19/21

문제 설명

"PAYPALISHIIRING" 문자열을 지그재그 패턴으로 쓴다면 다음과 같다.

한 줄씩 읽으면 "PAHNAPLSIIGYIR"이 된다.
문자열과 row 값이 주어지면 이를 지그재그 패턴으로 쓴 뒤의 문자열을 출력하시오.

출력 예시

접근 방법

첫번째 시도

O(n)으로 해결하는 방법,, 문자열 길이만큼 한번 for문 돌리면서 고정된 길이의 배열에 한 문자씩 담기

ex) 문자열 "abcdefghi" , row = 3인 경우,
a = result[0][0]
b = result[1][0]
c = result[2][0]
d = result[1][1]
e = result[0][1]
...
출력 => "a e i b d f h c g"

주의할 점은 0부터 row-1까지 증감을 반복하기 때문에 인덱스 처리를 따로 해줘야 한다

소스코드

class Solution {
public:
    int findIdx(int i, int row){
        int new_row = 2*(row-1);
        while(i>=new_row){
            i %= new_row;
        }
        if(i%new_row == 0 ) return 0;
        else if(i%new_row == new_row/2) return row-1;
        else if(i%new_row < new_row/2) return i;
        else{
            return new_row-i;
        }
        
    }
    string convert(string s, int numRows) {
        vector<char> result[1001];
        string answer="";
        int index;
        if(numRows==1 || s.length()==1) return s;
        for(int i=0; i<s.length(); i++){
            index=findIdx(i,numRows);
           result[index].push_back(s[i]);
        }
        
        for(int k=0; k<numRows; k++){
            for(auto itr = result[k].begin(); itr!=result[k].end(); itr++){
                answer+=*itr;
            }
        }
        return answer;
    }
};

돌아보기

한번에 풀리긴 했는데,, 더 생각해보자

profile
안냐세여

0개의 댓글