코린이의 소소한 공부노트

[LeetCode/Easy] 1417. Reformat The String 본문

코딩테스트 풀이/JAVA

[LeetCode/Easy] 1417. Reformat The String

무지맘 2023. 4. 12. 14:09

1. Input

1) String s

 

2. Output

1) s에 있는 숫자와 영어 소문자가 같은 종류끼리는 인접해있지 않게 재배열한 문자열을 반환

 

3. Constraint

1) 1 <= s.length <= 500

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

 

4. Example

Input: s = "leetcode" -> Output: ""

Input: s = "a0b1c2" -> Output: "0a1b2c"

설명

- 모두 소문자이므로 같은 종류끼리 인접할 수 밖에 없기 때문에 빈 문자열 반환

- 원래 문자열("a0b1c2")도 답이 될 수 있다.

 

5. Code

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

Stack<Character> alpha = new Stack<>();
Stack<Character> num = new Stack<>();
for(int i=0 ; i<s.length() ; i++){
    char c = s.charAt(i);
    if('0'<=c && c<='9') num.push(c);
    else alpha.push(c);
}
if(Math.abs(alpha.size()-num.size())<=1){
    char[] answer = new char[s.length()];
    int i = 0;
    if(alpha.size()>=num.size()){
        while(i<answer.length){
            if(i%2==0) answer[i++] = alpha.pop();
            else answer[i++] = num.pop();
        }
    } else{
        while(i<answer.length){
            if(i%2==1) answer[i++] = alpha.pop();
            else answer[i++] = num.pop();
        }
    }
    return new String(answer);
} else
    return "";