2309 - 일곱 난쟁이

재찬·2022년 12월 30일
0

Algorithm

목록 보기
3/64

문제

코드

#include <bits/stdc++.h>
using namespace std;

#define MAX 101
int tallArr[9] = {MAX, };

int main(){
	int t;
	int sum = 0;
	int f;
	
	for(int i = 0; i < 9; i++){
		cin >> tallArr[i];
		sum += tallArr[i];
	}
	
	f = sum - 100;
	
	for(int i = 0; i < 9; i++){
		for(int j = 0; j < 9; j++){
			
			if(tallArr[i] + tallArr[j] == f && i != j){
					tallArr[i] = MAX;
					tallArr[j] = MAX;
	
				sort(tallArr, tallArr+9);
	
				for(int i = 0; i < 7; i++){
					cout << tallArr[i] << '\n';
				}	
	
				return 0;
			}	
		}
	}
	
	return 0;
	
	
}

풀이

난쟁이의 수가 고정되어 있으니 고정된 배열을 생성해서 입력을 받는다. 생성된 배열은 선택해야 하는 수에 영향을 주지 않기 위해 미리 101로 초기화를 시켜둔다.
난쟁이 키의 합인 100과의 차이를 구하기 위해서 입력을 받을 때 배열의 합을 구해준다.
배열을 하나씩 돌며 인덱스가 다르고 두 배열 값의 합이 전체 키의 합에서 100을 뺀 값과 같다면 해당 인덱스에 해당하는 배열 값을 MAX로 초기화 시킨다.
오름차순으로 정렬하고 배열을 출력 시키면 된다.

결과

후기

문제를 풀고 나서 보니 조합이나 순열을 사용해서도 문제를 풀 수 있지 않을까라는 생각이 들었다.
이 문제는 배열의 크기가 고정되어 있어서 이중 for문을 그나마 부담없이 사용할 수 있었는데 이중 for문을 불가피한 상황 빼고는 안써보려고 노력해야겠다.

0개의 댓글