문자열 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
출력