[c++] 백준 8단계

알감자·2022년 3월 14일
0

백준알고리즘

목록 보기
7/52

#1712

#include <iostream>
using namespace std;

int main() 
{
	int A, B, C;
	int num = 0;

	cin >> A >> B >> C;

	if (C <= B)
	{
		cout << "-1";
		return 0;
	}

	num = A / (C - B) + 1;
	cout << num;

	//N개의 노트북을 생산한다고 하자.
	//식을 세워보면 C*N > A + N*B 가 된다.
	//N으로 식을 다시 재정의 해보면 N > A/(C-B)가 된다.
}

#2292

#include <iostream>
using namespace std;

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

	int i = 0;
	for (int sum = 2; sum <= N; i++)
	{
		sum += 6 * i;	//등비수열의 합 구하기
	}

	if (N == 1)
		cout << "1";
	else
		cout << i;
	return 0;
}

#1193

#include <iostream>
using namespace std;

int main() 
{
	int X;
	int i;
	cin >> X;

	for (i = 1; i < X; i++)
	{
		X = X - i;
	}

	if (i % 2 == 0)
	{
		cout << X << "/" << i + 1 - X;
	}
	else
	{
		cout << i + 1 - X << "/" << X;
	}

	return 0;
}

#2869

//반복문 사용했더니 시간초과 떠벌임..

#include <iostream>
using namespace std;

int main() 
{
	int A, B, V, i;
	int sum = 0;
	cin >> A >> B >> V;

	for (i = 1; sum < V; i++)
	{
		sum += A;
		if (sum >= V)
			break;
		sum -= B;
	}

	cout << i;

	return 0;
}

//나머지 연산을 사용하여 구하는 방법

  • 정상에 도착하면 미끄러지지 않으므로 목표지점은 V-A가 됨
  • 식을 세워보면 V-A = (A-B) * day
  • 따라서 day = (V-A) / (A-B)
#include <iostream>
using namespace std;

int main() 
{
	int A, B, V, i;
	int day = 1;
	cin >> A >> B >> V;

	day += (V - A) / (A - B);

    //만약 낮에 정상에 도착하지 못한다면 하루 추가
	if ((V - A) % (A - B) != 0)  
		day++;

	if (V <= A)
		cout << "1";
	else
		cout << day;

	return 0;
}

#10250

#include <iostream>
using namespace std;

int main() 
{
	int H, W, N, T;
	cin >> T;
	

	for (int i = 0; i < T; i++)
	{
		cin >> H >> W >> N;

		int row, col;

		if (N % H ==0) 
		{
			col = N / H;
			row = H;
		}
		else
		{
			col = N / H + 1;
			row = N % H;
		}

		cout << row * 100 + col << "\n";
	}

	return 0;
}

#2775

#include <iostream>
using namespace std;

int main() 
{
	int T, k, n;
	int arr[15][15] = { 0 };
	cin >> T;

	for (int i = 0; i < 15; i++)
		arr[0][i] = i;

	for (int j = 1; j < 15; j++)
		for (int l = 1; l < 15; l++)
		{
			for (int m = 1; m <= l; m++)
			{
				arr[j][l] += arr[j - 1][m];
			}
		}

	for (int i = 0; i < T; i++)
	{
		cin >> k >> n;

		cout << arr[k][n] << "\n";
	}

	return 0;
}

#2839

// Greedy 알고리즘

#include <iostream>
using namespace std;

int main() 
{
	int N, x, y;
	cin >> N;

	x = N / 5; //배달해야하는 kg을 우선 5로 나누어 5kg짜리를 최대로 
    가져가게 함

	while (1)
	{
		//5kg 짜리의 개수를 계속 줄이다가 0이 되면 나눌수 없다고 
        판단하고 -1 출력
		if (x < 0)
		{
			cout << "-1";
			return 0;
		}

		if ((N - 5*x) % 3 == 0)
		{
			//5kg짜리 묶음을 먼저 뺀 후 나머지가 3kg짜리로 나뉜다면 
            두 봉지의 값을 더해서 출력
			y = (N - 5 * x) / 3;  
			break;
		}
		x--;  //3kg 짜리로 나뉘지 않는다면 5kg짜리 묶음을 하나 
        풀어서 3kg짜리로 다시 묶어본다.
	}

	cout << x + y;
	return 0;
}

0개의 댓글