티스토리 뷰
문제.
줄을 서 있는 사람의 수 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
'Computer Science > 백준 알고리즘' 카테고리의 다른 글
[백준.08958-C언어] OX퀴즈 (0) | 2021.02.24 |
---|---|
[백준.11508-C언어] 2+1 세일 (0) | 2021.02.23 |
[백준.16435-C언어] 스네이크버드 (0) | 2021.02.23 |
[백준.11047-C언어] 동전 0 (0) | 2021.02.21 |
[백준.00000] 1일 1sol (0) | 2021.02.21 |
댓글