어제 코딩테스트를 하면서 배웠던 것을 활용하는 노하우(?)를 익힐 수 있었던 것 같다. 그래서 캠프에서 숙제이기도 했었던 정렬을 활용한 작은 프로그램 만들기를 조금 변형해서 연습하는 겸 만들어 보았다.
정말 다행히도 오류 한번 없이 컴파일 되었고 만드는데도 30분 내로 빠르게 만들 수 있었던 것 같다. 처음에 정렬을 구현한 코딩 자체가 이해가 가지 않았던 일주일 전에 비해 비약적인 발전이라고 생각한다. 그래서 그런지 요즘은 코딩이 너무 재미있다. (아직 초반이라 재미를 느끼는 것일 수도 ...)
#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 레벨정도 되었을지라도 레벨업을 했다는게 어디인가! 앞으로 종종 나만의 프로젝트, 프로그램등을 만들면서 레벨업, 쭉쭉 성장하도록 해야겠다. 굳! 👍