[C++] ๋ฐฑ ํŠธ๋ž˜ํ‚น(Back Tracking)

2020. 4. 29. 18:35ยท๐Ÿ“ Computer Science/โœ Algorithm

๋ฐฑ ํŠธ๋ž˜ํ‚น(Back Tracking)

ํ•œ์ • ์กฐ๊ฑด์ด ์ฃผ์–ด์กŒ์„ ๋•Œ ํ•ด๋ฅผ ์–ป์„ ๋•Œ๊นŒ์ง€ ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ฒ€์‚ฌํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ๊ฐ€๋‹ค๊ฐ€ ๋‹ค์‹œ ๋Œ์•„์™€์„œ ๋‹ค๋ฅธ ๊ธธ๋กœ ๊ฐ„๋‹ค.

  • ๋ชจ๋“  ๊ฒฝ์šฐ๋ฅผ ๊ณ ๋ คํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์žฌ๊ท€ ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•œ DFS๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

 

๊ธฐ๋ณธ ์›๋ฆฌ

 

https://www.acmicpc.net/problem/15649

 

15649๋ฒˆ: N๊ณผ M (1)

ํ•œ ์ค„์— ํ•˜๋‚˜์”ฉ ๋ฌธ์ œ์˜ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ์ˆ˜์—ด์„ ์ถœ๋ ฅํ•œ๋‹ค. ์ค‘๋ณต๋˜๋Š” ์ˆ˜์—ด์„ ์—ฌ๋Ÿฌ ๋ฒˆ ์ถœ๋ ฅํ•˜๋ฉด ์•ˆ๋˜๋ฉฐ, ๊ฐ ์ˆ˜์—ด์€ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„ํ•ด์„œ ์ถœ๋ ฅํ•ด์•ผ ํ•œ๋‹ค. ์ˆ˜์—ด์€ ์‚ฌ์ „ ์ˆœ์œผ๋กœ ์ฆ๊ฐ€ํ•˜๋Š” ์ˆœ์„œ๋กœ ์ถœ๋ ฅํ•ด์•ผ ํ•œ๋‹ค.

www.acmicpc.net

#include <iostream>
using namespace std;

int n, m;
int number[8]; 
bool ck[9];

// ์ค‘๋ณต ์—†์ด M๊ฐœ๋ฅผ ๊ณ ๋ฅธ ์ˆ˜์—ด
void DFS(int t)
{
	if (t == m) {
		for (int i = 0; i < m; i++)
			cout << number[i] << ' ';
		cout << '\n';
		return;
	}

	for (int i = 1; i <= n; i++) {
		if (!ck[i]) {
			ck[i] = true;
			number[t] = i;
			DFS(t + 1);
			ck[i] = false;
		}
	}
}

int main() 
{
	cin >> n >> m;
	DFS(0);
}

 

https://www.acmicpc.net/problem/15650

 

15650๋ฒˆ: N๊ณผ M (2)

ํ•œ ์ค„์— ํ•˜๋‚˜์”ฉ ๋ฌธ์ œ์˜ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ์ˆ˜์—ด์„ ์ถœ๋ ฅํ•œ๋‹ค. ์ค‘๋ณต๋˜๋Š” ์ˆ˜์—ด์„ ์—ฌ๋Ÿฌ ๋ฒˆ ์ถœ๋ ฅํ•˜๋ฉด ์•ˆ๋˜๋ฉฐ, ๊ฐ ์ˆ˜์—ด์€ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„ํ•ด์„œ ์ถœ๋ ฅํ•ด์•ผ ํ•œ๋‹ค. ์ˆ˜์—ด์€ ์‚ฌ์ „ ์ˆœ์œผ๋กœ ์ฆ๊ฐ€ํ•˜๋Š” ์ˆœ์„œ๋กœ ์ถœ๋ ฅํ•ด์•ผ ํ•œ๋‹ค.

www.acmicpc.net

#include <iostream>
using namespace std;

int n, m;
int number[8];

// ์ค‘๋ณต ์—†์ด M๊ฐœ๋ฅผ ๊ณ ๋ฅธ ์˜ค๋ฆ„์ฐจ์ˆœ ์ˆ˜์—ด
void DFS(int t, int cnt)
{
	if (t == m) {
		for (int i = 0; i < m; i++)
			cout << number[i] << ' ';
		cout << '\n';
		return;
	}

	for (int i = cnt; i <= n; i++) {
		number[t] = i;
		DFS(t + 1, i + 1);
	}
}

int main()
{
	cin >> n >> m;
	DFS(0, 1);
}

 

https://www.acmicpc.net/problem/15651

 

15651๋ฒˆ: N๊ณผ M (3)

ํ•œ ์ค„์— ํ•˜๋‚˜์”ฉ ๋ฌธ์ œ์˜ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ์ˆ˜์—ด์„ ์ถœ๋ ฅํ•œ๋‹ค. ์ค‘๋ณต๋˜๋Š” ์ˆ˜์—ด์„ ์—ฌ๋Ÿฌ ๋ฒˆ ์ถœ๋ ฅํ•˜๋ฉด ์•ˆ๋˜๋ฉฐ, ๊ฐ ์ˆ˜์—ด์€ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„ํ•ด์„œ ์ถœ๋ ฅํ•ด์•ผ ํ•œ๋‹ค. ์ˆ˜์—ด์€ ์‚ฌ์ „ ์ˆœ์œผ๋กœ ์ฆ๊ฐ€ํ•˜๋Š” ์ˆœ์„œ๋กœ ์ถœ๋ ฅํ•ด์•ผ ํ•œ๋‹ค.

www.acmicpc.net

#include <iostream>
using namespace std;

int n, m;
int number[8];

// ์ค‘๋ณต ํ—ˆ์šฉํ•˜๊ณ  M๊ฐœ๋ฅผ ๊ณ ๋ฅธ ์ˆ˜์—ด
void DFS(int t)
{
	if (t == m) {
		for (int i = 0; i < m; i++)
			cout << number[i] << ' ';
		cout << '\n';
		return;
	}

	for (int i = 1; i <= n; i++) {
		number[t] = i;
		DFS(t + 1);
	}
}

int main() 
{
	cin >> n >> m;
	DFS(0);
}

 

https://www.acmicpc.net/problem/15652

 

15652๋ฒˆ: N๊ณผ M (4)

ํ•œ ์ค„์— ํ•˜๋‚˜์”ฉ ๋ฌธ์ œ์˜ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ์ˆ˜์—ด์„ ์ถœ๋ ฅํ•œ๋‹ค. ์ค‘๋ณต๋˜๋Š” ์ˆ˜์—ด์„ ์—ฌ๋Ÿฌ ๋ฒˆ ์ถœ๋ ฅํ•˜๋ฉด ์•ˆ๋˜๋ฉฐ, ๊ฐ ์ˆ˜์—ด์€ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„ํ•ด์„œ ์ถœ๋ ฅํ•ด์•ผ ํ•œ๋‹ค. ์ˆ˜์—ด์€ ์‚ฌ์ „ ์ˆœ์œผ๋กœ ์ฆ๊ฐ€ํ•˜๋Š” ์ˆœ์„œ๋กœ ์ถœ๋ ฅํ•ด์•ผ ํ•œ๋‹ค.

www.acmicpc.net

#include <iostream>
using namespace std;

int n, m;
int number[8];

// ์ค‘๋ณต ํ—ˆ์šฉํ•˜๊ณ  M๊ฐœ๋ฅผ ๊ณ ๋ฅธ ๋น„๋‚ด๋ฆผ์ฐจ์ˆœ ์ˆ˜์—ด
// ๋น„๋‚ด๋ฆผ์ฐจ์ˆœ ์ˆ˜์—ด: ๊ธธ์ด๊ฐ€ K์ธ ์ˆ˜์—ด A๊ฐ€ A1 ≤ A2 ≤ ... ≤ AK-1 ≤ AK๋ฅผ ๋งŒ์กฑํ•˜๋Š” ์ˆ˜์—ด
void DFS(int t, int cnt)
{
	if (t == m)	{
		for (int i = 0; i < m; i++)
			cout << number[i] << ' ';
		cout << '\n';
		return;
	}

	for (int i = cnt; i <= n; i++)	{
		number[t] = i;
		DFS(t + 1, i);
	}
}

int main() 
{
	cin >> n >> m;
	DFS(0, 1);
}

 

๋ฌธ์ œ

 

https://www.acmicpc.net/problem/14889

 

14889๋ฒˆ: ์Šคํƒ€ํŠธ์™€ ๋งํฌ

์˜ˆ์ œ 2์˜ ๊ฒฝ์šฐ์— (1, 3, 6), (2, 4, 5)๋กœ ํŒ€์„ ๋‚˜๋ˆ„๋ฉด ๋˜๊ณ , ์˜ˆ์ œ 3์˜ ๊ฒฝ์šฐ์—๋Š” (1, 2, 4, 5), (3, 6, 7, 8)๋กœ ํŒ€์„ ๋‚˜๋ˆ„๋ฉด ๋œ๋‹ค.

www.acmicpc.net

#include <iostream>
using namespace std;

int answer = 1e9;
int N, arr[20][20], start[10];

void dfs(int index, int count)
{
	if (index == N / 2) {
		int link[10]{};
		for (int i = 0, index1 = 0, index2 = 0; i < N; ++i)
			start[index1] == i ? index1++ : link[index2++] = i;

		int t1 = 0, t2 = 0;
		for (int i = 0; i < N / 2; ++i)
			for (int j = i + 1; j < N / 2; ++j) {
				t1 += arr[start[i]][start[j]] + arr[start[j]][start[i]];
				t2 += arr[link[i]][link[j]] + arr[link[j]][link[i]];
			}

		if (abs(t1 - t2) < answer)
			answer = abs(t1 - t2);
		return;
	}

	for (int i = count; i < N; ++i) {
		start[index] = i;
		dfs(index + 1, i + 1);
	}
}

int main()
{
	cin >> N;
	for (int i = 0; i < N; ++i)
		for (int j = 0; j < N; ++j)
			cin >> arr[i][j];

	dfs(0, 0);
	cout << answer;
}

 

https://www.acmicpc.net/problem/1182

 

1182๋ฒˆ: ๋ถ€๋ถ„์ˆ˜์—ด์˜ ํ•ฉ

์ฒซ์งธ ์ค„์— ์ •์ˆ˜์˜ ๊ฐœ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” N๊ณผ ์ •์ˆ˜ S๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (1 ≤ N ≤ 20, |S| ≤ 1,000,000) ๋‘˜์งธ ์ค„์— N๊ฐœ์˜ ์ •์ˆ˜๊ฐ€ ๋นˆ ์นธ์„ ์‚ฌ์ด์— ๋‘๊ณ  ์ฃผ์–ด์ง„๋‹ค. ์ฃผ์–ด์ง€๋Š” ์ •์ˆ˜์˜ ์ ˆ๋Œ“๊ฐ’์€ 100,000์„ ๋„˜์ง€ ์•Š๋Š”๋‹ค.

www.acmicpc.net

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

int answer, N, S;
int num[20], subsequence[20];

void dfs(int index, int count, int subsequenceCount)
{
	if (index == subsequenceCount) {
		int sum = 0;
		for (int i = 0; i < subsequenceCount; i++)
			sum += subsequence[i];
		if (sum == S)
			answer++;
		return;
	}

	for (int i = count; i < N; i++) {
		subsequence[index] = num[i];
		dfs(index + 1, i + 1, subsequenceCount);
	}
}

int main()
{
	cin >> N >> S;
	for (int i = 0; i < N; ++i)
		cin >> num[i];

	for (int i = 1; i <= N; ++i)
		dfs(0, 0, i);

	cout << answer;
}

 

https://www.acmicpc.net/problem/2661

 

2661๋ฒˆ: ์ข‹์€์ˆ˜์—ด

์ฒซ ๋ฒˆ์งธ ์ค„์— 1, 2, 3์œผ๋กœ๋งŒ ์ด๋ฃจ์–ด์ ธ ์žˆ๋Š” ๊ธธ์ด๊ฐ€ N์ธ ์ข‹์€ ์ˆ˜์—ด๋“ค ์ค‘์—์„œ ๊ฐ€์žฅ ์ž‘์€ ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ˆ˜์—ด๋งŒ ์ถœ๋ ฅํ•œ๋‹ค. ์ˆ˜์—ด์„ ์ด๋ฃจ๋Š” 1, 2, 3๋“ค ์‚ฌ์ด์—๋Š” ๋นˆ์นธ์„ ๋‘์ง€ ์•Š๋Š”๋‹ค.

www.acmicpc.net

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

int N;

void dfs(int index, string s)
{
	if (index == N) {
		cout << s;
		exit(0);
	}

	for (int i = 1; i <= 3; ++i) {
		string tmp = s + to_string(i);

		bool good = true;
		for (int j = 1, k = tmp.size() - 1; j <= tmp.size() / 2; ++j, --k)
			if (tmp.substr(k, j) == tmp.substr(k - j, j)) {
				good = false;
				break;
			}

		if (good)
			dfs(index + 1, tmp);
	}
}

int main()
{
	cin >> N;
	dfs(0, "");
}

 

https://www.acmicpc.net/problem/9663

 

9663๋ฒˆ: N-Queen

N-Queen ๋ฌธ์ œ๋Š” ํฌ๊ธฐ๊ฐ€ N × N์ธ ์ฒด์ŠคํŒ ์œ„์— ํ€ธ N๊ฐœ๋ฅผ ์„œ๋กœ ๊ณต๊ฒฉํ•  ์ˆ˜ ์—†๊ฒŒ ๋†“๋Š” ๋ฌธ์ œ์ด๋‹ค. N์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, ํ€ธ์„ ๋†“๋Š” ๋ฐฉ๋ฒ•์˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

www.acmicpc.net

#include <iostream>
using namespace std;

int n, answer;
bool row[15], right_diagonal[30], left_diagonal[30];

// NxN ์ฒด์ŠคํŒ ์œ„์— ํ€ธ N๊ฐœ๋ฅผ ์„œ๋กœ ๊ณต๊ฒฉํ•  ์ˆ˜ ์—†๊ฒŒ ๋†“๋Š” ๋ฐฉ๋ฒ•์˜ ์ˆ˜
// ๋‹ค๋ฅธ ํ€ธ์ด ๊ฐ€๋กœ, ์„ธ๋กœ, ๋Œ€๊ฐ์„ ์— ์žˆ์œผ๋ฉด ์•ˆ๋œ๋‹ค.
void dfs(int cnt) 
{
	if (cnt == n) {
		answer++;
		return;
	}

	for (int i = 0; i < n; i++) {
		if (row[i] || right_diagonal[i + cnt] || left_diagonal[n - 1 - i + cnt])
			continue;

		row[i] = right_diagonal[i + cnt] = left_diagonal[n - 1 - i + cnt] = true;
		dfs(cnt + 1);
		row[i] = right_diagonal[i + cnt] = left_diagonal[n - 1 - i + cnt] = false;
	}
}

int main()
{
	cin >> n;
	dfs(0);
	cout << answer;
}

 

https://leetcode.com/problems/n-queens/description/

 

N-Queens - LeetCode

Can you solve this real interview question? N-Queens - The n-queens puzzle is the problem of placing n queens on an n x n chessboard such that no two queens attack each other. Given an integer n, return all distinct solutions to the n-queens puzzle. You ma

leetcode.com

#include <vector>
#include <string>
#include <math.h>
using namespace std;

class Solution {
public:
    vector<vector<string>> answer;
    int check[9];

    bool IsValid(int row)
    {
        for (int i = 0; i < row; i++)
            if (check[row] == check[i] || abs(check[row] - check[i]) == abs(row - i))
                return false;
        return true;
    }

    void DFS(int n, int row)
    {
        if (n == row) {
            vector<string> temp;
            for (int i = 0; i < n; ++i) {
                string s = "";
                for (int j = 0; j < n; ++j)
                    s += (check[i] == j ? "Q" : ".");
                temp.push_back(s);
            }
            answer.push_back(temp);
            return;
        }

        for (int i = 0; i < n; ++i) {
            check[row] = i;
            if (IsValid(row))
                DFS(n, row + 1);
        }
    }

    vector<vector<string>> solveNQueens(int n) {
        DFS(n, 0);
        return answer;
    }
};

 

https://www.acmicpc.net/problem/2580

 

2580๋ฒˆ: ์Šค๋„์ฟ 

์Šค๋„์ฟ ๋Š” 18์„ธ๊ธฐ ์Šค์œ„์Šค ์ˆ˜ํ•™์ž๊ฐ€ ๋งŒ๋“  '๋ผํ‹ด ์‚ฌ๊ฐํ˜•'์ด๋ž‘ ํผ์ฆ์—์„œ ์œ ๋ž˜ํ•œ ๊ฒƒ์œผ๋กœ ํ˜„์žฌ ๋งŽ์€ ์ธ๊ธฐ๋ฅผ ๋ˆ„๋ฆฌ๊ณ  ์žˆ๋‹ค. ์ด ๊ฒŒ์ž„์€ ์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ๊ฐ€๋กœ, ์„ธ๋กœ ๊ฐ๊ฐ 9๊ฐœ์”ฉ ์ด 81๊ฐœ์˜ ์ž‘์€ ์นธ์œผ๋กœ ์ด๋ฃจ

www.acmicpc.net

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

int board[9][9];
vector<pair<int, int>> emptyPoint;

void dfs(int index)
{
	if (index == emptyPoint.size()) {
		for (int i = 0; i < 9; ++i) {
			for (int j = 0; j < 9; ++j)
				cout << board[i][j] << ' ';
			cout << '\n';
		}
		exit(0);
	}

	for (int i = 1; i <= 9; ++i) {
		pair<int, int> point = emptyPoint[index];
		bool flag = true;

		int dir[9][2]{ {0, 0}, {0, 1}, {0, 2}, {1, 0}, {1, 1}, {1, 2}, {2, 0}, {2, 1}, {2, 2} };
		for (int j = 0; j < 9; ++j) {
			if (board[point.first][j] == i || board[j][point.second] == i ||
				board[point.first / 3 * 3 + dir[j][0]][point.second / 3 * 3 + dir[j][1]] == i) {
				flag = false;
				break;
			}
		}

		if (flag) {
			board[point.first][point.second] = i;
			dfs(index + 1);
			board[point.first][point.second] = 0;
		}
	}
}

int main()
{
	for (int i = 0; i < 9; ++i)
		for (int j = 0; j < 9; ++j) {
			cin >> board[i][j];

			if (board[i][j] == 0)
				emptyPoint.push_back({ i ,j });
		}

	dfs(0);
}

 

https://leetcode.com/problems/sudoku-solver/

 

Sudoku Solver - LeetCode

Sudoku Solver - Write a program to solve a Sudoku puzzle by filling the empty cells. A sudoku solution must satisfy all of the following rules: 1. Each of the digits 1-9 must occur exactly once in each row. 2. Each of the digits 1-9 must occur exactly once

leetcode.com

#include <iostream>
#include <vector>
#include <unordered_set>
using namespace std;

class Solution {
public:
	vector<unordered_set<int>> rows;
	vector<unordered_set<int>> cols;
	vector<unordered_set<int>> boxes;

	void solveSudoku(vector<vector<char>>& board)
	{
		rows.resize(9);
		cols.resize(9);
		boxes.resize(9);

		for (int i = 0; i < 9; ++i)
			for (int j = 0; j < 9; ++j)
				if (board[i][j] != '.')
					insert(i, j, board[i][j] - '0');

		fill(board, 0, 0);
	}

	bool fill(vector<vector<char>>& board, int i, int j)
	{
		if (i == 8 && j == 9)
			return true;
		if (j == 9) {
			i++;
			j = 0;
		}

		if (board[i][j] == '.') {
			for (int value = 1; value < 10; value++) {
				if (isValid(i, j, value)) {
					board[i][j] = value + '0';
					if (fill(board, i, j + 1))
						return true;
					board[i][j] = '.';
					erase(i, j, value);
				}
			}
			return false;
		}

		return fill(board, i, j + 1);
	}

	bool isValid(int i, int j, int value)
	{
		if (rows[i].find(value) == rows[i].end() && 
			cols[j].find(value) == cols[j].end() && 
			boxes[(i / 3) * 3 + (j / 3)].find(value) == boxes[(i / 3) * 3 + (j / 3)].end())
		{
			insert(i, j, value);
			return true;
		}
		return false;
	}

	void insert(int i, int j, int value)
	{
		rows[i].insert(value);
		cols[j].insert(value);
		boxes[(i / 3) * 3 + (j / 3)].insert(value);
	}

	void erase(int i, int j, int value)
	{
		rows[i].erase(value);
		cols[j].erase(value);
		boxes[(i / 3) * 3 + (j / 3)].erase(value);
	}
};

 

https://leetcode.com/problems/letter-combinations-of-a-phone-number/submissions/

 

Letter Combinations of a Phone Number - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

#include <vector>
#include <string>
#include <algorithm>
using namespace std;

class Solution {
public:
    vector<string> answer;
    string digitsToLetters[10] = { "", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz" };

    void makeLetters(string digits, string letters, int digitIndex) {
        if (digits.size() == digitIndex) {
            answer.push_back(letters);
            return;
        }

        int num = digits[digitIndex] - '0';
        for (int i = 0; i < digitsToLetters[num].size(); ++i)
            makeLetters(digits, letters + digitsToLetters[num][i], digitIndex + 1);
    }

    vector<string> letterCombinations(string digits) {
        if (digits != "") {
            makeLetters(digits, "", 0);
            sort(answer.begin(), answer.end());
        }

        return answer;
    }
};

 

https://leetcode.com/problems/generate-parentheses/

 

Generate Parentheses - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

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

class Solution {
public:
    vector<string> answer;

    vector<string> generateParenthesis(int n) {
        parenthesisCombinations("", 0, 0, n);
        return answer;
    }

    void parenthesisCombinations(string s, int left, int right, int n) {
        if (s.length() == n * 2) {
            answer.push_back(s);
            return;
        }

        if (left < n)
            parenthesisCombinations(s + "(", left + 1, right, n);
        if (left > right)
            parenthesisCombinations(s + ")", left, right + 1, n);
    }
};
์ €์ž‘์žํ‘œ์‹œ (์ƒˆ์ฐฝ์—ด๋ฆผ)
'๐Ÿ“ Computer Science/โœ Algorithm' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [C++] ๋ถ„ํ•  ์ •๋ณต(Divide and Conquer)
  • [C++] ๊ทธ๋ฆฌ๋””(Greedy)
  • [C++] ๋ธŒ๋ฃจํŠธ ํฌ์Šค(Brute Force)
  • [C++] ํ•ด์‹œ(Hash)
Blxxming
Blxxming
CS ์ง€์‹๊ณผ ๊ณต๋ถ€ํ•˜๋‹ค ๋ฐฐ์šด ๊ฒƒ, ๊ฒฝํ—˜ํ•œ ๊ฒƒ ๋“ฑ์„ ๊ธฐ๋กํ•˜๋Š” ๋ธ”๋กœ๊ทธ์ž…๋‹ˆ๋‹ค.
  • Blxxming
    ๐Ÿ’ก๋ฒˆ๋œฉ๐Ÿ’ก
    Blxxming
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
  • ๊ณต์ง€์‚ฌํ•ญ

    • Tech Interview
    • ๐Ÿ“š Tech (246)
      • ๐Ÿ“ Computer Science (96)
        • โœ OS (12)
        • โœ Network & Web (10)
        • โœ Database (11)
        • โœ Data Structure (6)
        • โœ Algorithm (40)
        • โœ Design Pattern (9)
        • โœ Cloud Computing (3)
        • โœ (5)
      • ๐Ÿ“ Language (73)
        • โœ Language (6)
        • โœ C & C++ (11)
        • โœ C# (19)
        • โœ JAVA (37)
      • ๐Ÿ“ Game (43)
        • โœ Computer Graphics (2)
        • โœ Unity (14)
        • โœ Unreal (26)
        • โœ (1)
      • ๐Ÿ“ Book (34)
        • โœ Effective (3)
        • โœ Game Server (16)
        • โœ Clean Code (14)
        • โœ (1)
  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.0
Blxxming
[C++] ๋ฐฑ ํŠธ๋ž˜ํ‚น(Back Tracking)
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”