[백준/17615] 볼 모으기- JAVA

이지환·2025년 9월 2일

알고리즘(백준) 💻

목록 보기
78/80
post-thumbnail

📌 문제

알고리즘 분류 : 그리디
난이도 : 실버1
출처 : 백준 - 볼 모으기

🦧 문제 풀이 접근

정답이 될 수 있는 경우는 4가지이다.
R을 왼쪽으로 모으는 경우, R을 오른쪽으로 모으는 경우, B을 왼쪽으로 모으는 경우, B을 오른쪽으로 모으는 경우
전체 공 갯수를 계산한 후 앞에서부터 다시 공 갯수를 카운트 한다.
이때 R혹은 B가 전부 카운트 됬을때의 공 갯수를 구한다.
반대로 카운트했을때도 계산한다.
4개의 값 중 가장 작은 값이 답이다.

💻 code

import java.util.*;
import java.io.*;
public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());
        String line = br.readLine();
        int min;
        int rCnt = 0, bCnt=0;
        for(int i=0;i<N;i++) {
            if(line.charAt(i)=='R')rCnt++;
            else bCnt++;
        }
        int currentRCnt = 0, currentBCnt = 0;
        for(int i=0;i<N;i++) {
            if(line.charAt(i)=='R')currentRCnt++;
            else currentBCnt++;
            if(currentBCnt==bCnt || currentRCnt == rCnt)
                break;
        }
        min = Integer.min(currentRCnt, currentBCnt);
        currentRCnt = 0;
        currentBCnt =0;

        for(int i=N-1;i>=0;i--) {
            if(line.charAt(i)=='R')currentRCnt++;
            else currentBCnt++;
            if(currentBCnt==bCnt || currentRCnt == rCnt)
                break;
        }
        min = Integer.min(min , Integer.min(currentRCnt, currentBCnt));
        System.out.println(min);
    }
}

🥇 결과

🎓 느낀점

모든 경우를 전부 구하는 방식으로 계산했다. 반복문이 크지 않아서 정답을 구할 수 있었다.

profile
takeitEasy

0개의 댓글