https://leetcode.com/problems/zigzag-conversion/
문자열과 행개수가 주어질 때 zigzag 패턴으로 문자열을 배치 후 반환
보면 행개수대로 밑으로 내려갔다가 대각선으로 올라오는 방식이다.(N모양과 유사)
몇가지 케이스를 그려보면 규칙이 보인다.
첫행과 마지막행은 (주어진 행 개수 - 1) 2만큼 인덱스 값에 차이를 보인다.
중간 행들은 (주어진 행 개수 - 1) - (2 현재행)과 (2 * 현재줄)을 반복하며 인덱스의 차이를 보인다.
따라서, 첫행과 마지막행 그리고 중간 행을 나누어서 붙여나가는 방식으로 구현하였다.
public class Solution {
public string Convert(string s, int numRows) {
string answer = "";
if (numRows >= s.Length) return s;
if (numRows == 1) return s;
int unit = (numRows - 1) * 2;
// 첫줄
int temp = 0;
while (temp < s.Length)
{
answer += s[temp];
temp = temp + unit;
}
// 중간줄
for (int i = 1; i < numRows - 1; i++)
{
int temp2 = i;
int even = unit - (2 * i);
int odd = 2 * i;
answer += s[temp2];
for (int j = 0; j < s.Length; j++)
{
temp2 += j % 2 == 0 ? even : odd;
if (temp2 >= s.Length) break;
answer += s[temp2];
}
}
// 마지막줄
temp = numRows - 1;
while (temp < s.Length)
{
answer += s[temp];
temp = temp + unit;
}
return answer;
}
}