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
로 검사해서 틀렸다.
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