🎸/알고리즘 스터디

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

컴공생 C 2020. 10. 6. 13:51
반응형

문제 출처 

www.acmicpc.net/problem/2309

 

2309번: 일곱 난쟁이

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

www.acmicpc.net

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

int main() {
	int dwarf[9]; //난쟁이의 키를 담을 배열
	int total = 0; //제시된 키의 전체합 
	int over = 0; //초과한 양
	int i, j; 

	//입력받는 부분
	for ( i = 0; i < 9; i++) {
		scanf("%d", &dwarf[i]);
		total = total + dwarf[i];
	}

	//100 초과 수 확인
	over = total - 100;
	
	//난쟁이의 키가 아닌 두 수 찾기
	int p = 0;
	int q = 0;
	//이중 for문 이용
	for (i = 0; i < 9; i++) {
		for (j = i + 1; j < 9; j++) {
			if ((dwarf[i] + dwarf[j]) == over) {
				p = i;
				q = j;
				break;
			}
		}
	}


	int tmp;
	int r_dwarf[7]; //실제 난쟁이 키의 리스트
	j = 0;
	for (i = 0; i < 9; i++) {
		if (i != p && i != q) {
			r_dwarf[j] = dwarf[i];
			j++;
		}
	}

	//난쟁이 키 리스트 정렬
	for (i = 0; i < 7; i++) {
		for (j = i + 1; j < 7; j++) {
			if (r_dwarf[i] > r_dwarf[j]) {
				tmp = r_dwarf[i];
				r_dwarf[i] = r_dwarf[j];
				r_dwarf[j] = tmp;
			}
		}
	}

	//오름차순으로 출력
	for (i = 0; i < 7; i++) {
		printf("%d\n", r_dwarf[i]);
	}
}

 

반응형