[C/C++] Tip

2020. 4. 27. 19:00ยท๐Ÿ“ Computer Science/โœ Algorithm

์ž…์ถœ๋ ฅ

// 1. ์ž…๋ ฅ
// ๊ณต๋ฐฑ, ํƒญ ๋“ฑ์„ ํฌํ•จํ•œ ํ•œ ์ค„ ์ „์ฒด ๋ฌธ์ž์—ด ์ž…๋ ฅ ๋ฐ›๊ธฐ (C++)
getline(cin, string);

// ์ˆซ์ž ํ•œ ์ž๋ฆฌ์”ฉ ์ฝ๊ธฐ (C)
scanf("%1d", &a[i]);

// ์ž…๋ ฅ ์ข…๋ฃŒ ์‹œ๊นŒ์ง€ ์ˆซ์ž๋ฅผ ๊ณ„์† ์ž…๋ ฅ ๋ฐ›๊ธฐ (C, C++)
while (scanf("%d", &n) != EOF)
while (cin >> n)

// 2. ์ถœ๋ ฅ
// ์ž๋ฆฟ์ˆ˜ ์ฑ„์šฐ๊ธฐ (C)
printf("%02d", test); // ์ •์ˆ˜ ์ถœ๋ ฅ ์‹œ, ์ตœ์†Œ 2์ž๋ฆฌ๋กœ ์ถœ๋ ฅํ•˜๋ฉฐ ๋นˆ ์ž๋ฆฌ๋Š” 0์œผ๋กœ ์ฑ„์›€

// ์†Œ์ˆ˜์  ์ž๋ฆฌ ๊ณ ์ • (C, C++)
printf("%.6lf"); // ์†Œ์ˆ˜์  ์•„๋ž˜ 6์ž๋ฆฌ๊นŒ์ง€ ์ถœ๋ ฅ
cout << fixed; // ์‹ค์ˆ˜๋ฅผ ๊ณ ์ • ์†Œ์ˆ˜์  ํ˜•์‹(fixed-point)์œผ๋กœ ์ถœ๋ ฅ
cout.precision(6); // ์†Œ์ˆ˜์  ์•„๋ž˜ 6์ž๋ฆฌ๊นŒ์ง€ ์ถœ๋ ฅ

 

๋ฌธ์ž/๋ฌธ์ž์—ด ๋ณ€ํ™˜

// ๋ฌธ์ž(char)์™€ ์ˆซ์ž(int) ๋ณ€ํ™˜
int num = ch - '0'; // char to int
char ch = num + '0'; // int to char

// ๋ฌธ์ž์—ด(char[])์„ ์ˆซ์ž ๋ณ€ํ™˜ (C)
int n = atoi("123"); // char[] to int
double d = atof("3.14"); // char[] to double
long l = atol("1234567890"); // char[] to long
long long ll = atoll("1234567890123"); // char[] to long long
int num = strtol("123abc", nullptr, 10); // ์ˆซ์ž ๋ถ€๋ถ„๋งŒ ๋ณ€ํ™˜

// ๋ฌธ์ž์—ด(string)์„ ์ˆซ์ž ๋ณ€ํ™˜ (C++)
int n = stoi("123"); // string to int
float f = stof("3.14"); // string to float
double d = stod("2.71828"); // string to double
long l = stol("1234567"); // string to long
long long ll = stoll("9876543210"); // string to long long

// ์ˆซ์ž๋ฅผ ๋ฌธ์ž์—ด(char[]) ๋ณ€ํ™˜ (C)
sprintf(buf, "%d", num); // int to char[]
sprintf(buf, "%.2f", f); // float to char[]

// ์ˆซ์ž๋ฅผ ๋ฌธ์ž์—ด(string) ๋ณ€ํ™˜ (C++)
string s = to_string(123); // int to string
string s2 = to_string(3.14); // float/double to string

 

๋Œ€๋ฌธ์ž์™€ ์†Œ๋ฌธ์ž ๋ณ€ํ™˜

// ๋ฌธ์ž ๋ณ€ํ™˜
char A = ‘a’ - 32; // a๋Š” 97๋ฒˆ
char a = ‘A’ + 32: // A๋Š” 65๋ฒˆ

// ๋ฌธ์ž์—ด ๋ณ€ํ™˜ - ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ด์šฉ
transform(a.begin(), a.end(), a.begin(), toupper)); // ๋Œ€๋ฌธ์ž
transform(a.begin(), a.end(), a.begin(), tolower)); // ์†Œ๋ฌธ์ž

 

์˜ฌ๋ฆผ, ๋ฐ˜์˜ฌ๋ฆผ, ๋‚ด๋ฆผ

ceil() // ์˜ฌ๋ฆผ
round() // ๋ฐ˜์˜ฌ๋ฆผ
floor() // ๋‚ด๋ฆผ

 

N์ง„๋ฒ• ๋ณ€ํ™˜

  • 8์ง„๋ฒ•: 0~7์„ ํฌํ•จํ•˜๊ณ  ์•ž์— '0'์„ ๋ถ™์ธ๋‹ค.
  • 16์ง„๋ฒ•: 0~9์™€ A(10)~F(15)๋ฅผ ํฌํ•จํ•˜๊ณ  ์•ž์— '0x'๋ฅผ ๋ถ™์ธ๋‹ค.
// 10์ง„์ˆ˜(num)๋ฅผ n์ง„์ˆ˜๋กœ
string NumtoN(int num, int n)
{
	char c[16] = { '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F' };

	string s;
	while (num / n) {	// ๋ชซ์ด 0์ด ๋ ๋•Œ๊นŒ์ง€
		s = c[num % n] + s;	// ๋‚˜๋จธ์ง€๋ฅผ ์•ž์— ์ถ”๊ฐ€
		num = num / n;
	}
	return c[num % n] + s;
}

// n์ด 10 ์ดํ•˜์ผ ๋•Œ
string NumtoN(int num, int n)
{
	string nums = "";
	while (num > 0) {
		nums = to_string(num % n) + nums;
		num /= n;
	}
	return nums;
}

 

์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด๋ฅผ ์ด์šฉํ•œ ์†Œ์ˆ˜ ๊ตฌํ•˜๊ธฐ

bool prime[1000001] = { 1,1 };
for (int i = 2; i * i <= end; ++i)
if (!prime[i])	// ์†Œ์ˆ˜์ผ ๋•Œ
for (int j = i * i; j <= end; j += i)
prime[j] = true;


// ์†Œ์ˆ˜ ๊ตฌํ•˜๊ธฐ (ver. ๊ฐ„๋‹จ)
bool IsPrime(long long n)
{
    if (n <= 1)
        return false;
    for (int i = 2; i <= sqrt(n); i++)
        if (n % i == 0)
            return false;
    return true;
}

 

์œ ํด๋ฆฌ๋“œ ํ˜ธ์ œ๋ฒ•์„ ์ด์šฉํ•œ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜(gcd) ๊ตฌํ•˜๊ธฐ

// ๊ฐ„๋‹จํ•œ ๋ฒ„์ „
int gcd(int a, int b) {
	return b == 0 ? a : gcd(b, a % b);
}

// ํ’€ ๋ฒ„์ „
int gcd(int a, int b) {
	while (true) {
		if (a % b == 0)
			break;
		a = b;
		b = a % b;
	}
	return b;
}

// ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜: (a * b) / gcd(a, b)

 

unique() ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•œ vector์—์„œ ์ค‘๋ณต ๊ฐ’ ์‚ญ์ œํ•˜๊ธฐ

sort(v.begin(), v.end()); // ์ •๋ ฌ ํ›„ unique() ํ•จ์ˆ˜ ์ ์šฉ
v.erase(unique(v.begin(),v.end()),v.end());

 

์ด์ค‘ ์ •๋ ฌ

// X์ขŒํ‘œ๊ฐ€ ์ฆ๊ฐ€ํ•˜๋Š” ์ˆœ์œผ๋กœ X์ขŒํ‘œ๊ฐ€ ๊ฐ™์œผ๋ฉด Y ์ขŒํ‘œ๊ฐ€ ์ฆ๊ฐ€ํ•˜๋Š” ์ˆœ์„œ๋กœ ์ •๋ ฌ
sort(arr, arr + n, [](Point& a, Point& b) {
	if (a.first == b.first)
		return a.second < b.second;
	return a.first < b.first;
});

 

๊ฑฐ๋ฆฌ ๊ตฌํ•  ๋•Œ

sqrt(pow(a.first - b.first, 2.0) + pow(a.second - b.second, 2.0));

 

ํ–‰๋ ฌ์˜ ๊ณฑ

// N*M ํฌ๊ธฐ์˜ ํ–‰๋ ฌ A์™€ M*K ํฌ๊ธฐ์˜ ํ–‰๋ ฌ B๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ๋‘ ํ–‰๋ ฌ์„ ๊ณฑ์€?
for (int i = 0; i < n; i++)
	for (int j = 0; j < k; j++)
		for (int k = 0; k < m; k++)
			result[i][j] += (arr[i][k] * arr2[k][j]);

 

๋‘ ์› ์‚ฌ์ด์˜ ๊ต์ 

if (x == x2) {
	if (r1 == r2)
		cout << "-1\n";
	else
		cout << "0\n";
	continue;
}

dist = sprt(pow(x1 - x2, 2) + pow(y1 - y2, 2));
if (r1 + r2 < dist || dist + r1 < r2 || dist + r2 < r1)
	cout << "0\n";
else if (r1 + r2 == dist || dist + r1 == r2 || dist + r2 == r1)
	cout << "1\n";
else
	cout << "2\n";

 

์ €์ž‘์žํ‘œ์‹œ (์ƒˆ์ฐฝ์—ด๋ฆผ)
'๐Ÿ“ Computer Science/โœ Algorithm' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [C++] ๋ธŒ๋ฃจํŠธ ํฌ์Šค(Brute Force)
  • [C++] ํ•ด์‹œ(Hash)
  • [C++] ์ •๋ ฌ(Sort)
  • [C++] ์žฌ๊ท€ ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•œ ํ•˜๋…ธ์ด ํƒ‘
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/C++] Tip
์ƒ๋‹จ์œผ๋กœ

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