Welcome! Everything is fine.

[프로그래머스/Lv.1] 문자열 나누기 - Java 본문

프로그래머스/Lv.1

[프로그래머스/Lv.1] 문자열 나누기 - Java

개발곰발 2024. 5. 6.
728x90

📌 문제

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

📌 풀이

문자열을 순회하며 x와 x가 아닌 다른 글자들이 나온 횟수가 같아질때 문자열을 분리한 후, 그 개수를 반환하는 문제이다. 우선 x가 나온 횟수를 저장할 변수 count와 x가 아닌 다른 글자들이 나온 횟수를 저장할 변수 other를 만들었다. 또한 문자열 s의 첫 번째 문자를 char형 변수 c에 저장하였다. 문자열 s의 길이만큼 for문을 돌며 count와 other가 같을 경우 answer를 1증가시키고, c에 다음 문자를 넣는다. c와 같은 문자가 나오면 count를 1증가, 다른 문자가 나오면 other를 1증가시킨다.

for (int i = 0; i < s.length(); i++) {
    if (count == other) {
        answer++;
        c = s.charAt(i);
    }
            
    if (c == s.charAt(i)) count++;
    else other++;
}

📌 전체 코드

class Solution {
    public int solution(String s) {
        int answer = 0;
        int count = 0;
        int other = 0;
        char c = s.charAt(0);
        
        for (int i = 0; i < s.length(); i++) {
            if (count == other) {
                answer++;
                c = s.charAt(i);
            }
            
            if (c == s.charAt(i)) count++;
            else other++;
        }
        
        return answer;
    }
}

 

아래 코드는 맨 처음 풀 때 못풀어서 보고 쓴 답안인데 위 코드가 더 깔끔해보인다.

import java.util.*;

class Solution {
    public int solution(String s) {
        int answer = 0;
        int idx = 0;
        char x = s.charAt(0);
        int otherCount = 0;
        int xCount = 1;
        
        for (int i = 1; i < s.length(); i++) {
            
            if (x == ' ') {
                x = s.charAt(i);
                continue;
            }
            
            if (x == s.charAt(i)) xCount++;
            else otherCount++;
            
            if (xCount == otherCount) {
                x = ' ';
                answer++;
                otherCount = 0;
                xCount = 1;
            }
            
        }
        
        if (x != ' ') answer++;
        
        return answer;
    }
}