Leetcode/Top Interview 150

[Array/String][Medium] 6. Zigzag Conversion.

자전거통학 2024. 5. 2. 01:05

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

 

Q. string s가 주어질 때, 아래와 같이 지그재그로 변경하고 이후 변경된 s를 출력하라. 

 

 

Solution. 

 우선 문제를 해석해 본다.

  

 첫째열 string은 (세로로) 그대로 써 준다. 

 다음 역순으로 row버퍼에 접근하며 돌아가면서 row-2 개를 도중에 써 준다. 

 

 위 두 과정을 row 만큼의 버퍼에 s 의 길이가 다 할때까지 반복한다. 

 

 그리고 row대로 재구성된 s를 다시 이어 붙힌다. 

 

 로직대로 코드를 작성한다. 

 

더보기

 

public string Convert(string s, int numRows) 
{
    List<string> strings = new List<string>();
    for(int q = 0; q < numRows; ++q)
        strings.Add("");    

    int idx = 0;
    bool done = false;
    while(!done)
    {
        for(int q = 0; q < numRows; ++q)
        {
            if(idx >= s.Length) {   done = true;    break;  }
            strings[q] += s[idx++];
        }
        if(!done)
        {
            for(int q = 0; q < numRows-2; ++q)
            {
                if(idx >= s.Length) {   done = true;    break;  }
                strings[numRows-2-q] += s[idx++];
            }
        }
    }

    string ret = "";
    for(int q = 0; q < numRows; ++q)
        ret += strings[q];

    return ret;
}

  

조금 느리지만, 범위안의 결과.