짱아의 개발 기록장

LeetCode : 6. ZigZag Conversion 본문

Algorithm/LeetCode

LeetCode : 6. ZigZag Conversion

jungahshin 2020. 12. 27. 13:49
반응형

행과 열에 대한 개념을 확실하게 알고 있으면 쉽게 풀 수 있는 문제이다.

 

[메인 로직]

1. (numRows-1)만큼 일직선으로 내려간 후(내려가면서 행+1, 열은 그대로)

2. (numRows-1)만큼 대각선으로 올라간다.(행-1, 열+1)

말 그래도 zigzag의 형태로 행과 열을 조절하면 된다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
class Solution {
public:
    char map[1001][1001];
    string convert(string s, int numRows) {
        map[0][0= s[0];
        int idx = 1;
        int row = 0, col = 0;
        bool check = false;
        int maxCol = 0;
        string ans = "";
        
        if(numRows==1){
            return s;
        }
    
        while(idx<s.size()){
            // 밑으로 이동
            for(int i=0; i<numRows-1; i++){
                if(idx>s.size()-1){
                    check = true;
                    break;
                }      
                row++;
                map[row][col] = s[idx];
                idx++;
            }
            if(check==true){
                break;
            }
            // 대각선 이동
            for(int i=0; i<numRows-1; i++){
                if(idx>s.size()-1){
                    check = true;
                    break;
                } 
                row--;
                col++;
                map[row][col] = s[idx];
                idx++;
                maxCol = max(col, maxCol);
            }
        }
        
// 출력하기
        for(int i=0; i<numRows; i++){
            for(int j=0; j<=maxCol; j++){
                if(map[i][j]!=NULL){
                    ans += map[i][j];
                }
            }
        }
        
        return ans;
    }
};
cs
반응형
Comments