IT 기획의 길

백준 14720번 우유 축제 [JAVA] 본문

알고리즘(백준)/그리디

백준 14720번 우유 축제 [JAVA]

완벽하기 쉽지 않지만 완벽해지려고 노력해야 한다 2020. 12. 28. 22:37

문제

영학이는 딸기우유, 초코우유, 바나나우유를 좋아한다.

입맛이 매우 까다로운 영학이는 자신만의 우유를 마시는 규칙이 있다.

  1. 맨 처음에는 딸기우유를 한 팩 마신다.
  2. 딸기우유를 한 팩 마신 후에는 초코우유를 한 팩 마신다.
  3. 초코우유를 한 팩 마신 후에는 바나나우유를 한 팩 마신다.
  4. 바나나우유를 한 팩 마신 후에는 딸기우유를 한 팩 마신다. 

영학이는 우유 축제가 열리고 있는 우유거리에 왔다. 우유 거리에는 우유 가게들이 일렬로 늘어서 있다.

영학이는 우유 거리의 시작부터 끝까지 걸으면서 우유를 사먹고자 한다.

각각의 우유 가게는 딸기, 초코, 바나나 중 한 종류의 우유만을 취급한다.

각각의 우유 가게 앞에서, 영학이는 우유를 사마시거나, 사마시지 않는다.

우유거리에는 사람이 많기 때문에 한 번 지나친 우유 가게에는 다시 갈 수 없다.

영학이가 마실 수 있는 우유의 최대 개수를 구하여라.

입력

첫째 줄에 우유 가게의 수 N이 주어진다. (1 ≤ N ≤ 1000)

둘째 줄에는 우유 가게 정보가 우유 거리의 시작부터 끝까지 순서대로 N개의 정수로 주어진다.

0은 딸기우유만을 파는 가게, 1은 초코우유만을 파는 가게, 2는 바나나우유만을 파는 가게를 뜻하며, 0, 1, 2 외의 정수는 주어지지 않는다.

출력

영학이가 마실 수 있는 우유의 최대 개수를 출력하시오.

 

 

 

 

알고리즘 설계:

 

1. 영학이는 딸기우유->초코우유->바나나우유->딸기우유 순으로밖에 우유를 못먹는다 

 

2. 딸기 우유만 파는 가게가 0 초코우유만 파는 가게가 1 바나나우유만 파는 가게가 2이므로

영학이는 가게를 들를때 0->1->2순으로 들러야지 우유를 먹을수 있다 

물론 중간에 다른 가게를 들를수는 있다

 

3.

영학이가 0가게에 들르면 다음에  1가게를 들를때 우유를 먹을 수 있다

그러므로 next=1을 이용하여 다음에 1가게를 들러야지 우유를 먹을 수 있게 설정해놓는다

영학이가 1가게에 들르면 다음에  2가게를 들를때 우유를 먹을 수 있다

그러므로 next=2를 이용하여 다음에 2가게를 들러야지 우유를 먹을 수 있게 설정해놓는다

영학이가 2가게를 들르면 다음에  0가게를 들를때 우유를 먹을 수 있다

그러므로 next=3를 이용하여 다음에 3가게를 들러야지 우유를 먹을 수 있게 설정해놓는다

 

4. 그리고 영학이는 가장 먼저 딸기우유를 먹어야지 우유먹방을 시작할 수 있다

그러므로 처음에 next를 0으로 초기화 시켜놓는다

딸기우유가게에 도착하면 우유먹방이 시작된다 

 

import java.util.*;

public class Main {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		int N = scan.nextInt(); // 우유 가게 수
		int[] line = new int[N]; // 우유 가게 수 만큼 배열 생성
		int count = 0; // 최대 먹을수 있는 우유 개수
		int next = 0; // 다음으로 먹을 수 있는 우유 종류
		// 처음으로 먹을수 있는 우유는 딸기우유이므로 0으로 초기화해놓음
		for (int i = 0; i < line.length; i++) {
			line[i] = scan.nextInt();// 가게마다 파는 우유 종류 입력 0=딸기우유 1=초코우유 2=바나나우유
		}

		for (int i = 0; i < line.length; i++) {
			if (line[i] == next && next == 0) {
				count++;
				next = 1;
				continue;
			}
			if (line[i] == next && next == 1) {
				count++;
				next = 2;
				continue;
			}
			if (line[i] == next && next == 2) {
				count++;
				next = 0;
				continue;
			}

		}

		System.out.println(count);

	}
}

'알고리즘(백준) > 그리디' 카테고리의 다른 글

백준 2839번 설탕배달 [JAVA]  (0) 2020.12.28
백준 1439번 뒤집기 [JAVA]  (0) 2020.12.27
백준 1138번 한 줄로 서기 [JAVA]  (0) 2020.12.27