Algorithm & SQL/BOJ

[백준 15831번 / Java] BOJ 15831 : 준표의 조약돌(투 포인터)

김룹 2024. 3. 8. 14:46

 

 

15831번: 준표의 조약돌

첫 줄에 조약돌의 총 개수 N, 준표가 원하는 검은 조약돌의 최대개수 B와 하얀 조약돌의 최소개수 W가 주어진다. 둘째 줄에는 N개의 조약돌의 정보가 한 줄로 주어진다. i번째 문자가 B라면 i번 조

www.acmicpc.net

 

 

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

public class Main {
    public int solution(int N, int B, int W, char[] arr) {
        int lt = 0, rt = 0; // 왼쪽 포인터, 오른쪽 포인터
        int max = 0;
        int[] stone = new int[2]; // stone[0] = W의 개수, stone[1] = B의 개수

        while(rt < N) {
            // 현재 rt 위치의 돌 추가
            if(arr[rt] == 'B') stone[1]++;
            else stone[0]++;

            // B의 개수가 문제에서 입력받은 B개를 넘어서면
            // 가장 왼쪽에 있던 돌을 빼면서 왼쪽 포인터를 증가
            if(B < stone[1]) {
                if(arr[lt] == 'B') stone[1]--;
                else stone[0]--;
                lt++;
            }
            // W돌의 개수가 입력받은 W개 이상이 되면 최댓값 갱신 
            if(stone[0] >= W) max = Math.max(max, rt - lt + 1);
            rt++; // 오른쪽 포인터 이동
        }
        return max;
    }

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        Main T = new Main();

        int N = Integer.parseInt(st.nextToken());
        int B = Integer.parseInt(st.nextToken());
        int W = Integer.parseInt(st.nextToken());

        char[] arr = br.readLine().toCharArray();

        System.out.println(T.solution(N, B, W, arr));
    }
}

 

 

느낀 점 및 정리 ✍️

1. 코딩테스트 대비하고자 프로그래머스 제출 형식에 맞춰 solution 메소드를 생성하여 코드를 작성했다.

2. 첫 제출에서는 14%에서 틀렸습니다가 떴었고 두 번째 제출에서 맞았다. 왜 처음부터 완벽하게 못맞추는거니............!!!!!!!!!!!!!!!!!!! 주어진 테스트 케이스 2개만 통과하면 그냥 제출해보는 안좋은.. 습관이 .. ^^ ㅎ 코테때 시간도 촉박할텐데 걱정이당 😓

3. 오른쪽 포인터를 증가시키면서 해당 자리에 있는 돌의 개수를 세어주었다. 그러다가 입력받은 B 숫자보다 검정돌이 많아질 경우, 가장 왼쪽에 있는 돌을 하나 빼고 왼쪽 포인터의 위치를 우측으로 옮겨준다. 가지고 있는 흰색 돌의 개수가 입력받은 W 숫자 이상일 경우, 최댓값을 갱신해주는 방식으로 풀었다.