코딩/백준 문제 (브론즈)

[백준/2309/C언어] 일곱 난쟁이 풀이

룻밤 2023. 8. 3. 16:43

 

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

 

2309번: 일곱 난쟁이

아홉 개의 줄에 걸쳐 난쟁이들의 키가 주어진다. 주어지는 키는 100을 넘지 않는 자연수이며, 아홉 난쟁이의 키는 모두 다르며, 가능한 정답이 여러 가지인 경우에는 아무거나 출력한다.

www.acmicpc.net


#include<stdio.h>

int main() {
	int gob[9], real[7];	// 난쟁이 9명, 실제 난쟁이 7명
	int temp;	// 오름차순 정렬 위함
	int total = 0;	// 총합 100 = 기존 난쟁이 7명의 키 
	int over = 0;	// 100을 넘어선 수
	int p, q;		// p, q번째의 가짜 난쟁이
	int i, j;

	for (i = 0; i < 9; i++) {
		scanf("%d", &gob[i]);
		total += gob[i];
	}
	over = total - 100;	

	for (i = 1; i < 9; i++) {	
		for (j = 0; j < i; j++) {
			if (gob[i] + gob[j] == over) { // i번째 원소와 j번째 원소가 over일때
				p = i;
				q = j;
				break;
			}
		}
	}
	j = 0;
	for (i = 0; i < 9; i++) {		// 진짜 난쟁이 배열에 q,p번째 빼고 넣기
		if (i != q && i != p) {
			real[j] = gob[i];
			j++;
		}
	}
	for (int i = 0; i < 7; i++) {	//오름차순 정렬
		for (int j = 0; j < i; j++) {	// i번째와 j번째를 비교
			if (real[i] < real[j]) {
				temp = real[i];		// temp에 i번째 숫자를 저장
				real[i] = real[j];	// i번째에는 j번째 숫자를 저장
				real[j] = temp;		// j번째에 temp(i번째 숫자) 저장
			}
		}
	}
	for (int i = 0; i < 7; i++)
		printf("%d\n", real[i]);

	return 0;
}