Electronic Engineering/C++

2022 인하대학교 프로그래밍 대회 참가 후기

해시브라우니 2022. 5. 21. 18:26

22.05.21

인하대학교 프로그래밍 대회에 참가하였다. 아직 2학년 1학기를 진행중이고 코딩에 들은 수업이라곤 C/C++ 이지만 앞으로 원하는 진로의 방향이 코딩을 많이 사용하기도 하고 코딩테스트가 필요할지도 모르는 직업을 것이라는 생각에 일찍 경험해보고 부딪혀 보자! 생각으로 지원했다.

당연히 입상할 생각으로 참가한 것은 아니었고.. 대회를 마쳐보니 역시 벽은 높았다. 

일단 우선적으로 배움의 깊이가 필요할 것으로 생각되었다. 내가 알고있는 것은 너무너무너무 얕았다. 생각하는 것을 구현을 하려면 내가 알고 있는 것보다 더 깊은 지식이 필요할 것 같았고, 아직 배우고 있는 C++을 통해서 할려고 해서인지 더욱 그 벽이 높게 느껴졌다.

언어를 한가지 정해서 그것 위주로 하는 것도 중요하다고 생각되었다. 최종 정착지는 Python일텐데, 프로그래밍의 구조(?),기초(?)를 탄탄히 해서 언어를 배운 뒤 Python만 꾸준히 파는게 강점일 것 같다고 생각하였다. 돌아가는 과정이나 문법은 비슷할테니 말이다. 습관적으로 C의 stdio.h나.. printf가 무의식중에 자꾸 나가더라..

무엇보다도 해버릇해야 실력이 상승할 것 같다. 

아래는 풀었 문제를 올려본다. A,B,H를 풀었으며 H는 시간초과가 나오는데 이 시간초과의 원인을 잘 모르겠다.

 

A번

이 문제를 왜 오래 잡고 있었는지 모르지만 문제의 짜,~ 삵 이 부분에서 오해를 한거 같았다. + 조건을 너무 원시적(?)으로 설명한것이 참 아쉽다. 제대로 배운것을 숙지하지 못했다는게 저 조건문에서 들어나는듯 하였다. 

#include <iostream>
using namespace std;

int main() {
	int length;
	cin >> length;
	int last = length - 1;
	char name[30] = { };
	for (int i = 0; i < length; i++) {
		cin >> name[i];
	}
	if (name[last] == 'y'||name[last]=='u' || name[last] == 'i' || name[last] == 'o' || name[last] == 'p' || name[last] == 'h' || name[last] == 'j' || name[last] == 'l' || name[last] == 'k' || name[last] == 'b' || name[last] == 'n' || name[last] == 'm')
		cout << "0";
	else
		cout << "1";
}

 

B번

문제를 딱 보자마자 아. 객체를 사용해서 하면 괜찮겠구나 싶었다. 이번학기에 배우고 있는게 C++ 객체프로그래밍이어서 그런걸지도 모른다. 이 문제에서 난감했던 부분은 Pass 등급이 나왔을때 계산을 어떻게 하는거지? 였다. 문제에선 계산에 포함되지 않는다 였는데, 이것이 어떤 방식으로 들어가는지 몰라서.. 학점엔 포함안시키는 방향으로 했다.

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

class test {
	public:
	string sub;
	double num;
	string grd;
	test() {};
	test(string sub, double num, string grd) {
		this->sub = sub;
		this->num = num;
		this->grd = grd;
	}
	double sum() {
		if (grd == "A+") { return num * 4.5; }
		else if (grd == "A0") { return num * 4.0; }
		else if (grd == "B+") { return num * 3.5; }
		else if (grd == "B0") { return num * 3.0; }
		else if (grd == "C+") { return num * 2.5; }
		else if (grd == "C0") { return num * 2.0; }
		else if (grd == "D+") { return num * 1.5; }
		else if (grd == "D0") { return num * 1.0; }
		else if (grd == "F") { return num * 0.0; }
		else if (grd == "P") { return 0; }
	}
};
int main() {
	string a, c;
	double b;
	double score=0;
	double hakjom=0;
	double avg;
	for (int i = 0; i < 20; i++) {
		cin >> a >> b>> c;
		test Subject(a, b, c);
		if (Subject.grd == "P") {
			hakjom -= Subject.num;
		}
		score += Subject.sum();
		hakjom += Subject.num;
	}
	avg = score / hakjom;
	cout << avg;
}

 

H번

이 문제에서 고민했던 부분은 어떻게 비교를 할지 였는데 for문을 두번쓰면 j번째는 고정, i번째만 움직이게 하여 비교할 수 있는것을 발견했다. 발견하고 바로 코딩해서 구현했는데 돌아는 가는데 시간초과가 떴다. 시간초과가 왜 뜨는지 몰라서.. 일단 구현은 되니 올린다. 

#include <iostream>
using namespace std;

int main() {
	int  num;
	cin >> num;
	int* array = new int[num];
	for (int i = 0; i < num; i++) {
		cin >> array[i];
	}
	int max = 0;
	for (int i = 0; i < num; i++) {
		for (int k = 0; k <= i; k++) {
			if (max < array[i] - array[k]) {
				max = array[i] - array[k];
			}
		}
		cout << max << " ";
	}
	delete[] array;
}

 

이렇게 3문제를 풀었던 것이었고, 당장 해야될 과제도 있다보니 추가로 3시간을 앉아있기는 힘들어보여 중간에 퇴실을 했다. 잘하는 사람들을 보고 동기부여도 받고 코딩을 어떻게 공부할지도 알게 된 소중한 경험이었다.

'Electronic Engineering > C++' 카테고리의 다른 글

C++ 실습 과제 마지막  (0) 2022.07.05
C++ 실습 과제 3  (0) 2022.07.05
C++ 실습 과제 2  (0) 2022.07.05
C++ 실습 과제  (0) 2022.07.05
C언어 Level Test  (0) 2022.07.05