https://www.acmicpc.net/problem/2810
- 문제
- 문제 풀이
백준 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);
}
}
'백준' 카테고리의 다른 글
[백준] 11047번 : 동전 0 – JAVA [자바] (0) | 2022.12.02 |
---|---|
[백준] 14487번 : 욱제는 효도쟁이야!! – JAVA [자바] (0) | 2022.11.18 |
[백준] 2720번 : 세탁소 사장 동혁 – JAVA [자바] (0) | 2022.11.17 |
[백준] 9093번 : 단어 뒤집기 – JAVA [자바] (0) | 2022.09.17 |
[백준] 1977번 : 완전제곱수 – JAVA [자바] (0) | 2022.09.12 |
댓글