- Today
- Yesterday
- Total
메이쁘
(JAVA) 백준 2810번 : 컵홀더 본문
https://www.acmicpc.net/problem/2810
문자열 처리 관련 문제이다.
이 문제도 크게 어려움은 없다.
문제에서 알아둬야 할 것들은
이 부분이다.
1) 양 끝 좌석에는 컵홀더가 하나씩 존재한다.
2) 커플석(L)은 항상 그 사이에 컵홀더 존재X
3) 좌석의 양 쪽(왼쪽, 오른쪽) 에는 컵홀더가 존재 = 인접한 좌석 사이에 컵홀더가 존재
4) 자기 자신의 좌석 양 옆에 있는 컵홀더에만 컵을 놓을 수 있다.
바로 매커니즘으로 넘어가겠다.
매커니즘
1. 좌석이 n개일 때, [n+1] boolean 배열 생성한다.
** 가장 왼쪽에 한 개의 컵홀더가 더 있으므로 n+1 이다.
** 좌석의 index는 0 ~ n - 1 이라면 컵홀더의 index는 0 ~ n이 된다.
** 이 때, True : 컵홀더 사용중 또는 컵홀더 사용 불가능(커플석) / False : 컵홀더 미사용
2. for문으로 좌석의 처음부터 끝까지 탐색한다.
2 - 1. 별도의 boolean 변수를 만들어서 해당 좌석이 커플석인지, 커플석 한 쌍 중 첫 번째 좌석에 해당하는지를 체크한다.
2 - 2. 따라서, 해당 좌석이 커플석이고, 아직 2 - 1의 boolean 변수 값이 false인 경우 오른쪽(index + 1)의 컵홀더를 제거한다. (boolean 배열의 해당 index의 값을 false로 바꾸기)
2 - 3. index(왼) , index + 1(오) 에 해당하는 boolean 배열의 T/F 값을 보고 그에 맞게 컵을 넣는다.
*** 왼쪽에 한 개의 컵홀더가 더 존재하기 때문에 우선순위를 왼쪽으로 둔다.
*** 그래서 먼저 왼쪽 컵홀더가 비어있으면 컵을 집어넣고, 컵이 있으면 오른쪽 컵홀더를 본다.
*** 양 쪽 컵홀더가 차있으면 다음 사람으로 넘어간다.
2 - 4. 컵을 넣는 순간 count
감사합니다.
소스코드
'Algorithm > Baekjoon' 카테고리의 다른 글
(JAVA) 백준 1439번 : 뒤집기 (0) | 2020.05.22 |
---|---|
(JAVA) 백준 1509번 : 팰린드롬 분할 (1) | 2020.05.22 |
(JAVA) 백준 11586번 : 지영 공주님의 마법 거울 (0) | 2020.05.19 |
(JAVA) 백준 14502번 : 연구소 (0) | 2020.05.16 |
(JAVA) 백준 17837번 : 새로운 게임 2 (0) | 2020.05.09 |