2023년 1월 1일
08:00 AM
Buffering ...

최근 글 👑

백준 18228번 C언어 풀이

2024. 4. 24. 16:52ㆍC_C++
반응형

 

오랜만에 문제를 풀었다.. 차량파손 + 상갓집방문 + 중간고사까지 .. 정말 힘들었던 4월 이였던 거 같다.. 

이랬던 저랬든 문제는 계속 풀어야 하니깐! 

열심히 풀어보자는 마음으로 문제를 풀었다! 무려 3시간이 걸린 문제,,

#include <stdio.h>
#include <stdlib.h>
#include <limits.h> //

int main(){
    int i=0, k, min_value=0, n, min_num = 0;
    scanf("%d",&k); // 얼음의 갯수 입력 받기
    int* ice_arr = (int*)malloc(sizeof(int) * k); // 얼음갯수만큼 동적할당
    for(i=0; i<k; i++){ // 얼음을 꺠기위한 힘 입력받기
        scanf("%d",&ice_arr[i]);
        if(ice_arr[i] == -1){
            n = i; // 펭귄의 위치 저장
        }
    }
    
    // 왼쪽에서 가장 작은 값 찾기
    for(i=0; i<n; i++){
        if(min_num == 0 || ice_arr[i] < min_num){ // 최솟값 갱신
            min_num = ice_arr[i];
        }
    }
    
    // 오른쪽에서 가장 작은 값 찾기
    min_value = INT_MAX; // 최솟값을 가장 큰 값으로 초기화
    for(i = n + 1; i < k; i++) { // 펭귄을 제외하고 오른쪽에서 가장 작은 값 찾기
        if(ice_arr[i] < min_value) {
            min_value = ice_arr[i];
        }
    }
    
    min_value += min_num; // 왼쪽에서 가장 작은 값과 오른쪽에서 가장 작은 값을 더하여 최종 결과 계산
    printf("%d\n", min_value);
    free(ice_arr);
    
    return 0;
}

 

처음에는 조건 설정을 잘 못해서 첫번째 예시는 출력성공이였지만, 두번째는 안되고 또 세번째는 되고 그래서 진짜 대환장파티였다..

다행히 오른쪽에서 가장 작은 값을 찾는 부분에서 조건을 잘못 설정했다는 걸 확인하고 초기 최솟값을 다시 설정해서 비교했다.

진짜.. 브론즈인 나에겐 너무 어려운 문제였던 거 같다!!

고수님들의 코드 조언은 언제나 감사합니다..

반응형