문제 링크
접근 방법
이 문제에 핵심
1. N개의 햄버거 재료가 주어지며 각각이 맛의 정도를 가지고 있습니다.
2. 완벽한 햄버거를 만들기 위해서 가장 높은 재료를 기준으로 위랑 아래가 맛의 정도가 감소하거나 같아야합니다.
3. 완벽한 햄버거를 만들 때는 모든 재료 맛의 합을 결과로 출력합니다.
4. 완벽한 햄버거를 만들지 못할 때 0을 결과로 출력합니다.
알고리즘 진행 순서.
1. 입력된 정보를 저장합니다.
2. 가장 맛의 정도가 높은 재료를 기준으로 상, 하를 탐색합니다.
3. 탐색한 상황에 따른 결과를 출력합니다.
구현
N개의 재료를 받으면서 맛의 정도가 가장 높은 재료를 구합니다.
해당 재료를 기준으로 위와 아래로 탐색하며 큰 재료가 나오는 지 확인합니다,
큰 재료가 나온 경우 : 0을 결과로 출력
큰 재료가 나오지 않은 경우 : 모든 재료 맛의 합을 결과로 출력
예제입력 1.
1. 입력된 정보를 저장합니다.
N : 5
1 | 2 | 3 | 3 | 1 |
가장 큰 값 |
2. 가장 맛의 정도가 높은 재료를 기준으로 상, 하를 탐색합니다.
1 | 2 | 3 | 3 | 1 |
1 < 2 | 2 < 3 | 가장 큰 값 | 3 == 3 | 3 > 1 |
3. 탐색한 상황에 따른 결과를 출력합니다.
더 큰 값이 존재하지 않기 때문에 모든 재료 맛의 합을 결과로 출력합니다.
1 + 2 + 3 + 3 + 1 = 10
10을 결과로 출력합니다.
- BufferedReader를 사용하여 입력되는 정보를 저장합니다.
- StringTokenizer를 이용하여 맛의 정도를 띄어쓰기 기준 나눕니다.
- N개의 재료를 저장할 때 최대값과 최대값의 인덱스를 구합니다.
- 최대값 인덱스를 기준으로 위, 아래로 조건에 맞게 탐색을 진행합니다.
- 완벽한 햄버거가 아닌 경우 0, 완벽할 경우 맛의 모든 합을 BufferedWriter에 저장합니다.
- BufferedWriter에 저장된 결과를 출력합니다.
결과코드
import java.io.*;
import java.util.*;
class Main {
public static void main(String[] args) throws Exception {
//입력값을 처리하는 BufferedReader
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//결과값을 출력하는 BufferedWriter
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int N = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine());
int max = -1;
int max_idx = -1;
int[] tastes = new int[N];
//입력값 저장 및 최대값과 최대값 인덱스 얻기
for(int i=0;i<N;i++){
tastes[i] = Integer.parseInt(st.nextToken());
if(tastes[i] > max){
max = tastes[i];
max_idx = i;
}
}
boolean flag = false;
//최대값 인덱스를 기준으로 위, 아래로 탐색 진행
//아래 탐색
for(int i=max_idx;i>0;i--){
//탐색하던 중 더 큰 값 찾았을 때 탐색 종료
if(tastes[i] < tastes[i-1]){
flag = true;
break;
}
}
if(!flag){
//위 탐색
for(int i=max_idx;i<N-1;i++){
//탐색하던 중 더 큰 값 찾았을 때 탐색 종료
if(tastes[i] < tastes[i+1]){
flag = true;
break;
}
}
}
if(flag){ //완벽한 햄버거가 아닌 경우
bw.write("0");
}else{ //완벽한 햄버거인 경우
int sum = 0;
//맛의 합 구하기
for(int i=0;i<N;i++){
sum += tastes[i];
}
bw.write(String.valueOf(sum));
}
bw.flush(); //결과 출력
bw.close();
br.close();
}
}
느낀 점
문제를 처음 읽었을 때 독해력이 부족한지 무슨 말인지 이해를 하지 못하였습니다.
문제를 읽고 이해하는 독해력의 중요성을 깨닫게 되었습니다.
'구름톤' 카테고리의 다른 글
[구름톤 챌린지, Java] 6일차, 문자열 나누기(완전 탐색) (0) | 2023.08.21 |
---|---|
[구름톤 챌린지, Java] 5일차, 이진수 정렬(구현, 정렬) (0) | 2023.08.18 |
[구름톤 챌린지, Java] 3일차, 합계산기(구현) (0) | 2023.08.17 |
[구름톤 챌린지, Java] 2일차, 프로젝트 매니징(구현) (0) | 2023.08.15 |
[구름톤 챌린지, Java] 1일차, 운동 중독 플레이어(구현) (0) | 2023.08.14 |
댓글