Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬(Python)으로 문자열의 단어를 세로 방향으로 출력하는 방법

문제 개요

문자열 s가 주어졌을 때, s에 등장한 순서 그대로 모든 단어를 세로 방향으로 읽어야 합니다. 결과는 문자열 리스트로 반환하며, 각 행의 길이를 맞추기 위해 필요한 만큼 공백으로 채웁니다(단, 뒤쪽 공백은 허용되지 않습니다). 각 단어는 하나의 열에만 배치되고, 하나의 열에는 하나의 단어만 존재합니다.

예를 들어 입력 문자열이 "HOW ARE YOU"라면, 각 단어의 첫 번째 글자(H, A, Y), 두 번째 글자(O, R, O), 세 번째 글자(W, E, U)를 차례로 읽어 출력은 ["HAY", "ORO", "WEU"]가 됩니다.

해결 접근 방법

이 문제는 다음 단계를 따라 해결할 수 있습니다.

  • s를 공백을 기준으로 분리해 문자열 리스트로 만들고, 빈 배열 x를 준비한 뒤 row를 0으로 초기화합니다.
  • s의 각 단어 i에 대해 row를 max(row, len(i))로 갱신합니다. 즉, 가장 긴 단어의 길이가 곧 행(row)의 개수가 됩니다.
  • col은 s의 길이, 즉 단어의 개수로 설정합니다.
  • 빈 문자열로 채워진 크기 row짜리 배열 ans를 생성합니다.
  • i를 0부터 col-1까지 반복하면서 다음을 수행합니다.
    • j를 0으로 초기화합니다.
    • j가 s[i]의 길이보다 작은 동안:
      • i - len(ans[j]) >= 1인 동안 ans[j]에 공백을 이어 붙여 자릿수를 맞춥니다.
      • ans[j]에 s[i][j]를 추가합니다.
      • j를 1 증가시킵니다.
  • 모든 반복이 끝나면 ans를 반환합니다.

파이썬 구현 예제

아래 구현을 통해 동작 과정을 더 명확히 이해할 수 있습니다.

class Solution(object):
    def printVertically(self, s):
        s = s.split(" ")
        x = []
        row = 0
        for i in s:
            row = max(row, len(i))
        col = len(s)
        ans = ["" for i in range(row)]
        j = 0
        for i in range(col):
            j = 0
            while j < len(s[i]):
                #print(j, i)
                while i - len(ans[j]) >= 1:
                    ans[j] += " "
                ans[j] += s[i][j]
                j += 1
        return ans

ob = Solution()
print(ob.printVertically("HOW ARE YOU"))
print(ob.printVertically("TO BE OR NOT TO BE"))

입력

"HOW ARE YOU"
"TO BE OR NOT TO BE"

출력

["HAY","ORO","WEU"]
["TBONTB","OEROOE"," T"]

정리

핵심 아이디어는 가장 긴 단어의 길이만큼 행을 만들고, 각 단어를 왼쪽부터 한 글자씩 해당 행에 붙이되, 앞선 단어들이 아직 그 위치까지 도달하지 못했다면 공백으로 간격을 채우는 것입니다. 이렇게 하면 원본 문자열의 단어 순서를 그대로 유지한 세로 방향 텍스트를 얻을 수 있습니다.