본문 바로가기
Problem Solving

2-10. ZigZag Conversion (LeetCode 6)

by tls1107 2021. 7. 9.
728x90
반응형


문제 풀기 전 생각 : 

먼저 변수를 생성합니다

int 타입의 index를 선언합니다. 

char 타입의 이차원배열을 선언합니다.

변수 row 를 만듭니다. row는 0으로 초기화합니다. 

마지막 변수로 level을 선언합니다. level은 column의 역할을 합니다.

 

와일문으로 매 반복마다 index을 1씩 증가시키고 index가 s의 길이보다 길어지거나 같아지면 반복을 멈춘다.

반복마다 row를 증가시키며 만약 row가 numRows-1 과 같아지면 반복마다 감소시킨다. 

그리고 감소하다 0에 도달하면 다시 증가하게 한다. 

바로 위의 칸이 비어있다면 올라가고 있는 중이니 level을 증가시키고 

만약 차있다면 그대로 둔다.

 

 

로 하려고 했지만 완성하고 메모리가 생각보다 많이 들어서

생각을 조금 더 해보니 굳이 level 변수와 이차원 배열을 써야 할 이유가 없었네요

스트링 타입으로 바꾸고 칸 띄우기에 집착하지 않고 바로 append해주니 메모리 사용이 처음보다 많이 줄었네요.


 

#include <iostream>
using namespace std;

class Solution {
public:
    string convert(string s, int numRows) {
        int index = 0 , t1=1, t2=0;
        int row = 0, level = 0;
        string str[numRows];
        string answer = "";
        
        if(numRows == 1 || s.length() == 1){
            return s;
        }
        
        for(int i=0 ; i< numRows ; i++){
            str[i] = "";
        }
        
        while(index < s.length() ){
            str[row] += s[index];
            
            if(row == 0) {
                t1 = 1;
                
            }
            else if(row == numRows-1) {
                t1 = -1;
                
            }
            row += t1;
            index++;
        }
        
        for(int i=0 ; i< numRows ; i++){
            answer += str[i];
        }
        return answer;
    }
};

https://leetcode.com/problems/zigzag-conversion/

 

ZigZag Conversion - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com


풀 때 어려웠던 점 또는 느낀점 :

문제를 풀때 캐릭터 타입 이차원 배열을 사용할 바에는 스트링을 쓰는것이

더 효율적이라는 것을 몸으로 직접 겪어보니 

더 체감이 되는 것 같습니다. 

 

그리고 코드를 조금 바꿨을뿐인데 런타임이 많이 줄어드는 것을 보고

신기했습니다. 이래서 생각 정리 단계에서부터 효율적인 코드를 짜는 것이

중요하단 것을 깨달았습니다.

728x90
반응형

댓글