[Programmers / Level1] 140108. 문자열 나누기(Java)

이하얀·2024년 8월 25일
0

🕊️ 프로그래머스

목록 보기
34/43

💡 Info




입출력 조건




입출력 예시




문제 이해


  • x 글자와 x 글자가 아닌 그룹 2개로 나누고, 두 글자 수가 일치한다면 그 횟수를 반환하는 문제


알고리즘


풀이 시간 : 32분

  • 원하는 문자열과 일치하는 경우를 세는 count 선언
  • 만약 count가 0이라면 -> x를 i로 반환
  • 만약 x와 i가 같다면(두 개의 그룹 글자 수가 같아질때까지) -> count를 증가(그렇지 않을 경우에는 감소시켜야 함)
import java.util.*;

class Solution {
    public int solution(String s) {
        int answer = 1;

        int count = 1;
        char x = 0;
        
        for (int i = 1; i < s.length(); i++) {
            if (count == 0) {
                answer++;
                s.charAt(x) = s.charAt(i);
            }

            if (s.charAt(x) == s.charAt(i)) {
                count++;
            }
            else {
                count--;
            }
        }
        return answer;
    }
}


오답체크


  • 테스트 미통과 문제
    • char x를 0이 아닌 s.charAt(0)으로 초기화해야 함.
//before
char x = 0;

for (int i = 1; i < s.length(); i++) {
	if (count == 0) {
		answer++;
		s.charAt(x) = s.charAt(i);
    }

    if (s.charAt(x) == s.charAt(i)) {
		count++;
	}
//after        
char x = s.charAt(0);

for (int i = 1; i < s.length(); i++) {
	if (count == 0) {
		answer++;
		x = s.charAt(i);
  	}

	if (x == s.charAt(i)) {
		count++;
    }
    else {
    	count--;
    }


최종 풀이


풀이 시간 : 45분(첫 풀이 시간 포함)

  • 원하는 문자열과 일치하는 경우를 세는 count 선언
  • 만약 count가 0이라면 -> x를 i로 반환
  • 만약 x와 i가 같다면(두 개의 그룹 글자 수가 같아질때까지) -> count를 증가(그렇지 않을 경우에는 감소시켜야 함)
import java.util.*;

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

            if (x == s.charAt(i)) {
                count++;
            }
            else {
                count--;
            }
        }
        return answer;
    }
}


결과



🚨 참고할 풀이

class Solution {
    public int solution(String s) {
        int answer = 0;
        while (!s.isEmpty()) {
            int same = 0;
            int diff = 0;
            char x = s.charAt(0);
            int i = 0;
            
            while (i < s.length() && (same == 0 || same != diff)) {
                if (s.charAt(i) == x) {
                    same++;
                } else {
                    diff++;
                }
                i++;
            }
            
            s = s.substring(i);
            answer++;
        }
        return answer;
    }
}
profile
언젠가 내 코드로 세상에 기여할 수 있도록, BE 개발 기록 노트☘️

0개의 댓글