메이쁘

(JAVA) 백준 2810번 : 컵홀더 본문

Algorithm/Baekjoon

(JAVA) 백준 2810번 : 컵홀더

메이쁘 2020. 5. 19. 23:17

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

 

2810번: 컵홀더

문제 십년이면 강산이 변한다. 강산이네 동네에 드디어 극장이 생겼고, 강산이는 극장에 놀러갔다. 매점에서 콜라를 산 뒤, 자리에 앉은 강산이는 큰 혼란에 빠졌다. 양쪽 컵홀더를 이미 옆 사람

www.acmicpc.net

 

 

문자열 처리 관련 문제이다.

 

이 문제도 크게 어려움은 없다.

 

 

문제에서 알아둬야 할 것들은

 

이 부분이다.

 

 

  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

 

 

 

 

 

 

감사합니다.

 

소스코드


 

Comments