본문 바로가기
백준

[백준] 알고리즘 분류(그리디 알고리즘,JAVA)14720번, 우유 축제

by 열정적인 이찬형 2022. 11. 26.

문제 링크

 

14720번: 우유 축제

영학이는 딸기우유, 초코우유, 바나나우유를 좋아한다. 입맛이 매우 까다로운 영학이는 자신만의 우유를 마시는 규칙이 있다. 맨 처음에는 딸기우유를 한 팩 마신다. 딸기우유를 한 팩 마신 후

www.acmicpc.net


주의사항

  • JAVA를 사용하여 프로그램을 사용하였습니다.
  • 백준에서 코드를 작성하였을 때 아래 형태에서 Main에서 결과가 출력되어야 합니다.
public class Main{ 	
	public static void main(String[] args){
    }
}

문제 설명


접근 방법

이 문제에 핵심

 

1. 영학이는 우유를 먹는 순서가 존재합니다. 딸기초코 바나나

2. 지나간 우유 가게에는 다시 갈 수 없습니다.

3. 시작부터 끝까지 우유 가게를 지났을 때 먹은 우유의 최대 개수를 결과로 출력합니다.

 

알고리즘 진행 순서.

 

1. 입력된 정보를 저장합니다.

 

2. 각 가게를 방문하며 우유 먹는 순서대로 먹습니다.

 

3. 먹은 우유의 개수를 결과로 출력합니다.

 

 

우유 먹기

 
 
0 : 딸기 우유
 
1 : 초코 우유
 
2 : 바나나 우유
 
우유를 먹는 순서
 
0(딸기 우유) 1(초코 우유) 2(바나나 우유) 0(딸기 우유)....
 
각 가게를 지나가면서 현재 먹을 수 있는 우유이면 먹고 아니면 지나치는 것을 반복하여 우유를 최대한 먹습니다.
 

예제입력 1.

 

1. 입력된 정보를 저장합니다.

 

N = 7

 

가게 정보

  가게 1  가게 2 가게 3 가게 4 가게 5 가게 6 가게 7
우유 정보 딸기 우유 초코 우유  바나나 우유 딸기 우유 초코 우유 바나나 우유 딸기 우유

 

2. 각 가게를 방문하며 우유 먹는 순서대로 먹습니다.

 

각 가게 방문하여 우유 먹기!
 
  가게 1  가게 2 가게 3 가게 4 가게 5 가게 6 가게 7
우유 정보 딸기 우유 초코 우유  바나나 우유 딸기 우유 초코 우유 바나나 우유 딸기 우유

현재 먹어야할 우유 : 딸기 우유

가게 1에서 딸기 우유 섭취!

 

  가게 1  가게 2 가게 3 가게 4 가게 5 가게 6 가게 7
우유 정보 딸기 우유 초코 우유  바나나 우유 딸기 우유 초코 우유 바나나 우유 딸기 우유

현재 먹어야할 우유 : 초코 우유

가게 2에서 초코 우유 섭취!

 

  가게 1  가게 2 가게 3 가게 4 가게 5 가게 6 가게 7
우유 정보 딸기 우유 초코 우유  바나나 우유 딸기 우유 초코 우유 바나나 우유 딸기 우유

현재 먹어야할 우유 : 바나나 우유

가게 3에서 바나나 우유 섭취!

 

  가게 1  가게 2 가게 3 가게 4 가게 5 가게 6 가게 7
우유 정보 딸기 우유 초코 우유  바나나 우유 딸기 우유 초코 우유 바나나 우유 딸기 우유

현재 먹어야할 우유 : 딸기 우유

가게 4에서 딸기 우유 섭취!

 

  가게 1  가게 2 가게 3 가게 4 가게 5 가게 6 가게 7
우유 정보 딸기 우유 초코 우유  바나나 우유 딸기 우유 초코 우유 바나나 우유 딸기 우유

현재 먹어야할 우유 : 초코 우유

가게 5에서 초코 우유 섭취!

 

  가게 1  가게 2 가게 3 가게 4 가게 5 가게 6 가게 7
우유 정보 딸기 우유 초코 우유  바나나 우유 딸기 우유 초코 우유 바나나 우유 딸기 우유

현재 먹어야할 우유 : 바나나 우유

가게 6에서 바나나 우유 섭취!

 

  가게 1  가게 2 가게 3 가게 4 가게 5 가게 6 가게 7
우유 정보 딸기 우유 초코 우유  바나나 우유 딸기 우유 초코 우유 바나나 우유 딸기 우유

현재 먹어야할 우유 : 딸기 우유

가게 7에서 딸기 우유 섭취!

 

3. 먹은 우유의 개수를 결과로 출력합니다.

먹은 우유

 

0(딸기 우유)  1(초코 우유)  2(바나나 우유)  0(딸기 우유)  1(초코 우유)  2(바나나 우유) 0(딸기 우유)

 
7을 결과로 출력합니다.

 

  • BufferedReader를 사용하여 입력되는 정보를 저장합니다.
  • StringTokenizer를 이용하여 가게 정보를 띄어쓰기 기준 나누었습니다.
  • 우유 먹는 순서와 가게 정보에 따라 순서대로 탐색을 진행합니다.
  • 가게에서 우유를 먹었을 때 삼항연산자를 이용하여 다음 먹을 우유로 변경합니다.
  • 모든 가게를 방문한 뒤 먹은 우유의 개수를 결과로 BufferedWriter 저장하였습니다.
  • BufferedWriter에 저장된 결과값을 출력하였습니다.

 

import java.io.*;
import java.util.*;

public class Main{
    public static void main(String[] args) throws IOException {
        //입력값 처리하는 BufferedReader
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        //결과값 출력하는 BufferedWriter
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        int N = Integer.parseInt(br.readLine());
        int milk = 0;
        int answer = 0;
        StringTokenizer st = new StringTokenizer(br.readLine()," ");
        //각 가게 방문!
        for(int i=0;i<N;i++){
            int n = Integer.parseInt(st.nextToken());
            if(milk == n){	//지금 먹을 우유와 같으면 먹기!
                //다음 먹을 우유로 변경!
                milk = milk + 1 == 3 ? 0 : milk + 1;
                answer++;	//우유 먹은 횟수 증가
            }
        }
        bw.write(answer +"");	//우유 먹은 횟수 BufferedWriter 저장
        bw.flush();		//결과 출력
        bw.close();
        br.close();

    }
}

댓글