<Medium> Zigzag Conversion (LeetCode : C#)

이도희·2023년 2월 22일
0

알고리즘 문제 풀이

목록 보기
13/185

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

📕 문제 설명

문자열과 행개수가 주어질 때 zigzag 패턴으로 문자열을 배치 후 반환

  • Input
    문자열, 행 개수
  • Output
    zigzag로 변환 된 문자열

예제

보면 행개수대로 밑으로 내려갔다가 대각선으로 올라오는 방식이다.(N모양과 유사)

풀이

몇가지 케이스를 그려보면 규칙이 보인다.
첫행과 마지막행은 (주어진 행 개수 - 1) 2만큼 인덱스 값에 차이를 보인다.
중간 행들은 (주어진 행 개수 - 1) - (2
현재행)과 (2 * 현재줄)을 반복하며 인덱스의 차이를 보인다.

따라서, 첫행과 마지막행 그리고 중간 행을 나누어서 붙여나가는 방식으로 구현하였다.

  1. 첫행 만들기
  2. 중간 행들은 규칙대로 진행
  3. 마지막행 만들기
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;
        
    }
}

결과

profile
하나씩 심어 나가는 개발 농장🥕 (블로그 이전중)

0개의 댓글