문자열 s와 다른 값 k가 있다고 가정합니다. s에서 각 문자를 가져와서 왼쪽 위에서 오른쪽 아래로 대각선으로 시작하여 k번째 줄에 도달할 때까지 새 문자열을 찾은 다음 오른쪽 위로 올라가는 식으로 계속 진행해야 합니다.
따라서 입력이 s ="ilovepythonprogramming" k =5와 같으면 출력은 다음과 같습니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다.
- line :=새 지도
- cnt :=0
- 델타:=1
- s의 각 인덱스 i와 문자 c에 대해 다음을 수행합니다.
- 줄 끝에 (c, i) 삽입[cnt]
- cnt :=cnt + 델타
- cnt가 k와 같으면
- 델타 :=-1
- cnt :=k - 2
- cnt가 0과 같으면
- 델타:=1
- ans :=새 목록
- 줄에 있는 각 키 i와 값 c에 대해 다음을 수행합니다.
- 접두사 :=s와 같은 크기의 목록으로 하나의 공백으로 채우십시오.
- c의 각 쌍(x, y)에 대해 do
- 접두사[y] :=x
- 접두사에 있는 각 요소를 결합하고 ans에 삽입
- as의 연속적인 각 요소 사이에 새 줄을 추가하여 새 문자열을 반환합니다.
더 나은 이해를 위해 다음 구현을 살펴보겠습니다.
예시
from collections import defaultdict
class Solution:
def solve(self, s, k):
line = defaultdict(list)
cnt = 0
delta = 1
for i, c in enumerate(s):
line[cnt].append((c, i))
cnt += delta
if cnt == k:
delta = -1
cnt = k - 2
if cnt == 0:
delta = 1
ans = []
for i, c in line.items():
prefix = [" "] * (len(s))
for x, y in c:
prefix[y] = x
ans.append("".join(prefix))
return "\n".join(ans)
ob = Solution()
s = "ilovepythonprogramming"
k = 5
print(ob.solve(s, k)) 입력
"ilovepythonprogramming", 5
출력
