본문 바로가기

Algorithm/Leetcode

[Leetcode] Print Words Vertically (#1324)

 

 

문제

 

Given a string s. Return all the words vertically in the same order in which they appear in s.
Words are returned as a list of strings, complete with spaces when is necessary. (Trailing spaces are not allowed).
Each word would be put on only one column and that in one column there will be only one word.

 

 

Example 1:

Input: s = "HOW ARE YOU"
Output: ["HAY","ORO","WEU"]
Explanation: Each word is printed vertically. 
 "HAY"
 "ORO"
 "WEU"

Example 2:

Input: s = "TO BE OR NOT TO BE"
Output: ["TBONTB","OEROOE","   T"]
Explanation: Trailing spaces is not allowed. 
"TBONTB"
"OEROOE"
"   T"

Example 3:

Input: s = "CONTEST IS COMING"
Output: ["CIC","OSO","N M","T I","E N","S G","T"]

 

 

코드 

class Solution(object):
    def printVertically(self, s):
        arr = []
        answer = []
        num = ""
        # 공백 기준으로 문자열 분리하기
        s = list(s.split(" "))
        
        # 가장 긴 단어의 길이 구하기
        max = 0
        for i in s:
            if len(i) > max:
                max = len(i)
        print(max)
        
        # 단어 길이가 max보다 짧으면 부족한 글자 수만큼 공백 추가         
        for k in s:
            if len(k) < max:
                k = k + (max - len(k)) * " "
                arr.append(k)
            else:
                arr.append(k)
        
        # 각 단어의 index 따라서 문자 만들기 
        for t in range(max):
            for i in range(len(arr)):
                num += arr[i][t]
            answer.append(num.rstrip())
            num = ""
        
        return answer
분석 > 길이를 일단 가장 긴 단어에 맞추고 부족한 부분만큼 공백으로 채우고 비교하면 된다는 아이디어를 떠올리는 데에 시간이 꽤 걸렸다. 그리고 문자 뒤에 있는 공백은 없애야 하는데 처음에는 이걸 반복문으로 뒤에서부터 없애다가 공백이 사라지는 시점에 반복문으로 종료하려고 하였으나, 생각해보니 rstrip 함수를 사용하면 깔끔하게 문자 뒤에 있는 공백을 없앨 수 있었다.

 

 

 

 

Print Words Vertically - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com