CodeClover

[JAVA] 백준_2810 컵홀더 본문

코딩테스트

[JAVA] 백준_2810 컵홀더

coding dew 2025. 4. 21. 16:13

https://www.acmicpc.net/problem/2810

📌 문제 탐색하기

혼자 앉는 일반좌석 S
두 좌석이 하나의 팔걸이는 공유하는 LL 커플석
커플석 LL의 경우 두 사람이 하나의 컵홀더를 공유하기 때문에 L 두개당 컵홀더 하나만 추가된다.

좌석의 수, 정보의 입력값을 보고 해당 좌석들에서 이용 가능한 총 컵홀더의 개수를 출력하는 문제이다.

📌 가능한 시간복잡도

입력받은 좌석의 개수 N의 문자열 길이를 한번 순회하면서 일반좌석과 커플좌석을 구분하고 커프좌석이 나타나면 인덱스를 한번 더 넘기는 방식으로 진행한다. 각각 문자를 한번씩 확인하기 때문에 O(N) 이라고 생각함.
따라서 가능한 시간복잡도는 O(N)입니다.     

📌 코드 설계하기

일반좌석은 좌우에 컵홀더가 하나씩 있고, 커플석은 두 좌석에 하나의 컵홀더가 있음. 
따라서 컵 홀더의 개수를 구할때, 일반좌석의 숫자만큼 컵 홀더 +1 , 커플좌석은 연속된 두개가 하나의 세트이니까 한 쌍의 커플 좌석당 컵홀더 +1이다. 따라서 컵홀더의 개수 = 일반좌석의 개수 + 커플석(2인)의 수 +1 이다. 

좌석의 수에서 커플석을 빼면 컵홀더 하나가 모자라기 때문에 +1 을 반드시 처리해야 정확한 총 컵홀더의 수가 출력됨
=> 이 부분에서 틀림.

📌 정답 코드

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 seats = br.readLine();   
        
        int coupleCount = 0;

        for (int i = 0; i < seats.length() - 1; i++) {
            if (seats.charAt(i) == 'L' && seats.charAt(i + 1) == 'L') {
                coupleCount++;
                i++;
            }
        }
        int cupHolders = N - coupleCount + 1;
        System.out.println(Math.min(N, cupHolders));
    }
}