관리 메뉴

솜씨좋은장씨

[leetCode] 1592. Rearrange Spaces Between Words (Python) 본문

Programming/코딩 1일 1문제

[leetCode] 1592. Rearrange Spaces Between Words (Python)

솜씨좋은장씨 2021. 1. 19. 00:53
728x90
반응형

You are given a string text of words that are placed among some number of spaces. Each word consists of one or more lowercase English letters and are separated by at least one space. It's guaranteed that text contains at least one word.

Rearrange the spaces so that there is an equal number of spaces between every pair of adjacent words and that number is maximized. If you cannot redistribute all the spaces equally, place the extra spaces at the end, meaning the returned string should be the same length as text.

Return the string after rearranging the spaces.

 

Example 1:

Input: text = "  this   is  a sentence "
Output: "this   is   a   sentence"
Explanation: There are a total of 9 spaces and 4 words. We can evenly divide the 9 spaces between the words: 9 / (4-1) = 3 spaces.

Example 2:

Input: text = " practice   makes   perfect"
Output: "practice   makes   perfect "
Explanation: There are a total of 7 spaces and 3 words. 7 / (3-1) = 3 spaces plus 1 extra space. We place this extra space at the end of the string.

Example 3:

Input: text = "hello   world"
Output: "hello   world"

Example 4:

Input: text = "  walks  udp package   into  bar a"
Output: "walks  udp  package  into  bar  a "

Example 5:

Input: text = "a"
Output: "a"

 

Constraints:

  • 1 <= text.length <= 100
  • text consists of lowercase English letters and ' '.
  • text contains at least one word.

Solution

from collections import Counter

class Solution:
    def reorderSpaces(self, text: str) -> str:
        space_cnt = 0
        
        text_list = list(text)
        space_cnt = Counter(text_list)[' ']
        
        word_list = [word.replace(" ", "") for word in list(text.strip().split())]
        
        if space_cnt != 0:
            if len(word_list) != 1:
                space_each_word = space_cnt // (len(word_list) - 1 )
                extra_space_cnt = space_cnt % ( len(word_list)-1 )
                join_space = " "*space_each_word
                join_string = join_space.join(word_list)
            else:
                space_each_word = space_cnt
                extra_space_cnt = 0
                
                join_string = word_list[0] + " "*space_cnt
                       

            if extra_space_cnt != 0:
                join_string = join_string + " "*extra_space_cnt
        else:
            join_string = text

        return join_string

Solution 풀이

이 문제는 string 안에있는 모든 space의 개수를 골고루 나누어 각 단어 사이사이에 재배치를 해주는 문제입니다.

먼저 text에서 collections의 Counter를 활용하여 space의 개수( space_cnt )를 구합니다.

그 다음 " " ( 공백 ) 을 기준으로 단어단위로 text를 split한 다음

split 한 각 단어에서 split하고 남은 공백을 strip으로 제거합니다.

여기서 space_cnt가 0이 아닐 경우 space_cnt를 전체 (단어의 개수 - 1) 로 나누어 각 단어 사이에 몇 개의 공백을 

넣어야하는지 구합니다.

%를 활용하여 각 단어 사이의 공백을 골고루 나누어 주고 남은 공백은 몇 개인지 구해줍니다.

그런데 단어의 개수가 1이면 단어의 개수 - 1 을 하게되었을 때 0으로 나누게 되어 오류가 발생하므로 if 로 분기하여

따로 처리합니다.

공백을 골고루 나누어 이 공백을 활용하여 단어를 join합니다.

여기서 골고루 나누어주고 남은 공백을 뒤에 붙여줍니다.

 

SOMJANG/CODINGTEST_PRACTICE

1일 1문제 since 2020.02.07. Contribute to SOMJANG/CODINGTEST_PRACTICE development by creating an account on GitHub.

github.com

Comments