코딩/백준 문제 (브론즈)
[백준/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;
}