코딩테스트/SWEA

[SWEA 1289번] 원재의 메모리 복구하기

seung_ho_choi.s 2025. 5. 6. 21:23
728x90

https://swexpertacademy.com/main/code/problem/problemDetail.do?problemLevel=3&contestProbId=AV19AcoKI9sCFAZN&categoryId=AV19AcoKI9sCFAZN&categoryType=CODE&problemTitle=&orderBy=RECOMMEND_COUNT&selectCodeLang=JAVA&select-1=3&pageSize=10&pageIndex=1

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

 

import java.io.*;
import java.util.*;

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());

        for (int test = 1; test <= T; test++) {
            String bit = br.readLine();
            int start = 0;
            int end = bit.length();
            int count =0;
            // 초기화
            StringBuilder init = new StringBuilder();
            String repeated = new String(new char[end - start]).replace('\0', '0');
            init.replace(start, end, repeated);



            for (int i = 0; i < bit.length(); i++) {
                start = i;
                if (bit.charAt(i) != init.charAt(i)) {
                    char temp = bit.charAt(i);
                    String repeatedT= new String(new char[end-start]).replace('\0', temp);
                    init.replace(start,end, repeatedT);
                    count++;
                }

                if(bit.contentEquals(init)){
                    System.out.println("#"+test+" "+count);
                    break;
                }
            }


        }
    }
}

 

간단한 문제였지만, 반복적인 for문 사용은 시간 초과의 우려가 있어 replace를 활용하여 해결하였다. 다만 Java 11 이하에서는 StringBuilder의 repeat 기능을 사용할 수 없어 직접 문자열을 생성하는 방식으로 코드를 작성했다.

 

StringBuilder와 String을 비교할 때는 equals()가 아닌 contentEquals() 메서드를 사용하는 것이 정확하다.

728x90