본문 바로가기
백준

[백준] 2810번 : 컵홀더 – JAVA [자바]

by Hongwoo 2022. 11. 18.
반응형

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

 

2810번: 컵홀더

첫째 줄에 좌석의 수 N이 주어진다. (1 ≤ N ≤ 50) 둘째 줄에는 좌석의 정보가 주어진다.

www.acmicpc.net

 


  • 문제

 


  • 문제 풀이

백준 2810번 컵홀더는 브론즈 1 난이도의 문자열 및 그리디 문제이다. 이 문제에서는 N개의 좌석 배치가 주어진다. S는 일반 좌석을 뜻하고 L은 커플석을 뜻한다. 그리고 L은 두 개씩 쌍으로 주어지고 좌석 배치가 주어지면 컵홀더에 컵을 꽂을 수 있는 최대 사람의 수를 구하면 된다.

 

우선 예시를 보겠다.

 

EX 1) SSS

첫 번째 예시에는 SSS가 주어졌다. 컵홀더를 놓으면 다음과 같이 놓을 수 있다. *S*S*S*. 따라서 3명 다 컵홀더에 컵을 꽂을 수 있으니 3이 답이 된다.

 

EX 2) SLLS

SLLS의 좌석 배치가 주어졌을 때 다음과 같이 컵홀더를 놓을 수 있다. *S*LL*S*. 따라서 4명이 컵홀더에 컵을 꽂을 수 있으니 4가 답이 된다.

 

EX 3) SLLLLSSLL

SLLLLSSLL의 좌석 배치가 주어졌을 때 다음과 같이 컵홀더를 놓을 수 있다. *S*LL*LL*S*S*LL*. 따라서 7명이 컵홀더에 꽂을 수 있다.

 

이 문제는 다음과 같이 풀었다. 우선 새로운 String형 변수 str을 만들었다. 그리고 for-loop을 이용해서 입력받는 문자열을 보는데 만약에 S이면 str에 "*S*를 추가하고, LL이면 "*LL"을 추가한다. 그리고 마지막에 for-loop이 끝난 후에 str에 "*"추가해준다. 그러면 *S*LL*LL*S*S*LL* 같은 컵홀더를 꽂은 문자열을 만들게 된다.

 

이때, *의 개수를 세기만 하면 된다. 단, *이 문제에서 주어지는 사람의 수 n보다 더 클 수 있으니 n과 *의 개수 중에서 더 작은 값을 출력해주면 된다.

 

자세한 코드는 아래에 있는 코드를 참고하면 되겠다.

 


  • 코드

 

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

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 s = br.readLine();
        String str = "";
        for (int i = 0; i < n; i++) {
            if (s.charAt(i) == 'S') {  //S (일반석이면) * 추가
                str += "*S";
            } else {
                str += "*LL";  //L (커플석이면) 2칸 넘어간 후 * 추가
                i++;
            }
        }
        str += "*";  //마지막 자리에 * 추가
        int count = 0;
        for (int i = 0; i < str.length(); i++) {
            if (str.charAt(i) == '*') count++;
        }
        count = Math.min(count, n);
        System.out.print(count);
    }
}

 

 

반응형

댓글