문제 링크
주의사항
- 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();
}
}
'백준' 카테고리의 다른 글
[백준] 알고리즘 분류(그리디 알고리즘,JAVA)2828번, 사과 담기 게임 (0) | 2022.11.28 |
---|---|
[백준] 알고리즘 분류(그리디 알고리즘,JAVA)16435번, 스네이크버드 (0) | 2022.11.28 |
[백준] 알고리즘 분류(그리디 알고리즘,JAVA)14659번, 한조서열정리하고옴ㅋㅋ (0) | 2022.11.26 |
[백준] 알고리즘 분류(그리디 알고리즘,JAVA)13904번, 과제 (0) | 2022.11.25 |
[백준] 알고리즘 분류(그리디 알고리즘,JAVA)11501번, 주식 (2) | 2022.11.24 |
댓글