[LeetCode]6.ZigZag Conversion

신동재·2021년 9월 16일
0

코딩테스트 준비

목록 보기
7/8

리트코드 코딩 테스트 준비
https://leetcode.com/problems/zigzag-conversion
문제에 대한 자세한 설명은 다음 사이트에서 확인 할 수 있다.

❓ 문제


문자열을 아래로 위로 왔다갔다하면서 배치하고 행 단위로 붙여서 읽는 문제이다.

❗ 접근 방법

numRows만큼 빈 이차원 행렬을 만들어주고 문자열의 길이만큼 아래로 위로 이동하면서 계속 글자를 붙여주고 가 0이거나 numRows-1일때 배열의 방향을 바꿔준다.

⭕ 내가 작성한 코드

class Solution:
    def convert(self, s: str, numRows: int) -> str:
        if numRows == 1 :
            return s 
        store = [[] for _ in range(numRows)]
        answer = ''
        print(store)

        i = 0
        toggleDown = True
        for x in s :
            store[i].append(x)
            if i == 0 :
                toggleDown = True 
            elif i == numRows-1 :
                toggleDown= False
            if toggleDown :
                i += 1
            else :
                i -= 1
        for i in range(numRows) :
            answer += ''.join(store[i])
        
        return answer          

💯 다른사람이 풀이한 코드

class Solution:
    def convert(self, s: str, numRows: int) -> str:
        if numRows == 1 or numRows >= len(s) :
            return s 
        store = [''] * numRows
        answer = ''
        print(store)

        i = 0
        toggleDown = True
        for x in s :
            store[i] += x
            if i == 0 :
                toggleDown = True 
            elif i == numRows-1 :
                toggleDown= False
            if toggleDown :
                i += 1
            else :
                i -= 1
        for i in range(numRows) :
            answer += ''.join(store[i])
        
        return answer

🧑🏻 후기

이차원 배열을 만들지않고 일차원 배열의 [''] * numRows를 통해 일차원 string 배열을 만들어 해결할 수도 있었다.

if numRows == 1 or numRows >= len(s) :
return s
또한 numRows가 1일때 뿐만 아니라 numRows가 s의 길이보다 커도 s만 return하면 된다.

어렵게 생각하면 한도끝도 없이 어려운 문제였다. 쉽게 생각해야겠다.

profile
Software Developer / 1997.12.05

0개의 댓글