본문 바로가기

알고리즘(백준 등) 공부

SWEA 12222. 문자열 나누기

주어진 문자열을 나누어 나누어진 문자열들이 인접한 문자열과 다르게 할 때 나누어진 문자열의 갯수를 구하는 문제이다.

 

문자열을 길이 1, 2로만 나누어 최대한 많이 나누게 한다. 일단 길이 1 만큼 잘라낸 후, 다음 문자열과 같으면 길이 2 만큼 자르고 다르면 1 만큼 잘라준다. 앞의 문자열의 길이가 2면 무조건 뒤의 문자열을 길이 1 만큼 잘라낸다. 마지막에 남은 문자가 이전 문자열과 같아서 독립적인 부분으로 만들 수 없다면, 이전 문자열에 이어 붙인다고 생각하고 버린다.

int n = s.length();
int ans = 0;
int i = 0;
            
int prevLen = 0; 
char prevC1 = 0; 
            
while (i < n) {
    if (prevLen != 1 || s.charAt(i) != prevC1) {
        prevLen = 1;
        prevC1 = s.charAt(i);
        ans++;
        i++;
    } else if (i + 1 < n) {
        prevLen = 2;
        ans++;
        i += 2;
    } else break;
}
            
sb.append(ans).append("\n");

 

 

결과 코드는 다음과 같다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Solution {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int T = Integer.parseInt(br.readLine());
        StringBuilder sb = new StringBuilder();

        for (int tc = 1; tc <= T; tc++) {
            sb.append('#').append(tc).append(' ');
            String s = br.readLine().trim();
            int n = s.length();
            int ans = 0;
            int i = 0;
            
            int prevLen = 0; 
            char prevC1 = 0; 
            
            while (i < n) {
                if (prevLen != 1 || s.charAt(i) != prevC1) {
                    prevLen = 1;
                    prevC1 = s.charAt(i);
                    ans++;
                    i++;
                } else if (i + 1 < n) {
                    prevLen = 2;
                    ans++;
                    i += 2;
                } else break;
            }
            
            sb.append(ans).append("\n");
        }
        
        br.close();
        System.out.print(sb);
    }
}

'알고리즘(백준 등) 공부' 카테고리의 다른 글

SWEA 12051. 프리셀 통계  (0) 2026.05.26
SWEA 12052. 부서진 타일  (0) 2026.05.26
SWEA 12368. 24시간  (0) 2026.05.22
SWEA 12369. 일련번호 붙이기  (0) 2026.05.22
SWEA 12741. 두 전구  (0) 2026.05.21