no image
[C++] 백준 9단계 - 5086번 문제 (배수와 약수)
문제설명 소스코드 #include using namespace std; int main() { int a, b; while (true) { cin >> a >> b; if ((a == 0) && (b == 0)) break; if (b % a == 0)cout
2023.05.10
no image
[C++] 백준 8단계 - 10757번 문제 (큰 수 A+B)
문제설명 소스코드 #include using namespace std; int main() { string inputA, inputB; string tmp = ""; string result = ""; short A, B, digit; bool carry = false; cin >> inputA >> inputB; if (inputA.length() = 0; --i) { A = inputA[i] ..
2023.05.09
no image
[C++] 백준 10단계 - 27323번 문제 (직사각형)
문제설명 소스코드 #include using namespace std; int main() { int A; int B; cin >> A >> B; cout
2023.05.09
no image
[C++] 백준 8단계 - 2869번 문제 (달팽이는 올라가고 싶다)
문제설명 소스코드 #include using namespace std; int main() { int A; int B; int V; cin >> A >> B >> V; int count = (V - A) / (A - B); if ((V - A) % (A - B) == 0) count += 1; else count += 2; cout
2023.05.08
no image
[C++] 백준 8단계 - 2292번 문제 (벌집)
문제설명 소스코드 #include using namespace std; int main() { int N; int idx = 1; cin >> N; --N; while (N > 0) { N -= (idx * 6); ++idx; } cout 2 -> 8 -> 20 -> 38 -> 62 ... 즉 첫번째 항을 제외하고, 6의 배수로 증가하는 수열이다. 따라서 N을 맨 처음에 1빼주고 계속 6의 배수만큼 빼주고 idx를 1증가 시킨다. N이 0 또는 음수가 되면 루프를 탈출한다. idx를 출력한다.
2023.04.25
no image
[C++] 백준 11718번 문제 (그대로 출력하기)
문제설명 소스코드 #include #include using namespace std; int main() { string input; while (true) { getline(cin, input); if (input == "") return 0; cout
2023.04.25
no image
[C++] 백준 8단계 - 2903번 문제 (중앙 이동 알고리즘)
문제설명 소스코드 #include #include using namespace std; int main() { int N; int arr[16] = { 0 }; arr[0] = 0; int dot = 0; cin >> N; for (int i = 1; i 5² -> 9²...로 증가하는 수열이다. 밑인 2, 3, 5, 9...의 수열(a')의 규칙은 아래와 같다. 따라서 밑수를 제곱한 값이 정답이 된다.
2023.04.24
no image
[C++] 백준 8단계 - 2720번 문제 (세탁소 사장 동혁)
문제설명 소스코드 #include using namespace std; int main() { int T; int Q; int D; int N; int P; cin >> T; int* arr = new int[T]; for (int i = 0; i > arr[i]; Q = arr[i] / 25; P = arr[i] % 25; D = P / 10; P %= 10; N = P / 5; P %= 5; cout
2023.04.23

문제설명

 

소스코드

#include <iostream>
using namespace std;
int main()
{
	int a, b;
	while (true)
	{
		cin >> a >> b;
		if ((a == 0) && (b == 0)) break;
		if (b % a == 0)cout << "factor" << endl;
		else if (a % b == 0) cout << "multiple" << endl;
		else cout << "neither" << endl;
	}
}

문제설명

 

소스코드

#include <iostream>
using namespace std;
int main() {
	string inputA, inputB;
	string tmp = ""; string result = "";
	short A, B, digit; bool carry = false;
	cin >> inputA >> inputB;
	if (inputA.length() < inputB.length()) swap(inputA, inputB);
	for (int i = 0; i < (inputA.length() - inputB.length()); ++i) tmp += "0";
	inputB = tmp + inputB;
	for (int i = inputA.length() - 1; i >= 0; --i)
	{
		A = inputA[i] - '0'; B = inputB[i] - '0';
		digit = A + B;
		if (carry == true) { digit += 1; carry = false; }
		if (digit > 9) carry = true;
		result += digit % 10 + '0';
	}
	if (carry == true) result += "1";
	for (int i = 0; i < result.length(); ++i)
	{
		cout << result[result.length() - 1 - i];
	}
}

 

풀이

  • C계열 언어에선 브론즈5 문제가 절대 아님.
  • inputA와 inputB의 길이중 inputB의 길이가 더 크다면 둘의 내용을 바꾼다(swap)
  • inputA와 inputB의 길이 차이만큼 tmp에 "0"을 추가한다. (자리수 맞추기 ex) 1234와 0001)
  • inputB = tmp + inputB (자리수 맞추기 ex) 1234와 0001)
  • inputA와 inputB의 1의 자리수를 A와 B로 설정(- '0'을 함으로 to_string함수를 안써도 된다.)
  • 올림수가 있으면 digit을 1올린다.
  • digit이 9 초과이면 올림수가 있음을 표시한다.
  • result에 digit의 1의자리만 추가한다. (+ '0'을 함으로 to_string함수를 안써도 된다.)
  • for문 밖에서 올림수가 있는지 검사한다. 올림수가 있으면 "1"을 추가한다.(30+70 = "00" + "1")
  • result를 뒤집어서 출력한다.

문제설명

 

소스코드

#include <iostream>
using namespace std;
int main() {
    int A; int B;
    cin >> A >> B;
    cout << A * B;
}

문제설명

 

소스코드

#include <iostream>
using namespace std;
int main()
{
	int A; int B; int V;
	cin >> A >> B >> V;
	int count = (V - A) / (A - B);
	if ((V - A) % (A - B) == 0) count += 1;
	else count += 2;
	cout << count;
}

 

풀이

  • 반복문으로 풀면 무조건 시간초과가 발생한다.
  • 정상에 일단 오르면 미끄러지지않으므로 최종적으로 가야하는 목표는 V가 아닌 V-A까지만 가면 다음날 A만큼 올라서 정상에 갈 수 있다.
  • V-A를 가는데 걸리는 기간은 (V-A) / (A-B)이다. 즉 count = (V-A) / (A-B)
  • (V-A) % (A-B) == 0일 경우 : count에 +1만큼 더해준다.(+1을 하는 이유는 V-A까지만 갔기 때문이다.)
  • (V-A) % (A-B) != 0일 경우  : count에 +2만큼 더해준다.((V-A) % (A-B)가 0이 아니므로 정상에 도달하기에 하루가 더 필요함) 

문제설명

 

소스코드

#include <iostream>
using namespace std;
int main()
{
	int N; int idx = 1;
	cin >> N;
	--N;
	while (N > 0)
	{
		N -= (idx * 6);
		++idx;
	}
	cout << idx;
}

 

풀이

  • 정육각형의 각 변에 정육각형이 계속 붙는 벌집구조이다.

  • 첫 정육각형에서 다음으로 큰 정육각형 그 다음으로 큰 정육각형....의 시작 순서는 아래와 같다.
  • 1 -> 2 -> 8 -> 20 -> 38 -> 62 ...
  • 즉 첫번째 항을 제외하고, 6의 배수로 증가하는 수열이다.
  • 따라서 N을 맨 처음에 1빼주고 계속 6의 배수만큼 빼주고 idx를 1증가 시킨다.
  • N이 0 또는 음수가 되면 루프를 탈출한다.
  • idx를 출력한다.

문제설명

 

소스코드

#include <iostream>
#include <string>
using namespace std;
int main()
{
	string input;
	while (true)
	{
		getline(cin, input);
		if (input == "") return 0;
		cout << input << endl;
	}
}

문제설명

 

소스코드

#include <iostream>
#include <math.h>
using namespace std;
int main()
{
	int N; int arr[16] = { 0 };
	arr[0] = 0; int dot = 0;
	cin >> N;
	for (int i = 1; i <= N; ++i)
	{
		arr[i] = arr[i - 1] + pow(2, i-1);
		dot = arr[i] + 2;
	}
	cout << dot * dot;
}

 

풀이

  • 위 문제는 2² -> 3² -> 5² -> 9²...로 증가하는 수열이다.
  • 밑인 2, 3, 5, 9...의 수열(a')의 규칙은 아래와 같다.

  • 따라서 밑수를 제곱한 값이 정답이 된다.

 

문제설명

 

소스코드

#include <iostream>
using namespace std;
int main() 
{
	int T; int Q; int D; int N; int P;
	cin >> T;
	int* arr = new int[T];
	for (int i = 0; i < T; ++i)
	{
		cin >> arr[i];
		Q = arr[i] / 25;
		P = arr[i] % 25;
		D = P / 10;
		P %= 10;
		N = P / 5;
		P %= 5;
		cout << Q << " " << D << " " << N << " " << P << endl;
	}
}

 

풀이

  • 거스름 돈의 최대값은 5달러이다. 또한 거스름돈의 달러는 센트이다.(1센트 = 0.01달러)
  • 쿼터는 25센트, 다임은 10센트, 니켈은 5센트, 페니는 1센트이다.
  • 거스름돈에서 각 동전의 단위를 나눈 후 몫(/)은 각 동전 변수에, 나머지(%)는 페니 변수에 대입한다.
  • 쿼터 -> 다임 -> 니켈까지 구했다면 페니에 들어가야할 값은 이미 구해졌으므로 그대로 출력한다.