[코딩테스트]BJ2309일곱 난쟁이- C++

Coffee Time☕·2020년 9월 16일
0

코딩테스트

목록 보기
1/42

[문제]

왕비를 피해 일곱 난쟁이들과 함께 평화롭게 생활하고 있던 백설공주에게 위기가 찾아왔다. 일과를 마치고 온 난쟁이가 이롭명이 아닌 아홉명이였던 것이다.

아홉명의 난쟁이는 모두 자신이 "백설공주와 일곱 난쟁이"의 주인공이라고 주장했다.
뛰어난 수학적 직관력을 가지고 있던 백설공주느 , 다행스럽게도 일곱 난쟁이의 키의 합이 100이 됩을 기억해냈다.

아홉 난쟁이의 키가 주어졌을 때, 백설공주를 도와 일곱 난쟁이를 찾는 프로그램을 작성하시오.

[입력]

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

[출력]

일곱 난쟁이의 키를 오름차순으로 출력한다. 일곱 난쟁이를 찾을 수 있는 경우는 없다.

[풀이]

9 난쟁이 키의 값을 모두 구한 뒤, 빼줄 2 명의 난쟁이를 구한다.

[코드]

#include<iostream>
#include<algorithm>
#define HEIGHT 100
using namespace std;

int main() {

	int dwarf_height[9] = { 0 };
	int sum=0;
	int not_dwarf1=0, not_dwarf2 = 0;

	//input 
	for (int i= 0; i <9; i++) {
		int a;
		cin >> a;
		dwarf_height[i] = a;
	}
	//정렬
	sort(dwarf_height,dwarf_height+9);
	
	// 전체 합
	for (int i = 0; i < 9; i++) {
		sum += dwarf_height[i];
	}

	int real_sum = sum;
	//뺄 숫자 2개 고름 
	for (int i = 0; i < 9; i++) {
		for (int j = i+1; j < 9; j++) {
			sum = real_sum;
			sum -= dwarf_height[i];
			sum -= dwarf_height[j];
			if (sum == HEIGHT) {
				not_dwarf1 = i;
				not_dwarf2 = j;
				break;
			}
		}
	}
	//뺀 숫자 제외하고 출력
	for (int i = 0; i <9; i++) {
		if (i == not_dwarf1 || i == not_dwarf2) continue;
		cout << dwarf_height[i] << endl;
	}
	return 0;
}

[느낀점]

쉬운 문제였다. 다만, 오랜만에 코딩을 해서 그런지 sort 함수를 사용하는데, sort(begin, end) 쓰는 것에 버벅거렸고, 난쟁이를 찾으면서 정답이 아닌 경우 sum을 초기화 해주어야하는데 이를 안하고 에러 찾느라 시간을 좀 낭비했다.

0개의 댓글