나만의 작은 프로그램

정혜창·2024년 12월 29일

독학

목록 보기
16/28
post-thumbnail

어제 코딩테스트를 하면서 배웠던 것을 활용하는 노하우(?)를 익힐 수 있었던 것 같다. 그래서 캠프에서 숙제이기도 했었던 정렬을 활용한 작은 프로그램 만들기를 조금 변형해서 연습하는 겸 만들어 보았다.
정말 다행히도 오류 한번 없이 컴파일 되었고 만드는데도 30분 내로 빠르게 만들 수 있었던 것 같다. 처음에 정렬을 구현한 코딩 자체가 이해가 가지 않았던 일주일 전에 비해 비약적인 발전이라고 생각한다. 그래서 그런지 요즘은 코딩이 너무 재미있다. (아직 초반이라 재미를 느끼는 것일 수도 ...)


이번에 만든 프로그램은 쉬워서 매일 썼던 버블정렬 대신 선택정렬을 활용해 보았다. (점점 이렇게 하나씩 익히면서 모든 정렬을 정복하고 말거야😊) 또한 코드 중복을 최대한 없애려고 최대한 main 함수 바깥에 함수를 만들어서 활용했다. 프로그램은 내가 입력한 만큼 배열을 만든 뒤 배열의 원소들을 나눌 수를 입력하고 나눠지는 값들을 새로운 배열로 넣어서 오름차순이나 내림차순을 하는 프로그램이다. 말이 조금 장황했는데, 한마디로 나누어 지는 것만 뽑아서 정렬하는 프로그램이라고 생각하면 되겠다.

구현

#include <iostream>
#include <vector>
#include <string>

using namespace std;
// 선택정렬 : 오름차순
void upselectionSort(vector<int> &arr) {
	for (int i = 0; i < arr.size() - 1; i++) {
		int minIdx = i;
		for (int j = i + 1; j < arr.size(); j++) {
			if (arr[minIdx] > arr[j]) {
				minIdx = j;
			}
		}
		if (minIdx != i) {
			int temp = arr[i];
			arr[i] = arr[minIdx];
			arr[minIdx] = temp;
		}
	}
}
// 선택정렬 : 내림차순
void downselectionSort(vector<int> &arr) {
	for (int i = 0; i < arr.size() - 1; i++) {
		int minIdx = i;
		for (int j = i + 1; j < arr.size(); j++) {
			if (arr[minIdx] < arr[j]) {
				minIdx = j;
			}
		}
		if (minIdx != i) {
			int temp = arr[i];
			arr[i] = arr[minIdx];
			arr[minIdx] = temp;
		}
	}
}
// 배열의 크기만큼 원소들을 출력, 5개 이상이면 줄바꿈
void print(vector<int>& val) {
	int count=0; // 줄바꿈을 위한 변수
	for (int i = 0; i < val.size(); i++) {
		cout << val[i] << " ";
		count++;
		if (count % 5 == 0) {
			cout << endl;
		}
	}
}
// 나누어지는 원소들을 배열로 만들어주는 함수
vector<int> solution(vector<int> val, int devisor) {
	vector<int> answer;

	for (int i = 0; i < val.size(); i++) {
		if (val[i] % devisor == 0) {
			answer.push_back(val[i]);
		}
	}
	if (answer.size() == 0) {
		answer.push_back(-1);
	}
	
	return answer;
}

int main() {

	vector<int> test;
	int input;
	cout << "배열의 요소를 입력하세요. (-1)을 누르면 종료됩니다. : ";
	while (true) {
		cin >> input;
		if (input == -1) {
			break;
		}
		test.push_back(input);
	}

	int devisor;
	cout << "배열의 원소들을 나눌 수를 입력하세요. : " << endl;
	cin >> devisor;

	vector<int>final = solution(test, devisor);

	cout << "배열의 정렬 방법을 선택하세요 (오름차순=1, 내림차순=2) : " << endl;
	int sortnum;
	cin >> sortnum;
	switch (sortnum) {
	case 1: 
		upselectionSort(final);
		print(final);
		break;
	case 2:
		downselectionSort(final);
		print(final);
		break;
	default:
		cout << "잘못 입력하셨습니다." << endl;
		break;
	}

	return 0;
}

회고

아직 자그마한 프로그램이지만 직접 내가 코딩을 해서 만들어 냈다는 사실이 너무 벅차다. 나중에 보면 이 소스코드 마저 완전 허접하게 보이겠지?ㅋㅋ 그래도 지금은 만들면서 복습도 되고, 연습도 많이 된것 같아서 좋은 시간이였다. 내가 성장하는 레벨을 보는 모습이랄까? 레벨은 300 만렙에 이제 3~5 레벨정도 되었을지라도 레벨업을 했다는게 어디인가! 앞으로 종종 나만의 프로젝트, 프로그램등을 만들면서 레벨업, 쭉쭉 성장하도록 해야겠다. 굳! 👍

profile
Unreal 1기

0개의 댓글