티스토리 뷰

문제. 

줄을 서 있는 사람의 수 N과 각 사람이 돈을 인출하는데 걸리는 시간 Pi가 주어졌을 때, 각 사람이 돈을 인출하는데 필요한 시간의 합의 최솟값을 구하는 프로그램을 작성하시오.

 

입출력.

첫째 줄에 사람의 수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄에는 각 사람이 돈을 인출하는데 걸리는 시간 Pi가 주어진다. (1 ≤ Pi ≤ 1,000) 그리고 각 사람이 돈을 인출하는데 필요한 시간의 합의 최솟값을 출력한다.

 

방법.

가장 적게 걸리는 시간을 구해야 하니까, 먼저 입력받은 시간을 오름차순으로 정리하고 합계를 구했다.

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

void input(int size, int *arr);     //입력
void sort(int size, int *arr);      //정렬
int result(int size, int *arr);     //결과

int main(void){
    //[문제. 11399] 2021.02.21 
    //입력  5 \n 3 1 4 3 2
    //출력  32

    int size;
    scanf("%d",&size);
    int *arr = (int *)malloc(sizeof(int)*size); //동적 메모리 할당
    
    input(size,arr);    //입력
    sort(size,arr);     //정렬
    printf("%d",result(size,arr));   //결과 출력


    free(arr);          //동적 메모리 해제
    return 0;
}

void input(int size, int *arr){
    for(int i=0; i<size; i++){
        scanf("%d", (arr+i));
    }
    return;
}
void sort(int size, int *arr){
    int temp;
    for(int i=0; i<size-1; i++){
        for(int j=i; j<size; j++){
            if(arr[i]>=arr[j]){
                temp=arr[i];
                arr[i]=arr[j];
                arr[j]=temp;
            }
        }
    }

}
int result(int size, int *arr){
    int sum=0;
    for(int i=0; i<size; i++){
        for(int j=0; j<size; j++){
            sum+=arr[j];
            if(i==j) {break;}
        }
    }
    return sum;
}

 

Insight.

어제 그리디 알고리즘 문제를 푼 김에 그리디 알고리즘 문제들 위주로 풀어볼까 해서 골랐다. 최근에 포인터 공부하고 있어서 포인터랑 동적 메모리를 써봤는데, 아직 개념이 잘 잡혀있지 않아서 그런지 한참을 고민해서 풀었다. 아 계속 자정 넘어서 업로드해가지고 애매한데 이건 일요일에 풀었던 문제인 걸로!

그리고 커밋을 하는데 계속 에러 뜨고 해서 그냥 저장소를 새로 파서 어제 풀었던 문제도 다시 올렸다.

 

 

 

 

11399번: ATM

첫째 줄에 사람의 수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄에는 각 사람이 돈을 인출하는데 걸리는 시간 Pi가 주어진다. (1 ≤ Pi ≤ 1,000)

www.acmicpc.net

댓글
«   2025/09   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
최근에 올라온 글
글 보관함
Total
Today
Yesterday