본문 바로가기
백준

백준 11399번[c언어] : ATM

by 핫동경 2022. 4. 27.
반응형

https://www.acmicpc.net/problem/11399

 

11399번: ATM

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

www.acmicpc.net


풀이
  • 첫째 줄에 사람 수 입력받는다. 배열크기가 1000인people[1001]선언하기
  • 사람 수만큼 시간의 값을 입력받는다
  • 가장 최솟값을 가지게 하려면 배열이 오름차순으로 정렬되어야한다. 
  • 배열을 정렬해아 하기 때문에 정렬기법을 사용한다. 정렬의 기법을 매우 여러개지만 그 중 하나인 삽입 정렬 알고리즘을 사용하였다.
  • 배열을 정렬한 후 이중 반복문을 통해 값을 더해나간다.
#include<stdio.h>
//삽입정렬 함수
void insertion_sort(int list[], int n) {
	int i, j, key;
	for (i = 1; i < n; i++) {
		key = list[i];
		for (j = i - 1; j >= 0 && list[j] > key; j--)
			list[j + 1] = list[j];
		list[j + 1] = key;
	}
}

int main() {
	int n;
	int people[1001];
	int sum = 0;
	scanf("%d", &n);
	for (int i = 0; i < n; i++) {
		int k;
		scanf("%d", &k);
		people[i] = k;
	}
	insertion_sort(people, n);
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < i + 1; j++) {
			sum += people[j];
		}
	}
	printf("%d", sum);
}

 

c++을 사용해서 풀 시 c++에서 제공해주는 sort()함수를 사용하여 쉽게 정렬이 가능하다.

반응형

댓글