코린이의 소소한 공부노트

[LeetCode/Medium] 2390. Removing Stars From a String 본문

코딩테스트 풀이/JAVA

[LeetCode/Medium] 2390. Removing Stars From a String

무지맘 2023. 4. 11. 12:35

1. Input

1) String s

 

2. Output

1) 아래 단계를 모두 끝낸 후의 s를 반환

- s의 별을 1개 고른다.

- 별의 왼쪽에 있는 별이 아닌 문자중 고른 것과 가장 가까운 문자를 없앤다.

- 고른 별을 없앤다.

- s에 별이 없을 때까지 반복한다.

 

3. Constraint

1) 1 <= s.length <= 10^5

2) s는 영어 소문자와 *로만 이루어져 있다.

3) s에는 유효한 입력만 들어온다.

 

4. Example

Input: s = "leet**cod*e" -> Output: "lecoe"

설명: leet**cod*e" -> lee*cod*e -> lecod*e -> lecoe

 

5. Code

1) 첫 코드(2023/04/11)

Stack<Character> st = new Stack<>();
for(int i=0 ; i<s.length() ; i++){
    char c = s.charAt(i);
    if(c=='*') st.pop();
    else st.push(c);
}
String answer = "";
while(!st.empty())
    answer = st.pop() + answer;
return answer;

- 약간 느리고, 메모리도 꽤 먹는다.

2) 개선해본 코드(2023/04/11)

Stack<Character> st = new Stack<>();
for(int i=0 ; i<s.length() ; i++){
    char c = s.charAt(i);
    if(c=='*') st.pop();
    else st.push(c);
}
char[] c = new char[st.size()]; int i = c.length-1;
while(!st.empty())
    c[i--] = st.pop();
return new String(c);

- 훨씬 성능이 좋아졌다.