본문 바로가기
코딩테스트 문제풀이/LeetCode

[LeetCode] 6. Zigzag Conversion

by merona99 2023. 8. 8.
반응형

LeetCode 6번 Zigzag Conversion

String

 


 

문제

 

문자열 s가 주어졌을 때, 이를 지그재그 방향으로 나열한 문자열을 출력하는 문제

 


 

과정

  1. 문자열 방향을 정할 변수(direct)와 인덱스 값을 설정할 변수(cnt)가 필요하다.
  2. 문자열 s를 순회하면서 인덱스가 마지막이거나 처음일 경우에 방향을 바꿔준다.
  3. 방향에 따라 정방향이면 인덱스에 +1, 역방향이면 인덱스에 -1을 해준다.
  4. numRows만큼 선언해둔 2차원 배열(data)에 값을 저장하고 이를 문자열로 붙여서 출력해주면 된다.

 


소스코드

class Solution:
    def convert(self, s: str, numRows: int) -> str:
        answer = ""
        data = [[] for _ in range(numRows)]

        cnt, direct = 0, 0
        if numRows == 1:
            return s
        else:
            for i in s:
                data[cnt].append(i)
                if cnt == 0:
                    direct = 0
                    cnt += 1
                elif cnt == numRows -1:
                    direct = 1
                    cnt -= 1
                else:
                    if direct == 0:    # 정방향
                        cnt += 1
                    if direct == 1:    # 역방향
                        cnt -= 1

        for i in data:
            zigzag = "".join(i)
            answer += zigzag
        return answer

 


다른사람의 풀이를 봤는데 나와 비슷한데 좀 더 간결했다.

나는 방향을 0과 1로 구분했는데 이분은 -1, 1 로 설정해서 인덱스에 방향의 값을 바로 더해주는 방식으로 했다.

그래서 나의 코드에서 cnt += 1, cnt -=1에 해당하는 코드가 불필요 해진다.

 

class Solution(object):
    def convert(self, s, numRows):
        if numRows == 1 or numRows >= len(s):
            return s
        
        rows = [[] for row in range(numRows)]
        index = 0
        step = -1
        for char in s:
            rows[index].append(char)
            if index == 0:
                step = 1
            elif index == numRows - 1:
                step = -1
            index += step

        for i in range(numRows):
            rows[i] = ''.join(rows[i])
        return ''.join(rows)

링크: https://leetcode.com/problems/zigzag-conversion/solutions/3864936/video-step-by-step-visualization-and-explanation/

 

 


통과

 


 

 

// 2023-08-09 스터디 과제

 

반응형

댓글