의역: 문자열 s를 제공할 때 해당 문자열의 segment의 개수를 반환하라 

segment는 공백이 존재하지 않는 연속된 문자열이다 

 

의역: 각각 공백을 제거한 문자열 들의 개수를 리턴 한 예제들이다.

 

조심할 점: 해당 문제는 언뜻 보면 split(' ')을 사용하여 공백을 기준으로 나누면 해결 될 수 있을 것 처럼 보인다.

하지만 함정이 하나 숨어 있는데 문자열 s가 "       abc        q     qf" 처럼 공백이 여러번 들어 간 케이스도 존재한 다는 것 이다.

 

<풀이>

님의 풀이를 참조

1번: split() 함수와 정규식 /s == ' '을 이용 

/s 에서 만약 +를 붙인다면 공백 문자가 1개 이상인 경우임을 말하기에  

 // (Java) 공간 복잡도 O(n) 시간 복잡도 O(split())
    public int countSegmentsOtimal2(String s) {
    	// ("x "+s) 를 하는 이유는 맨 앞이 공백으로 오는 경우를 제거 하기 위해
        // return ("x "+s).split(" +").length-1; 둘다 가능
        return ("x "+s).split("//s+").length-1;
    }
# python
class Solution:
    def countSegments1(self, s: str) -> int:
        return len(s.split())

2번: split() 함수는 시간을 많이 소모하기에 1번에 비해 좀 더 빠른 방법이다.

논리적으로 공백 다음에 공백이 아니라면 단어라고 판단하여 segment +1

+만약 "a b" 처럼 처음에 공백 없이 단어가 존재하는 경우는 (i==0)|| 조건을 추가로 붙여 해결

 // (Java) 공간 복잡도 O(1) 시간 복잡도 O(n)
    public int countSegmentsOtimal1(String s) {
        int ans =0;
        for(int i=0;i<s.length();i++){
            if((i==0||s.charAt(i-1)==' ')&&s.charAt(i)!=' ')
                ans++;
        }
        return ans;
    }
# python
class Solution:
    def countSegments(self, s):
        segment_count = 0
        for i in range(len(s)):
            if (i == 0 or s[i-1] == ' ') and s[i] != ' ':
                segment_count += 1

        return segment_count

링크: https://leetcode.com/problems/number-of-segments-in-a-string/description/

'PS > Easy' 카테고리의 다른 글

520. Detect Capital (해석 + 풀이)  (1) 2023.01.03
441. Arranging Coins (해석 + 풀이)  (0) 2023.01.02
414. Third Maximum Number (해석)  (0) 2022.12.30
412. Fizz Buzz (해석)  (0) 2022.12.29
2389. Longest Subsequence With Limited Sum (해석)  (0) 2022.12.25

+ Recent posts