no image
[C++] 백준 11단계 - 24264번 문제 (알고리즘의 수행 시간 3)
문제설명 소스코드 #include using namespace std; int main() { long long n; cin >> n; cout
2023.05.16
no image
[C++] 백준 11단계 - 24263번 문제 (알고리즘의 수행 시간 2)
문제설명 소스코드 #include using namespace std; int main() { int n; cin >> n; cout
2023.05.16
no image
[C++] 백준 11단계 - 24262번 문제(알고리즘의 수행 시간 1)
문제설명 소스코드 #include using namespace std; int main() { int n; cin >> n; cout
2023.05.16
no image
[C++] 백준 10단계 - 10101번 문제 (삼각형 외우기)
문제설명 소스코드 #include using namespace std; int main() { int arr[3]; int sum = 0; for (int i = 0; i > arr[i]; sum += arr[i]; } if (sum == 180) { if ((arr[0] == arr[1]) && (arr[1] == arr[2])) cout
2023.05.15
no image
[C++] 백준 10단계 - 1085번 문제 (직사각형에서 탈출)
문제설명 소스코드 #include using namespace std; int main() { int x, y, w, h; cin >> x >> y >> w >> h; int width = w - x; //x값의 차이 int height = h - y; //y값의 차이 int X = (x < width) ? X = x : X = width; //너비가 가장 짧은 x좌표 int Y = (y < height) ? Y = y : Y = height; //높이가 가장 짧은 y좌표 (X < Y) ? cout
2023.05.15
no image
[C++] 백준 10단계 - 14215번 문제 (세 막대)
문제설명 소스코드 #include using namespace std; int main() { int arr[3]; bool flag[3] = { false }; int max = 0; int idx; int sum = 0; for (int i = 0; i > arr[i]; if (arr[i] > max) { max = arr[i]; idx = i; } //가장 큰 길이와 인덱스 저장 } flag[idx] = true; //위에서 저장한 인덱스에 해당하는 플래그를 true로 바꿈 for (int i = 0; i < 3; ++i) { if (flag[i] == true) continue; //가장 큰 길이 제외 else sum += arr[i]; //길이 합 저장 } if (..
2023.05.15
no image
[C++] 백준 10단계 - 5073번 문제 (삼각형과 세 변)
문제설명 소스코드 #include using namespace std; int main() { int arr[3]; bool flag[3] = { false }; int max = 0; int idx; int sum = 0; while (true) { for (int i = 0; i > arr[i]; if (arr[i] > i) { max = arr[i]; idx = i; } //제일 긴 변과 해당 인덱스 저장 } if ((arr[0] == 0) && (arr[1] == 0) && (arr[2] == 0)) exit(0); flag[idx] = true; //제일 긴 변의 인덱스의 플래그를 true로 표시 for (int i = 0; i < 3; ++i) { if (flag..
2023.05.14
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

문제설명

 

소스코드

#include <iostream>
using namespace std;
int main()
{
    long long n;
    cin >> n;
    cout << n*n << endl << 2;
}

 

풀이

MenOfPassion(A[], n) {
    sum <- 0;
    for i <- 1 to n
        for j <- 1 to n
            sum <- sum + A[i] × A[j]; # 코드1
    return sum;
}
  • i는 1부터 n까지 반복되고, j또한 1부터 n까지 반복된다.
  • 시간복잡도는 O(n²)이다.
  • 즉, 수행 횟수는 n * n이며 최고 차항의 차수는 2이다.

 

2023.01.15 - [자료구조 & 알고리즘] - 알고리즘 시간 복잡도, 공간 복잡도(Time Complexity, Space Complexity) + Big-O

 

알고리즘 시간 복잡도, 공간 복잡도(Time Complexity, Space Complexity) + Big-O

알고리즘(Algorithm) 알고리즘이란 어떠한 문제를 해결하기 위한 방법이다. 예를 들어 회사에 출근하기 위해서는 "회사에 출근하기"라는 문제를 해결하기 위해 "집에서 회사까지 어떤 이동수단을

rebugs.tistory.com

 

문제설명

 

소스코드

#include <iostream>
using namespace std;
int main()
{
    int n;
    cin >> n;
    cout << n << endl << 1;
}

 

풀이

MenOfPassion(A[], n) {
    sum <- 0;
    for i <- 1 to n
        sum <- sum + A[i]; # 코드1
    return sum;
}
  • for문이 n회 반복된다. (선형적)
  • 시간복잡도 O(N)이다.
  • 따라서 수행 횟수는 n번이고, 최고차항의 차수는 1이다.

2023.01.15 - [자료구조 & 알고리즘] - 알고리즘 시간 복잡도, 공간 복잡도(Time Complexity, Space Complexity) + Big-O

 

알고리즘 시간 복잡도, 공간 복잡도(Time Complexity, Space Complexity) + Big-O

알고리즘(Algorithm) 알고리즘이란 어떠한 문제를 해결하기 위한 방법이다. 예를 들어 회사에 출근하기 위해서는 "회사에 출근하기"라는 문제를 해결하기 위해 "집에서 회사까지 어떤 이동수단을

rebugs.tistory.com

 

문제설명

 

소스코드

#include <iostream>
using namespace std;
int main()
{
    int n;
    cin >> n;
    cout << 1 << endl << 0;
}

 

풀이

MenOfPassion(A[], n) {
    i = ⌊n / 2⌋;
    return A[i]; # 코드1
}
  • 어떤 수가 들어와도 배열에 접근하는 횟수는 1회이다
  • 시간복잡도 O(1)이다.
  • 따라서 코드 수행 횟수는 1이고, 최고차항의 차수는 0이다.

2023.01.15 - [자료구조 & 알고리즘] - 알고리즘 시간 복잡도, 공간 복잡도(Time Complexity, Space Complexity) + Big-O

 

알고리즘 시간 복잡도, 공간 복잡도(Time Complexity, Space Complexity) + Big-O

알고리즘(Algorithm) 알고리즘이란 어떠한 문제를 해결하기 위한 방법이다. 예를 들어 회사에 출근하기 위해서는 "회사에 출근하기"라는 문제를 해결하기 위해 "집에서 회사까지 어떤 이동수단을

rebugs.tistory.com

 

문제설명

 

소스코드

#include <iostream>
using namespace std;
int main()
{
    int arr[3]; int sum = 0;
    for (int i = 0; i < 3; ++i)
    {
        cin >> arr[i];
        sum += arr[i];
    }
    if (sum == 180)
    {
        if ((arr[0] == arr[1]) && (arr[1] == arr[2])) cout << "Equilateral";
        else if ((arr[0] == arr[1]) || (arr[1] == arr[2]) || arr[0] == arr[2]) cout << "Isosceles";
        else cout << "Scalene";
    }
    else cout << "Error";
}

문제설명

 

소스코드

#include <iostream>
using namespace std;
int main()
{
    int x, y, w, h;
    cin >> x >> y >> w >> h;
    int width = w - x; //x값의 차이
    int height = h - y; //y값의 차이
    int X = (x < width) ? X = x : X = width; //너비가 가장 짧은 x좌표
    int Y = (y < height) ? Y = y : Y = height; //높이가 가장 짧은 y좌표
    (X < Y) ? cout << X : cout << Y; //x좌표와 y좌표 중 가장 짧은 값 출력
}

문제설명

 

소스코드

#include <iostream>
using namespace std;
int main()
{
    int arr[3]; bool flag[3] = { false };
    int max = 0; int idx; int sum = 0;
    for (int i = 0; i < 3; ++i)
    {
        cin >> arr[i];
        if (arr[i] > max) { max = arr[i]; idx = i; } //가장 큰 길이와 인덱스 저장
    }
    flag[idx] = true; //위에서 저장한 인덱스에 해당하는 플래그를 true로 바꿈
    for (int i = 0; i < 3; ++i)
    {
        if (flag[i] == true) continue; //가장 큰 길이 제외
        else sum += arr[i]; //길이 합 저장
    }
    if (arr[idx] >= sum) arr[idx] = sum - 1; //삼각형 조건을 만족시키지 않는다면 강제로 만족시킴
    cout << sum + arr[idx];
}

 

또는 아래와 같은 방법으로 풀 수 있다.

 

#include <iostream>
using namespace std;
int main()
{
    int arr[3]; bool flag[3] = { false };
    int max = 0; int idx; int sum = 0;
    for (int i = 0; i < 3; ++i)
    {
        cin >> arr[i];
        if (arr[i] > max) { max = arr[i]; idx = i; }
    }
    flag[idx] = true;
    while (true)
    {
        for (int i = 0; i < 3; ++i)
        {
            if (flag[i] == true) continue;
            else sum += arr[i];
        }
        if (arr[idx] < sum) break; //삼각형의 조건을 만족한다면 탈출
        sum = 0; --arr[idx]; //가장 긴 변의 길이를 1씩 감소시킴
    }
    cout << sum + arr[idx];
}

문제설명

 

소스코드

#include <iostream>
using namespace std;
int main()
{
    int arr[3]; bool flag[3] = { false };
    int max = 0; int idx; int sum = 0;
    while (true)
    {
        for (int i = 0; i < 3; ++i)
        {
            cin >> arr[i];
            if (arr[i] > i) { max = arr[i]; idx = i; } //제일 긴 변과 해당 인덱스 저장
        }
        if ((arr[0] == 0) && (arr[1] == 0) && (arr[2] == 0)) exit(0);
        flag[idx] = true; //제일 긴 변의 인덱스의 플래그를 true로 표시
        for (int i = 0; i < 3; ++i)
        {
            if (flag[i] == true) continue; //플래그 i번째 인덱스가 true면 패스
            else sum += arr[i]; //나머지 인덱스(제일 긴 변이 아닌 애들)를 모두 더함
        }
        if (arr[idx] >= sum) { cout << "Invalid" << endl; } //가장 긴 변이 나머지 두 변을 더한 값보다 크거나 같으면 삼각형이 아님
        else if((arr[0] == arr[1]) && (arr[1] == arr[2])) { cout << "Equilateral" << endl; } //세 변의 길이가 모두 같을 때
        else if((arr[0] == arr[1]) || (arr[1] == arr[2]) || (arr[0] == arr[2])) { cout << "Isosceles" << endl; } //두 변의 길이가 같을 때
        else { cout << "Scalene" << endl; } //변의 길이가 모두 다를 때
        flag[idx] = false; max = 0; sum = 0; //다음 입력을 위해 초기화
    }
}

문제설명

 

소스코드

#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좌표)
}