다라다라V
article thumbnail
728x90
반응형
본 글은 "황기태"님의 [명품 C++ Programming]의 연습 문제 답을 공유하고자 작성되었으며, 필자가 직접 문제를 풀며 작성한 것이기에 오류가 있을 수 있습니다. 댓글로 알려주시면 반영하도록 하겠습니다.

시리즈 보기
[C++] 명품 C++ Programming 1장 연습 문제 풀이 (이론 문제)
[C++] 명품 C++ Programming 1장 연습 문제 풀이 (실습 문제)
[C++] 명품 C++ Programming 2장 연습 문제 풀이 (이론 문제)
[C++] 명품 C++ Programming 2장 연습 문제 풀이 (실습 문제)
[C++] 명품 C++ Programming 3장 연습 문제 풀이 (이론 문제)
[C++] 명품 C++ Programming 4장 연습 문제 풀이 (이론 문제)
[C++] 명품 C++ Programming 4장 연습 문제 풀이 (실습 문제)
[C++] 명품 C++ Programming 5장 연습 문제 풀이 (이론 문제)
[C++] 명품 C++ Programming 6장 연습 문제 풀이 (이론 문제)
[C++] 명품 C++ Programming 7장 연습 문제 풀이 (이론 문제)
[C++] 명품 C++ Programming 8장 연습 문제 풀이 (이론 문제)
[C++] 명품 C++ Programming 8장 연습 문제 풀이 (실습 문제)
[C++] 명품 C++ Programming 9장 연습 문제 풀이 (이론 문제)
[C++] 명품 C++ Programming 9장 연습 문제 풀이 (실습 문제)
[C++] 명품 C++ Programming 10장 연습 문제 풀이 (이론 문제)
[C++] 명품 C++ Programming 10장 연습 문제 풀이 (실습 문제)
[C++] 명품 C++ Programming 11장 연습 문제 풀이 (이론 문제)
[C++] 명품 C++ Programming 11장 연습 문제 풀이 (실습 문제)
[C++] 명품 C++ Programming 12장 연습 문제 풀이 (이론 문제)
[C++] 명품 C++ Programming 12장 연습 문제 풀이 (실습 문제)
[C++] 명품 C++ Programming 13장 연습 문제 풀이 (이론 문제)

 

💡 

int main() {
	int x[] = { 1, 10, 100, 5, 4 };
	cout << biggest(x, 5) << endl;
}
#include <iostream>
using namespace std;

template <class T>
T biggest(T arr [], int size) {
	T big = arr[0];
	for (int i = 0; i < size; i++) {
		if (big <= arr[i]) big = arr[i];
	}
	return big;
}

int main() {
	int x[] = { 1, 10, 100, 5, 4 };
	cout << biggest(x, 5) << endl;
}

 

💡 

int main() {
	int x[] = { 1, 10, 100, 5, 4 };
	int y[] = { 1, 10, 100, 5, 4 };
	if (equalArrays(x, y, 5)) cout << "같다.";
	else cout <<"다르다."
}
#include <iostream>
using namespace std;

template <class T>
bool equalArrays(T arr1[], T arr2[], int size) {
	for (int i = 0; i < size; i++) {
		if (arr1[i] != arr2[i]) return false;
	}
	return true;
}

int main() {
	int x[] = { 1, 10, 100, 5, 4 };
	int y[] = { 1, 10, 100, 5, 4 };
	if (equalArrays(x, y, 5)) cout << "같다.";
	else cout << "다르다.";
        
	double a[] = { 2.1, 5, 4, 9.44, 8.4 };
	double b[] = { 2.1, 5, 4, 9.5, 8.7 };
	if (equalArrays(a, b, 5)) cout << "같다.";
	else cout << "다르다.";
}

 

💡 

#include <iostream>
using namespace std;

template <class T>
void reverseArray(T arr [], int size) {
	T tmp;
	// 임시 배열을 이용해 따로 저장한 뒤 바꿀 수도 있습니다.
	for (int i = 0; i < size/2; i++) {
		tmp = arr[i];
		arr[i] = arr[size - i - 1];
		arr[size - i - 1] = tmp;
	}
}

int main() {
	int x[] = { 1, 10, 100, 5, 4 };
	reverseArray(x, 5);
	for (int i = 0; i < 5; i++) cout << x[i] << ' ' << endl;

	double y[] = { 1.1, 2.2, 3.3, 4.4, 5.5 };
	reverseArray(y, 5);
	for (int i = 0; i < 5; i++) cout << y[i] << ' ';
}

 

💡 

#include <iostream>
#include <string>
using namespace std;

template <class T>
bool search(T isHere, T arr[], int size) {
	for (int i = 0; i < size; i++) {
		if (arr[i] == isHere) return true;
	}
	return false;
}

int main() {
	int x[] = { 1, 10, 100, 5, 4 };
	if (search(100, x, 5)) cout << "100이 배열 x에 포함되어 있다." << endl;
	else cout << "100이 배열 x에 포함되어 있지 않다.";

	double y[] = { 1.1, 2.2, 3.3, 4.4, 5.5 };
	if (search(3.14, y, 5)) cout << "3.14이 배열 y에 포함되어 있다.";
	else cout << "3.14이 배열 y에 포함되어 있지 않다.";

}

 

💡 

int* concat(int a[], int sizea, int b[], int sizeb);
#include <iostream>
#include <string>
using namespace std;

template <class T>
T* concat(T a[], int sizea, T b[], int sizeb) {
	T* arr = new T[sizea + sizeb];
	for (int i = 0; i < sizea; i++) {
		arr[i] = a[i];
	}
	for (int i = sizea; i < sizea + sizeb; i++) {
		arr[i] = b[i - sizea];
	}
	return arr;
}

int main() {
	int a[] = { 1, 2, 3, 4, 5 };
	int b[] = { 6, 7, 8, 9, 10 };
	int* intArr = concat(a, 5, b, 5);
	for (int i = 0; i < 10; i++) cout << intArr[i] << " ";
	cout << endl;

	double x[] = { 1.1, 2.2, 3.3, 4.4, 5.5 };
	double y[] = { 6.6, 7.7, 8.8, 9.9, 10.1 };
	double* doubleArr = concat(x, 5, y, 5);
	for (int i = 0; i < 10; i++) cout << doubleArr[i] << " ";
}

 

💡 

int* remove(int src[], int sizeSrc, int minus[], int sizeMinus, int& retSize);
#include <iostream>
#include <string>
using namespace std;

// 배열 src에서 배열 minus에 들어있는 같은 수를 모두 삭제한 새로운 int 배열을 동적으로 할당받아 리턴
// retSize는 remove() 함수의 실행 결과를 리턴하는 배열의 크기를 전달받는다.
template <class T>
T* remove(T src[], int sizeSrc, T minus[], int sizeMinus, int& retSize) {
	T* arr = new T[sizeSrc];
	int i, j;
	bool canCopy = true; // 복사할지를 판단

	for (i = 0; i < sizeSrc; i++) {
		for (j = 0; j < sizeMinus; j++) {
			if (src[i] == minus[j]) {
				canCopy = false;
				break;
			}
		}
		if (canCopy) {
			arr[retSize] = src[i];
			retSize++;
		}
		canCopy = true;
	}

	return arr;
}

int main() {
	int a[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
	int b[] = { 4, 5, 6, 7 };
	int size = 0;
	int* p = remove(a, 10, b, 4, size);
	for (int i = 0; i < size; i++)
		cout << p[i] << ' ';
	cout << endl;
	delete[] p;

	size = 0;
	char c[] = { 'a','b','c','d','e','f' };
	char d[] = { 'g','h','i','j','k' };
	char* q = remove(c, 6, d, 5, size);
	for (int i = 0; i < size; i++)
		cout << q[i] << ' ';
	cout << endl;
	delete[] q;
}

 

💡 

#include <iostream>
using namespace std;

class Circle {
	int radius;
public:
	Circle(int radius = 1) { this->radius = radius; }
	int getRadius() { return radius; }
};

template <class T>
T bigger(T a, T b) {
	if (a > b) return a;
	else return b;
}

int main() {
	int a = 20, b = 50, c;
	c = bigger(a, b);
	cout << "20과 50 중 큰 값은 " << c << endl;

	Circle waffle(10), pizza(20), y;
	y = bigger(waffle, pizza);
	cout << "waffle과 pizza 중 큰 것의 반지름은 " << y.getRadius() << endl;
}
#include <iostream>
using namespace std;

class Circle {
	int radius;
public:
	Circle(int radius = 1) { this->radius = radius; }
	int getRadius() { return radius; }
};

template <class T>
T bigger(T a, T b) {
	if (a > b) return a;
	else return b;
}

Circle bigger(Circle a, Circle b) {
	if (a.getRadius() > b.getRadius()) return a;
	else return b;
}

int main() {
	int a = 20, b = 50, c;
	c = bigger(a, b);
	cout << "20과 50 중 큰 값은 " << c << endl;

	Circle waffle(10), pizza(20), y;
	y = bigger(waffle, pizza);
	cout << "waffle과 pizza 중 큰 것의 반지름은 " << y.getRadius() << endl;
}

 

💡 

#include <iostream>
using namespace std;

class Comparable {
public:
    // op2는 비교하려는 객체를 받아옴
    virtual bool operator > (Comparable& op2) = 0; // 순수 가상 함수 
    virtual bool operator < (Comparable& op2) = 0; // 순수 가상 함수
    virtual bool operator == (Comparable& op2) = 0; // 순수 가상 함수
};

class Circle : public Comparable {
    int radius;
public:
    Circle(int radius = 1) { this->radius = radius; }
    int getRadius() { return radius; }
    bool operator > (Comparable& op2) {
    	// 동적할당으로 객체를 가리키는 포인터 만들기
        Circle* c = (Circle*)&op2;
        if (this->radius > c->getRadius()) return true;
        else return false;
    }
    bool operator < (Comparable& op2) {
        Circle* c = (Circle*)&op2;
        if (this->radius < c->getRadius()) return true;
        else return false;
    }
    bool operator == (Comparable& op2) {
        Circle* c = (Circle*)&op2;
        if (this->radius == c->getRadius()) return true;
        else return false;
    }
};

template <class T>
T bigger(T a, T b) {
    if (a > b) return a;
    else return b;
}

int main() {
    int a = 20, b = 50, c;
    c = bigger(a, b);
    cout << "20과 50 중 큰 값은 " << c << endl;

    Circle waffle(10), pizza(20), y;
    y = bigger(waffle, pizza);
    cout << "waffle과 pizza 중 큰 것의 반지름은 " << y.getRadius() << endl;
}

 

💡 

#include <iostream>
#include <vector>
using namespace std;

int main() {
	int num, i;
	double sum = 0;
	vector<int> v;
	vector<int>::iterator it;

	while (true) {
		cout << "정수를 입력하세요(0을 입력하면 종료)>>";
		cin >> num;
		if (num == 0) break;

		v.push_back(num);
		sum += num;
		for (it = v.begin(); it != v.end(); it++) {
			cout << *it << " ";
		}
		cout << endl << "평균 = " << sum / v.size() << endl;
	}
}

 

💡 

 

#include <iostream>
#include <string>
#include <vector>
using namespace std;

class Nation {
	string nation;
	string capital;
public:
	Nation(string nation = "", string capital = "") {
		this->nation = nation;
		this->capital = capital;
	}
	void setNation(string nation) { this->nation = nation; }
	void setCapital(string cpital) { this->capital = capital; }
	string getNation() { return nation; }
	string getCapital() { return capital; }
};

int main() {
	string nation, capital;
	vector<Nation> nv;
	nv.push_back(Nation("Korea", "Seoul"));
	nv.push_back(Nation("USA", "Washington D.C."));
	nv.push_back(Nation("Japan", "Tokyo"));
	nv.push_back(Nation("United Kingdom", "London"));
	nv.push_back(Nation("France", "Paris"));

	vector<Nation>::iterator it;

	int select;
	cout << "***** 나라의 수도 맞추기 게임을 시작합니다. *****" << endl;
	while (true) {
		cout << "정보 입력: 1, 퀴즈: 2, 종료: 3 >> ";
		cin >> select;

		switch (select) {
		case 1:	// 정보 입력, 중복을 확인함
			cout << "나라와 수도를 입력하세요(no no 이면 입력 끝)" << endl;
			cout << "현재 " << nv.size() << "개의 나라가 입력되어 있습니다." << endl;
			cout << nv.size() + 1 << ">>";
			cin >> nation >> capital;
			if (nation == "no" && capital == "no") break;
			for (it = nv.begin(); it != nv.end(); it++) {
				if (it->getNation() != nation)
					nv.push_back(Nation(nation, capital));
				else
					cout << "already exists !!";
			}
			break;
		case 2: // 랜덤으로 나라 출력
			int quiz;
			while (true) {
				string answer;
				quiz = rand() % nv.size();
				cout << nv.at(quiz).getNation() << "의 수도는?";
				cin >> answer;
				if (answer == "exit")
					break;
				else if (nv.at(quiz).getCapital() == answer)
					cout << "Correct !!" << endl;
				else
					cout << "No !!" << endl;
			}
			break;
		case 3:
			return 0;
		}
	}
}

 

💡 

#include<iostream>
#include<vector>
#include<string>
using namespace std;
 
class Book{
    int year;
    string name;
    string author;
public:
    void set(int year, string name, string author){
        this->year = year; this->name = name; this->author = author;
    }
    string getBookName() { return name; }
    string getAuthor(){ return author; }
    int getYear(){ return year; }
    void show(){ cout << year << "년도, " << name << ", " << author << endl; }
};
 
int main() {
    vector<Book> v;
    Book b;
    int year;
    string name;
    string author; 
    
    cout << "입고할 책을 입력하세요. 년도에 -1을 입력하면 입고를 종료합니다.\n";
    
    while(true){
        cout << "년도>>";
        cin >> year;
        if(year == -1)
            break;
        fflush(stdin);
        cout << "책이름>>";
        getline(cin, name);
        cout << "저자>>";
        getline(cin, author);
        
        b.set(year, name, author);
        v.push_back(b);
    }
    
    cout << "총 입고된 책은 " << v.size() << "권 입니다.\n";
    cout << "검색하고자 하는 저자 이름을 입력하세요>>";
    getline(cin, author);
    for(int i=0; i<v.size(); i++){
        if(v[i].getAuthor() == author)
            v[i].show();
    }

    cout << "검색하고자 하는 년도를 입력하세요>>";
    cin >> year;
    for(int i=0; i<v.size(); i++){
        if(v[i].getYear() == year)
            v[i].show();
    }
}

 

💡 

// 임시 생략

 

💡 

#include <iostream>
#include <string>
#include <map>
using namespace std;

int main() {
	map<string, int> student;
	string name;
	int score;

	cout << "***** 점수 관리 프로그램 HIGH SCORE을 시작합니다." << endl;
	int select;
	while (true) {
		cout << "입력:1, 조회:2, 종료:3 >> ";
		cin >> select;
		switch (select) {
		case 1:
			cout << "이름과 점수 >> ";
			cin >> name >> score;
			student.insert(make_pair(name, score));
			break;
		case 2:
			cout << "이름>> ";
			cin >> name;
			if (student.find(name) == student.end()) 
				cout << "입력되지 않은 학생입니다." << endl;
			else 
				cout << name << "의 점수는 " << student.at(name) << endl;
			break;
		case 3:
			cout << "프로그램을 종료합니다...";
			return 0;
		}
	}
}

 

💡 

#include <iostream>
#include <string>
#include <map>
using namespace std;

int main() {
	cout << "***** 암호 관리 프로그램 WHO를 시작합니다. *****" << endl;
	int select;
	string name, passwd;
	map<string, string> code;
	while (true) {
		cout << "신입:1, 검사:2, 종료:3>> ";
		cin >> select;
		switch (select)
		{
		case 1:
			cout << "이름 암호 >>";
			cin >> name >> passwd;
			code.insert(make_pair(name, passwd));
			break;
		case 2:
			cout << "이름? ";
			cin >> name;
			do {
				cout << "암호? ";
				cin >> passwd;
				if (passwd == code.at(name)) {
					cout << "통과!!" << endl;
					break;
				}
				else {
					cout << "실패~~" << endl;
				}
			} while (true);
			break;
		case 3:
			cout << "프로그램을 종료합니다..." << endl;
			return 0;
		}
	}
}

 

반응형
profile

다라다라V

@DaraDaraV

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!