int map[3][3] =
{
	3,5,4,
	1,1,2,
	1,3,9
};

int dir[4][2] =
{
	// x, y
	-1, 0, // 좌
	0, -1, // 상
	1, 0, // 우
	0, 1 // 하
};

int sum(int y, int x)
{
	int ret = 0;

	for (int i = 0; i < 4; ++i)
	{
		int dx = x;
		int dy = y;

		dx += dir[i][0];
		dy += dir[i][1];

		if (dx < 0 || 2 < dx || dy < 0 || 2 < dy)
		{
			continue;
		}

		ret += map[dy][dx];
	}

	return ret;
}

int main()
{
	int x, y;
	cin >> x >> y;
	cout << sum(y, x);

	return 0;
}

 


struct Data
{
	Data() = default;
	Data(int x, int y, int z)
		:mx(x), my(y), mz(z) {}
	int mx, my, mz;
};

int main()
{
	Data a, b;

	cin >> a.mx >> a.my >> a.mz;
	cin >> b.mx >> b.my >> b.mz;

	cout << a.mx + b.mx << endl;
	cout << a.my + b.my << endl;
	cout << a.mz + b.mz << endl;
}

 


int StrLen(const char* str)
{
	int len = 0;
	while (str[len]!= '\0')
	{
		++len;
	}

	return len;
}

struct MC
{
	char bugger1[8] = { 0 };
	char bugger2[8] = { 0 };
};

int main()
{
	MC bob, tom;
	cin >> bob.bugger1 >> bob.bugger2;
	cin >> tom.bugger1 >> tom.bugger2;

	cout << "bob.buger1=" << StrLen(bob.bugger1)<<endl;
	cout << "bob.buger2=" << StrLen(bob.bugger2)<<endl;
	cout << "tom.buger1=" << StrLen(tom.bugger1)<<endl;
	cout << "tom.buger2=" << StrLen(tom.bugger2)<<endl;
}

 


int main()
{
	int G;
	cin >> G;

	int* P, * K;
	P = K = &G;

	int** T, ** Q;
	T = &P;
	Q = &K;

	cout << **T << " " << **Q;

	return 0;
}

 


int vect[4][3] = { 0 };

struct CD
{
	int x = 0;
	int y = 0;

	friend istream& operator>>(istream& in, CD& cd)
	{
		in >> cd.x >> cd.y;
		return in;
	}
};

int main()
{
	CD input[4];
	for (auto& d : input)
	{
		cin >> d;
		vect[d.x][d.y] = 5;
	}

	for (int i = 0; i < 4; ++i)
	{
		for (int j = 0; j < 3; ++j)
		{
			cout << vect[i][j] << " ";
		}
		cout << endl;
	}
	return 0;
}

 


bool Compare(const char* a, const char* b)
{
	int i;
	for (i = 0; a[i] != '\0'; ++i)
	{
		if (a[i] != b[i])
		{
			return false;
		}
	}

	if (b[i] != '\0')
	{
		return false;
	}

	return true;
}

struct S
{
	S() = default;
	S(int win, const char* name)
		:mWin(win)
	{
		for (int i = 0; name[i] != '\0'; ++i)
		{
			mName[i] = name[i];
		};
	}; 

	int mWin = 0;
	char mName[100] = { 0 };

	bool operator==(const S& s)
	{
		return (this->mWin == s.mWin && Compare(this->mName, s.mName));
	}

	friend::istream& operator>>(istream& in, S& s)
	{
		in >> s.mWin >> s.mName;
		return in;
	};
};

int main()
{
	S train[7] =
	{
		S(15,"summer"),
		S(33,"cloe"),
		S(24,"summer"),
		S(28,"niki"),
		S(32,"jenny"),
		S(20,"summer"),
		S(40,"coco")
	};

	S tom;
	cin >> tom;

	for (int i = 0; i < 7; ++i)
	{
		if (train[i] == tom)
		{
			cout << i;
			return 0 ;
		}
	}
	return 0;
}

 


#include <iostream>
using namespace std;

int map[5][5] =
{
	3,3,5,3,1,
	2,2,4,2,6,
	4,9,2,3,4,
	1,1,1,1,1,
	3,3,5,9,2
};

int dir[4][2] =
{
	// x, y
	-1, -1, // 좌측상단
	-1, 1, // 좌측 하단
	1, -1, // 우측 상단
	1, 1 // 우측 하단
};

int sum(int y, int x)
{
	int ret = 0;

	
	for (int i = 0; i < 4; ++i)
	{
		// 4방향 합
		int dx = x;
		int dy = y;

		// 좌표 계산
		dx += dir[i][0];
		dy += dir[i][1];

		if (dx < 0 || 4 < dx || dy < 0 || 4 < dy)
		{
			continue;
		}

		ret += map[dy][dx];
	}

	return ret;
}

int main()
{
	int max = -1;
	int fx = -1;
	int fy = -1;
	for (int i = 0; i < 5; ++i)
	{
		for (int j = 0; j < 5; ++j)
		{
			int t = sum(i, j);
			if (max < t)
			{
				max = t;
				fx = j;
				fy = i;
			}
		}
	}

	cout << fy << " " << fx;
	return 0;
}

 


char map[4][5] = { 0 };

struct CD
{
	CD() = default;
	CD(int ax, int ay)
	{
		x = ax; 
		y = ay;
	}

	int x = 0;
	int y = 0;

	CD operator+(const CD& cd) const
	{
		CD ret;
		ret.x = this->x + cd.x;
		ret.y = this->y + cd.y;
		return ret;
	}
};

CD dir[8] =
{
	// x, y
	CD(-1,  0), // 좌
	CD(-1,- 1), // 좌측 상단
	CD( 0, -1), // 상
	CD( 1, -1), // 우측 상단
	CD( 1,  0), // 우
	CD( 1,  1), // 우측 하단
	CD( 0,  1), // 하
	CD(-1,  1) // 좌측 하단
};

void Boom(const CD& cd)
{
	for (const auto& d: dir)
	{

		CD t = cd + d;

		// 예외 처리
		if (t.x < 0 || 5 <= t.x || t.y < 0 || 4 <= t.y)
		{
			continue;
		}

		map[t.y][t.x] = '#';
	}

	return;
}

int main()
{
	memset(map, '-', sizeof(map));

	CD input[2];
	for (auto& d : input)
	{
		cin >> d.x >> d.y;
		Boom(d);
	}

	for (int i = 0; i < 4; ++i)
	{
		for (int j = 0; j < 5; ++j)
		{
			cout << map[i][j] << " ";
		}
		cout << endl;
	}

	return 0;
}

 


int image[4][4] = { 0 };

int rectSum(int y, int x)
{
	int sum = 0;
	for (int i = 0; i < 2; ++i)
	{
		for (int j = 0; j < 3; ++j)
		{
			sum += image[y + i][x + j];
		}
	}

	return sum;
}

int main()
{
	for (int i = 0; i < 4; ++i)
	{
		for (int j = 0; j < 4; ++j)
		{
			cin >> image[i][j];
		}
	}

	int max = -1;
	int my = -1;
	int mx = -1;
	for (int i = 0; i < 3; ++i)
	{
		for (int j = 0; j < 2; ++j)
		{
			int t = rectSum(i, j);
			if (max < t)
			{
				max = t;
				my = i;
				mx = j;
			}
		}
	}

	cout << "(" << my << "," << mx << ")";

	return 0;
}

 


// del : 토큰 이전까지의 문자를 저장
// clean : 토큰 이후의 문자를 저장
void Split(const char* data, const char token, char** del, char** clean)
{
	// 1. 토큰의 인덱스, 문자열 사이즈 구하기
	int tidx = 0;
	bool flag = false;
	int i;
	for (i = 0; data[i] != '\0'; ++i)
	{
		if (flag == false && data[i] == token)
		{
			tidx = i;
			flag = true;
		}
	}
	int size = i; // 문자의 개수(널문자 제외)

	// 2. del에 토큰 이전까지 문자 저장
	*del = new char(tidx + 1);
	for (int j = 0 ;j < tidx; ++j)
	{
		(*del)[j] = data[j];
	}
	(*del)[tidx] = '\0';


	// 3. clean에 토근 이후의 문자열 저장
	*clean = new char(size - tidx);
	for (int j = 0; j <= tidx; ++j)
	{
		(*clean)[j] = data[j + tidx + 1];
	}
	(*clean)[size - tidx] = '\0';

	return;
}

// 문자열을 정수로 변환하는 함수
int StoI(const char* str)
{
	int ret = 0;
	for (int i = 0; str[i] != '\0'; ++i)
	{
		ret *= 10;
		ret += str[i] - '0';
	}
	return ret;
}

class Date
{
public:

	Date() = default;
	Date(int y, int m, int d)
		:my(y), mm(m), md(d)
	{};
	Date(const char* str)
	{
		char* temp;
		char* py;
		char* pm;
		char* pd;
		Split(str, '/', &py, &temp);
		Split(temp, '/', &pm, &pd);

		my = StoI(py);
		mm = StoI(pm);
		md = StoI(pd);

		delete temp;
		delete py;
		delete pm;
		delete pd;
	}

	void show()
	{
		cout << my << "년" << mm << "월" << md << "일" << endl;
	}

	int getYear() { return my; };
	int getMonth() { return mm; };
	int getDay() { return md; };

private:
	int my = 0;
	int mm = 0;
	int md = 0;
};

int main()
{
	Date birth(2014, 3, 20);
	Date independenceDay("1945/8/15");
	independenceDay.show();
	cout << birth.getYear() << ',' << birth.getMonth() << ',' << birth.getDay() << endl;

	return 0;
}

'코딩 테스트 > 알고리즘 풀이' 카테고리의 다른 글

[LV5] 연습 문제  (0) 2025.04.21
[LV4] 복습 문제  (1) 2025.04.21
[LV3] 복습 문제  (0) 2025.04.15
[LV3] 연습 문제  (0) 2025.04.14
[LV1] 복습 문제  (0) 2025.04.13

+ Recent posts