프로그래머스 문자열 나누기 JAVA 풀이 (문자열, 구현)

2026. 6. 9. 19:42·코테(Solved.ac + Programmers)
728x90

📌 문제 링크

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 


📌 문제 개요

문자열 s가 주어졌을 때, 일정한 규칙에 따라 문자열을 여러 개로 분리하는 문제이다.

먼저 현재 문자열의 첫 글자를 기준 문자 x로 잡는다.

 

왼쪽부터 문자를 확인하면서 x와 같은 문자의 개수와 x와 다른 문자의 개수를 각각 센다.

두 개수가 처음으로 같아지는 순간 문자열을 분리한다.

 

남은 문자열에 대해서도 같은 과정을 반복하고, 최종적으로 분리된 문자열의 개수를 반환한다.


📌 접근 방법

문자열을 실제로 자르지 않고, 기준 문자와 카운트 변수만 사용해서 처리한다.

현재 기준 문자를 c에 저장한다.

char c = s.charAt(0);

기준 문자와 같은 문자는 same, 다른 문자는 diff에 카운트한다.

if (c == s.charAt(i)) {
    same++;
} else {
    diff++;
}

두 개수가 같아지면 문자열 하나를 분리한 것이므로 answer를 증가시킨다.

if (same == diff) {
    answer++;
}

분리 후에는 다음 문자가 새로운 문자열의 첫 글자가 되므로, 다음 문자가 존재할 때만 기준 문자를 변경한다.

if (i + 1 < s.length()) {
    c = s.charAt(i + 1);
}

📌 핵심 아이디어

1. 기준 문자는 현재 남은 문자열의 첫 글자

처음에는 문자열의 첫 글자를 기준 문자로 사용한다.

char c = s.charAt(0);

예를 들어 "banana"의 경우 처음 기준 문자는 b이다.

banana
^
c = b

b와 같은 문자의 개수, b와 다른 문자의 개수를 세다가 두 개수가 같아지면 분리한다.

ba | nana

이후 남은 문자열 "nana"의 첫 글자인 n이 새로운 기준 문자가 된다.


2. same과 diff가 같아지면 분리

기준 문자와 같으면 same, 다르면 diff를 증가시킨다.

if (c == s.charAt(i)) {
    same++;
} else {
    diff++;
}

그리고 두 값이 같아지는 순간 문자열 하나가 완성된다.

if (same == diff) {
    answer++;
    same = 0;
    diff = 0;
}

예를 들어 "banana"는 다음과 같이 분리된다.

ba
na
na

따라서 결과는 3이다.


3. 마지막에 남은 문자열 처리

문자열을 끝까지 읽었는데 same과 diff가 같아지지 않은 경우도 하나의 문자열로 분리해야 한다.

따라서 반복문이 끝난 뒤 남은 카운트가 있는지 확인한다.

if (diff != 0 || same != 0) {
    answer++;
}

예를 들어 "a"처럼 한 글자만 있는 경우에도 하나의 문자열로 세어야 한다.


📌 전체 코드

package level1;

public class No53 {
    class Solution {
        public int solution(String s) {
            char c = s.charAt(0);
            int same = 0;
            int diff = 0;
            int answer = 0;

            for(int i = 0; i < s.length(); i++){
                if (c == s.charAt(i)){
                    same++;
                } else {
                    diff++;
                }

                if(same == diff){
                    answer++;

                    if(i + 1 < s.length()){
                        c = s.charAt(i + 1);
                    }
                    same = 0;
                    diff = 0;
                }
            }

            if(diff != 0 || same != 0){
                answer++;
            }

            return answer;
        }
    }
}

📄 정리

  • 기준 문자는 현재 남은 문자열의 첫 글자이다.
  • 기준 문자와 같은 문자는 same, 다른 문자는 diff로 카운트한다.
  • same == diff가 되는 순간 문자열 하나를 분리한다.
  • 마지막에 남은 문자열이 있으면 결과 개수에 포함해야 한다.
  • 문자열을 직접 자르지 않고 카운트만으로 해결할 수 있는 구현 문제이다.
728x90

'코테(Solved.ac + Programmers)' 카테고리의 다른 글

프로그래머스 옹알이 JAVA 풀이(문자열, 구현)  (0) 2026.06.10
프로그래머스 시험장 나누기 JAVA 풀이 (이분 탐색, DFS, 트리)  (0) 2026.06.10
프로그래머스 비밀지도 JAVA 풀이 (비트연산, 문자열 변환)  (0) 2026.06.09
프로그래머스 모의고사 JAVA 풀이 (완전탐색)  (0) 2026.06.06
프로그래머스 명예의 전당 (1) JAVA 풀이 (우선순위 큐, PriorityQueue)  (0) 2026.06.05
'코테(Solved.ac + Programmers)' 카테고리의 다른 글
  • 프로그래머스 옹알이 JAVA 풀이(문자열, 구현)
  • 프로그래머스 시험장 나누기 JAVA 풀이 (이분 탐색, DFS, 트리)
  • 프로그래머스 비밀지도 JAVA 풀이 (비트연산, 문자열 변환)
  • 프로그래머스 모의고사 JAVA 풀이 (완전탐색)
PUSH → MERGE → DEPLOY
PUSH → MERGE → DEPLOY
데이터 흐름과 운영 자동화를 설계하는 백엔드 개발자
  • PUSH → MERGE → DEPLOY
    Coding Dongin
    PUSH → MERGE → DEPLOY
  • 전체
    오늘
    어제
    • MEUN
      • 코테(Solved.ac + Programmers)
      • BootCamp(JAVA)
      • JAVA
      • SpringBoot
      • JavaScript
      • JSP
      • DB(SQL)
      • React
      • HTML_CSS
      • jQuery
      • SCSS
      • GSAP
      • 설치 + 꿀팁
      • 정보처리기사 오답노트
      • 정보처리기사 기출문제
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • GIT
  • 공지사항

  • 인기 글

  • 태그

    java
    배열
    브루트포스
    level1
    실기
    백준
    구현
    기출문제
    피보나치
    알고리즘
    level0
    정처기오답노트
    Level2
    정보처리기사 실기 기출문제
    정보처리기사
    정처기
    자바
    백엔드개발자
    완전탐색
    문자열
    dp
    코딩테스트
    정렬
    springboot
    프로그래머스
    수학
    solved.ac
    시뮬레이션
    정처기실기
    자료구조
  • 최근 댓글

  • 최근 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.4
PUSH → MERGE → DEPLOY
프로그래머스 문자열 나누기 JAVA 풀이 (문자열, 구현)
상단으로

티스토리툴바