Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

파이썬에서 문자열을 줄 수 k의 지그재그 문자열로 변환하는 프로그램

<시간/>

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

따라서 입력이 s ="ilovepythonprogramming" k =5와 같으면 출력은 다음과 같습니다.

파이썬에서 문자열을 줄 수 k의 지그재그 문자열로 변환하는 프로그램

이 문제를 해결하기 위해 다음 단계를 따릅니다.

  • 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

출력

파이썬에서 문자열을 줄 수 k의 지그재그 문자열로 변환하는 프로그램