[리트코드]6-Zigzag

sherry·2025년 3월 13일
class Solution(object):
    def convert(self, s, numRows):
        """
        :type s: str
        :type numRows: int
        :rtype: str
        """
        answer_row = []
        for i in range(numRows):
            answer_row.append([])

        if numRows == 1:
            return s
        s_i = 1
        cycle_z = numRows + (numRows - 2)
        for letter in s:
            if s_i > numRows:
                answer_row[(2 * numRows - s_i) - 1].append(letter)
            else:
                answer_row[s_i - 1].append(letter)
            s_i += 1
            if s_i > cycle_z:
                s_i = s_i % cycle_z
            
        answer_str = ''
        for seq in answer_row:
            print(seq)
            for ele in seq:    
                answer_str += ele

        return answer_str

나는 이렇게 짰는데 너무 비효율적인듯해서 구글링을 해보니깐
https://piaflu.tistory.com/112
이 블로그에서 훨씬,, 간단한 아이디어로 구현하심 반성하자
알고리즘 너무 오랜만에 하니까 머리가 굳은듯 ㅠㅠ..

class Solution(object):
   def convert(self, s, numRows):
       """
       :type s: str
       :type numRows: int
       :rtype: str
       """
       answer_row = []
       for i in range(numRows):
           answer_row.append([])

       if numRows == 1:
           return s
       s_i = 0
       go_down = True
       for letter in s:
           answer_row[s_i].append(letter)
           if s_i == 0:
               go_down = True
           elif s_i == numRows - 1:
               go_down = False
           if go_down:
               s_i += 1
           else:
               s_i -= 1
       answer_str = ''
       for seq in answer_row:
           print(seq)
           for ele in seq:    
               answer_str += ele

       return answer_str

아이디어 너무 귀엽지 않음? 아닌가..
이래도 실행 시간은 오래 걸리는데

이건 아마도 따로 answer_row 만든다음에 string으로 이어붙여서 그런듯하다
시간을 줄이려면 letter 방식보다는 그냥 index 위주로 돌려서 한 번에 answer_str 만드는 방식으로 가야하는듯!

profile
Es muss sein!

0개의 댓글