210524_TIL

hyeojung·2021년 5월 24일
0

TIL

목록 보기
49/62
post-thumbnail

C++

레퍼런스 사용 방법

함수에서 값 리턴 (int f())함수에서 참조자 리턴 (int& f())
값 타입으로 받음 (int a = f())값 복사됨값 복사됨, 다만 지역 변수의 레퍼런스를 리턴하지 않도록 주의
참조자 타입으로 받음 (int& a = f())컴파일 오류가능, 다만 위와 같이 지역 변수의 레퍼런스를 리턴하지 않도록 주의
상수 참조자 타입으로 받음 (const int& a = f())가능가능, 다만 위와 같이 지역 변수의 레퍼런스를 리턴하지 않도록 주의

+) 원래 변수 없이 참조자만 남게 되는 경우, 그것을 댕글랭 레퍼런스라고 함 ! 발생하지 않도록 유의


new와 delete

new : 메모리 할당 (C언어의 malloc)

int* pointer = new int; // 임의의 타입 할당 가능
int* list = new int[arr_size]; // 배열 할당

delete : 메모리 해제 (C언어의 free)

delete pointer; // 사용자가 new를 통해 할당한 공간만 해제 가능
delete[] list; // 배열 해제


백준 알고리즘

백준 알고리즘 10828번 : 스택

#include <iostream>
#include <stack>
#include <string>

using namespace std;

int	main(void)
{
	int n;
	cin >> n;

	stack<int> st;
    
	for (int i = 0; i < n; i++)
	{
    		string str;
		cin >> str;

		if (str == "push")
		{
			int num;
			cin >> num;
			st.push(num);
		}
		else if (str == "pop")
		{
			if (!st.empty())
			{
				cout << st.top() << endl;
				st.pop();
			}
			else
				cout << "-1" << endl;
		}
		else if (str == "size")
			cout << st.size() << endl;
		else if (str == "empty")
		{
			if (st.empty())
				cout << "1" << endl;
			else
				cout << "0" << endl;
		}
		else if (str == "top")
		{
			if (!st.empty())
				cout << st.top() << endl;
			else
				cout << "-1" << endl;
		}
	}
	return 0;
}

백준 알고리즘 10845번 : 큐

#include <iostream>
#include <queue>
#include <string>

using namespace std;

int	main(void)
{
	int n;
	cin >> n;

	queue<int> q;
	
	for (int i = 0; i < n; i++)
	{
		int num;
		string str;
		cin >> str;

		if (str == "push")
		{
			cin >> num;
			q.push(num);
		}
		else if (str == "pop")
		{
			if (q.empty())
				cout << -1 << '\n';
			else
			{
				cout << q.front() << '\n';
				q.pop();
			}
		}
		else if (str == "size")
			cout << q.size() << '\n';
		else if (str == "empty")
			cout << q.empty() << '\n';
		else if (str == "front")
		{
			if (q.empty())
				cout << -1 << '\n';
			else
				cout << q.front() << '\n';
		}
		else if (str == "back")
		{
			if (q.empty())
				cout << -1 << '\n';
			else
				cout << q.back() << '\n';
		}
	}
	return 0;
}

백준 알고리즘 1012번 : 유기농 배추

#include <iostream>
#include <queue>

using namespace std;

queue<pair<int, int>> q;
int n, m, k;
int cabbage[50][50];
bool visit[50][50];

int dx[] = { -1, 0, 1, 0 };
int dy[] = { 0, -1, 0, 1 };

void bfs(int xx, int yy)
{
	q.push({ xx,yy });
	while (!q.empty())
	{
		int x = q.front().first;
		int y = q.front().second;
		q.pop();
		visit[x][y] = true;

		for (int i = 0; i < 4; i++)
		{
			int nx = x + dx[i];
			int ny = y + dy[i];
			if (nx >= 0 && ny >= 0 && nx < n && ny < m && !visit[nx][ny] && cabbage[nx][ny] == 1)
			{
				visit[nx][ny] = true;
				q.push({ nx,ny });
			}
		}
	}
}

void init(void)
{
	while (!q.empty())
		q.pop();
	for (int i = 0; i < n; i++)
		for (int j = 0; j < m; j++)
		{
			visit[i][j] = false;
			cabbage[i][j] = 0;
		}
}

int main(void)
{
	int t;
	cin >> t;

	for (int i = 0; i < t; i++)
	{
		init();

		cin >> m >> n >> k;
		int cnt = 0;

		for (int i = 0; i < k; i++) 
		{
			int x, y;
			cin >> y >> x;
			cabbage[x][y] = 1;
		}
		for (int i = 0; i < n; i++)
			for (int j = 0; j < m; j++)
				if (cabbage[i][j] == 1 && !visit[i][j])
				{
					bfs(i, j);
					cnt++;
				}
		cout << cnt << '\n';
	}
	return 0;
}

백준 알고리즘 2108번 : 통계학

#include <iostream>
#include <vector>
#include <cmath>
#include <algorithm>

using namespace std;

int main(void)
{
	int n, tmp, mean, mode = 0;
	int min, max = 0;
	bool is_second = false;

	cin >> n;
	vector<int> vec(n);
	vector<int> vec2(8001, 0);

	for (int i = 0; i < n; i++)
	{
		cin >> vec[i];
		mean += vec[i];
		tmp = (vec[i] <= 0) ? abs(vec[i]) : vec[i] + 4000;
		vec2[tmp]++;
		if (vec2[tmp] > max)
			max = vec2[tmp];
	}
	sort(vec.begin(), vec.end());

	for (int i = -4000; i < 4001; i++)
	{
		tmp = i <= 0 ? abs(i) : i + 4000;
		if (vec2[tmp] == max)
		{ 
			mode = i;
			if (is_second)
				break;
			is_second = true;
		}
	}
	cout << round(mean / (double)n) << '\n';
	cout << vec[round(n / 2)] << '\n';
	cout << mode << '\n';
	min = vec[0];
	max = vec[vec.size() - 1];
	cout << max - min << '\n';
	
	return 0;
}

profile
응애 나 애기 개발자

0개의 댓글