
하루 한개씩 꾸준히 알고리즘을 문제를 풀면서 조금씩 공부하는게 목표이다.



내가 생각했을때 문제에서 원하는부분
극장의 한 줄에는 자리가 N개가 있다.
로 인접한 좌석 사이에는 컵홀더가 하나씩 있고, 양 끝 좌석에는 컵홀더가 하나씩 더 있다. 또,
이 극장에는 커플석이 있다. 커플석 사이에는 컵홀더가 없다.
극장의 한 줄의 정보가 주어진다. 이때, 이 줄에 사람들이 모두 앉았을 때,
컵홀더에 컵을 꽂을 수 있는 최대 사람의 수를 구하는 프로그램을 작성하시오.
사람은 컵을 한 개만 들고 있고, 자신의 좌석의 양 옆에 있는 컵홀더에만 컵을 꽂을 수 있다.
S는 일반 좌석, L은 커플석을 의미하며, L은 항상 두개씩 쌍으로 주어진다.
어떤 좌석의 배치가 SLLLLSSLL일때, 컵홀더를 *로 표시하면 아래와 같다.
*S*LL*LL*S*S*LL*
위의 예에서 적어도 두 명은 컵홀더를 사용할 수 없다.
내가 이 문제를 보고 생각해본 부분
손님 모두가 s면 s를 출력하면 된다.
만약 l이 껴있으면 (s+(l/2))+1 와 같은 수식을 넣으면 된다.
왼쪽 * 부터 사람 하나를 차지한다 생각하고 커플이나오면 2명중 1명만 쓸수있으니 l/2 해주고
가장 오른쪽의 * 하나가 남으니 1 더해주면 된다.
코드로 구현
package baekjoon.baekjoon_18;
import java.io.BufferedReader;
import java.io.InputStreamReader;
// 백준 2810번 문제
public class Main650 {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int temp = Integer.parseInt(br.readLine());
String[] str = br.readLine().split("");
int l = 0;
int s = 0;
for(int i = 0; i < str.length; i++) {
if(str[i].equals("S"))
s++;
else
l++;
}
if(s == temp) {
System.out.println(temp);
}
else
System.out.println((s+(l/2))+1);
br.close();
}
}
시간복잡도 O(N)
장점
입력 데이터 크기가 커져도 증가하는 시간만 소요하기 때문에 처리 속도가 빠르다.
구현한 코드가 간결해서 이해하기에 어렵지 않다.
단점
데이터 크기가 커지면 커질수록 연산하는데 시간이 오래 걸린다.

문제를 한개씩 풀면서 내가 몰랐던 부분을 조금씩 채워나가면서 성취감을 느낄 수 있었던것같다. 아직 문제를 많이 푼건 아니지만 공부해나가면서 조금 더 풀기 쉽게 구현하고싶다.