리트코드 코딩 테스트 준비
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하면 된다.
어렵게 생각하면 한도끝도 없이 어려운 문제였다. 쉽게 생각해야겠다.