no image
[C++] 백준 10단계 - 9063번 문제 (대지)
문제설명 소스코드 #include using namespace std; int main() { int N; int minx = 100000; int maxx = -100000; int miny = 100000; int maxy = -100000; cin >> N; int* x = new int[N]; //N만큼 동적할당 int* y = new int[N]; //N만큼 동적할당 for (int i = 0; i > x[i] >> y[i]; if (minx > x[i]) minx = x[i]; if (maxx y[i]) miny = y[i]; if (maxy < y[i]) maxy = y[i]; } cout
2023.05.14
no image
[C++] 백준 10단계 - 15894번 문제 (수학은 체육과목 입니다)
문제설명 소스코드 #include using namespace std; int main() { unsigned int N; cin >> N; cout
2023.05.13
no image
[C++] 백준 10단계 - 3009번 문제 (네 번째 점)
문제설명 소스코드 #include using namespace std; int main() { int x[3]; int y[3]; for (int i = 0; i > x[i] >> y[i]; if (x[0] == x[1]) cout
2023.05.13
no image
[C++] 백준 9단계 - 11653번 문제 (소인수분해)
문제설명 소스코드 #include using namespace std; int main() { int N; cin >> N; if (N != 1) for (int i = 2; i
2023.05.13
no image
[C++] 백준 9단계 - 2581번 문제 (소수)
문제설명 소스코드 #include using namespace std; int main() { int N, M; int sum = 0; int min = 10000; bool flag = false; bool flag2 = false; cin >> N >> M; for (int i = N; i
2023.05.12
no image
[C++] 백준 9단계 - 1978번 문제 (소수 찾기)
문제설명 소스코드 #include using namespace std; int main() { int N, input; int count = 0; bool flag = false; cin >> N; for (int i = 0; i > input; for (int j = 2; j < input; ++j) //1과 자기 자신만으로 나누어 떨어지는 1보다 큰 양의 정수. { //즉, 1과 자기 자신 외에 수로 나누어 떨어지면 소수가 아님 if (flag == true) break; // 소수가 아니라고 이미 판정되었으면 반복할 필요가 없음 if (input % j == 0) flag = true; //1과 자기 자신 외에 수로 나누어 떨어지면 flag = true } if (in..
2023.05.12
no image
[C++] 백준 9단계 - 9506번 문제 (약수들의 합)
문제설명 소스코드 #include using namespace std; int main() { int N; int count = 0; int sum = 0; while (true) { cin >> N; if (N == -1) break; int* arr = new int[N]; //동적 할당 for (int i = 1; i < N; ++i) { if (N % i == 0) //i로 나눈 나머지가 0이라면 { arr[count++] = i; //배열에 i를 저장 sum += i; //sum에 i를 더함 } } if (sum == N) //완전수라면 { cout
2023.05.12
no image
[C++] 백준 9단계 - 2501번 문제 (약수 구하기)
문제설명 소스코드 #include using namespace std; int main() { int N, K; int count = 0; cin >> N >> K; int* arr = new int[N]; for (int i = 1; i
2023.05.11

문제설명

 

소스코드

#include <iostream>
using namespace std;
int main()
{
    int N;
    int minx = 100000; int maxx = -100000;
    int miny = 100000; int maxy = -100000;
    cin >> N;
    int* x = new int[N]; //N만큼 동적할당
    int* y = new int[N]; //N만큼 동적할당
    for (int i = 0; i < N; ++i)
    {
        cin >> x[i] >> y[i];
        if (minx > x[i]) minx = x[i];
        if (maxx < x[i]) maxx = x[i];
        if (miny > y[i]) miny = y[i];
        if (maxy < y[i]) maxy = y[i];
    }
    cout << (maxx - minx) * (maxy - miny);
    //(가장 큰 x좌표 - 가장 작은 x좌표) * (가장 큰 y좌표 - 가장 작은 y좌표)
}

문제설명

 

소스코드

#include <iostream>
using namespace std;
int main()
{
    unsigned int N;
    cin >> N;
    cout << 1 + N + (N * 2) + (N - 1);
    //맨 아래 + 맨 위 + (왼쪽 + 오른쪽) + (반씩 잘린 둘레)
    //=위 + 아래 + 옆 + 반씩 잘린 둘레 = 1 + n + 2n + (n - 1) = 4n
}

문제설명

 

소스코드

#include <iostream>
using namespace std;
int main()
{
    int x[3]; int y[3];
    for (int i = 0; i < 3; ++i) cin >> x[i] >> y[i];
    if (x[0] == x[1]) cout << x[2] << " ";
    else if (x[0] == x[2]) cout << x[1] << " ";
    else cout << x[0] << " ";

    if (y[0] == y[1]) cout << y[2];
    else if (y[0] == y[2]) cout << y[1];
    else cout << y[0];
}

 

풀이

  • 직사각형에서 4개의 점은 같은 x좌표에 다른 y좌표 2개, 같은 y좌표에 다른 x좌표 2개 이렇게 총 4개의 점이 있다.
  • x좌표 : 세 개의 x좌표가 주어지고, 3개중 2개가 같으므로 같지 않은 하나의 x좌표를 출력한다.
  • y좌표 : 세 개의 y좌표가 주어지고, 3개중 2개가 같으므로 같지 않은 하나의 y좌표를 출력한다.

문제설명

 

소스코드

#include <iostream>
using namespace std;
int main()
{
    int N;
    cin >> N;
    if (N != 1) for (int i = 2; i <= N; i++)  while (N % i == 0) { cout << i << endl; N /= i; }
}

 

문제설명

 

소스코드

#include <iostream>
using namespace std;
int main()
{
	int N, M; int sum = 0; int min = 10000;
	bool flag = false; bool flag2 = false;
	cin >> N >> M;
	for (int i = N; i <= M; ++i)
	{
		for (int j = 2; j < i; ++j)
		{
			if (flag == true) break; // 이미 소수가 아닌 수로 판정되었다면 탈출
			if (i % j == 0) flag = true; // i가 j로 나누어떨어지면 소수가 아님 
		}
		if (flag == false) // i가 j로 나누어 떨어지는 수가 하나도 없다면 (소수라면)
		{
			if (i == 1) continue; // 1은 소수가 아님
			flag2 = true; // 소수가 하나라도 있다고 체크하기 위해 flag를 true로 바꿈
			sum += i; // 소수 총합
			if (i < min) min = i; // 가장 작은 소수 
		}
		else flag = false; // 플래그 초기화
	}
	(flag2 != false) ? cout << sum << endl << min : cout << "-1"; // 삼항 연산자
	
}

문제설명

 

소스코드

#include <iostream>
using namespace std;
int main()
{
	int N, input; int count = 0;
	bool flag = false;
	cin >> N;
	for (int i = 0; i < N; ++i)
	{
		cin >> input;
		for (int j = 2; j < input; ++j) //1과 자기 자신만으로 나누어 떨어지는 1보다 큰 양의 정수.
		{ //즉, 1과 자기 자신 외에 수로 나누어 떨어지면 소수가 아님
			if (flag == true) break; // 소수가 아니라고 이미 판정되었으면 반복할 필요가 없음
			if (input % j == 0) flag = true; //1과 자기 자신 외에 수로 나누어 떨어지면 flag = true
		}
		if (input == 1) continue; //1은 소수가 아님
		else if (flag == false) ++count; //위의 반복문을 벗어날 동안 flag가 false라면 소수임
		else flag = false; //플래그 초기화
	}
	cout << count;
}

문제설명

 

소스코드

#include <iostream>
using namespace std;
int main()
{
	int N; int count = 0; int sum = 0;
	while (true)
	{
		cin >> N;
		if (N == -1) break;
		int* arr = new int[N]; //동적 할당
		for (int i = 1; i < N; ++i)
		{
			if (N % i == 0) //i로 나눈 나머지가 0이라면
			{

				arr[count++] = i; //배열에 i를 저장
				sum += i; //sum에 i를 더함
			}
		}
		if (sum == N) //완전수라면
		{
			cout << N << " = ";
			for (int i = 0; i < count; ++i)
			{
				if (i == count - 1) cout << arr[i] << endl; //배열의 마지막은 +를 출력하면 안된다.
				else cout << arr[i] << " + "; // 배열 원소와 +를 출력한다.
			}
		}
		else cout << N << " is NOT perfect." << endl;
		cin.ignore(); //입력 버퍼 비우기
		count = 0; sum = 0; //0으로 초기화
	}
	
}

 

풀이

  • N을 입력받고 N개만큼 동적할당
  • 약수들을 배열에 저장하고 sum에 약수들을 모두 더한다.
  • 약수들의 합과 N이 같다면 완전수이므로 출력 형식대로 출력한다.
  • 마지막엔 count와 sum변수들을 0으로 초기화 시킨다. 입력버퍼 또한 비워준다.

문제설명

 

소스코드

#include <iostream>
using namespace std;
int main()
{
	int N, K; int count = 0;
	cin >> N >> K;
	int* arr = new int[N];
	for (int i = 1; i <= N ; ++i) if (N % i == 0) arr[count++] = i;
	if (count < K) cout << "0";
	else cout << arr[K - 1];
}

 

풀이

  • N개 만큼 int형 배열 동적할당
  • N을 i로 나누었을 때 나머지가 0이면 arr[count]에 i를 대입시키고 i를 증가시킴(배열에는 약수가 작은 순서대로 들어감)
  • count가 K보다 작으면 0을 출력 그렇지 않으면 arr[K - 1]을 출력 (배열의 인덱스는 0부터 시작하기 때문)