6. Zigzag Conversion

Yongsang Yoon·2022년 1월 25일
0

LeetCode

목록 보기
4/9

Codes

Trial 1

class Solution:
    def convert(self, s: str, numRows: int) -> str:
        
        answer =''
        N = len(s)
        if numRows == 1:
            return s
        
        else: # numRows >= 2
            d = 2*(numRows-1)
            
            for i in range(numRows): # line-index
                
                if i == 0 or i == numRows-1: # first line
                    idx = i
                    while idx < N:
                        answer += s[idx]
                        idx = idx + d
                
                else: # middle lines
                    f1 = i
                    f2 = i + (numRows-1-i)*2
                    
                    while 1:
                        
                        if f1 > N-2:
                            break
                        answer += s[f1]
                        
                        if f2 > N-2:
                            break
                        answer += s[f2]
                        
                        f1 += d
                        f2 += d
        
        return answer
P   A   H   N
A P L S I I G
Y   I   R

두번째 행에서 f1 =[ A, L, I ,G] f2= [P,S,I] 인데 G가 누락 된채 "PAHNAPLSIIYIR" 라는 결과를 얻었다. 이는 while loop 에서 f1이 끝까지 순회하지 못 했기 때문임.

주의할점은 이제 N=13이면 Index는 12까지고 마지막 원소까지 확인하기 위해서는 if index > N-1이면 충분하다. 본문에서는 idx < N-2로 검사해서 틀렸다.

final

class Solution:
    def convert(self, s: str, numRows: int) -> str:
        
        answer =''
        N = len(s)
        if numRows == 1:
            return s
        
        else: # numRows >= 2
            d = 2*(numRows-1)
            
            for i in range(numRows): # line-index
                
                if i == 0 or i == numRows-1: # first line
                    idx = i
                    while idx < N:
                        answer += s[idx]
                        idx = idx + d
                
                else: # middle lines
                    f1 = i
                    f2 = i + (numRows-1-i)*2
                    
                    while 1:
                        
                        if f1 > N-2:
                            break
                        answer += s[f1]
                        
                        if f2 > N-2:
                            break
                        answer += s[f2]
                        
                        f1 += d
                        f2 += d
        
        return answer
profile
I'm a student

0개의 댓글