데일리 codeup/일차원 배열

최대최소_220712

hayo_su 2022. 7. 12. 17:24

주어진 숫자들 중 최댓값 구하기

일차원 배열에서 최댓값은 max_val 이라는 변수를 사용하여 max_val이라는 값보다 현재 값인 elem이 더 큰 경우라면, 최댓값을 갱신한다는 개념이다.

max_val의 초기값 설정
<climits> 헤더의 INT_MIN이용 => int의 최솟값을 의미함

  • max_val = 첫 번째 원소

가장 큰 수 고르기

10개의 정수가 주어지면 그 중 가장 큰 수를 골라 출력하는 프로그램을 작성하세요.

#include <iostream>
#include <climits>
using namespace std;
int main(){
    int a,max_val = INT_MIN;
    for(int i=0;i<10;i++){
        cin >> a;
        if(a > max_val)   max_val = a;
    }
    cout<<max_val;
    return 0;
}

주어진 숫자들 중 최솟값 구하기

max_val과 마찬가지로 min_val변수를 사용하여 min_val보다 현재 값이 더 작으면 최솟값을 갱신한다

min_val의 초기값 설정
<climits> 헤더의 INT_MAX이용 => int의 최댓값을 의미함

  • min_val = 첫 번째 원소

n개의 숫자 중 최소

N개의 정수가 입력으로 주어졌을 때, 그 중 최솟값과 최솟값을 갖는 원소의 개수를 출력하는 코드를 작성해보세요.

입력 형식

첫 번째 줄에는 원소의 개수 N이 주어지고, 두 번째 줄에는 N개의 정수가 공백을 사이에 두고 주어집니다.

$−2^{31}$ ≤ 정수 ≤ $2^{31}−1$
1 ≤ N ≤ 100

#include <iostream>
#include <climits>
using namespace std;
int main(){
    int n, cnt = 1;
    long long a ,min_val = LLONG_MAX;
    cin>>n;
    for(int i=0;i<n;i++){
        cin >> a;
        if(a < min_val){
            min_val = a;
            cnt = 1;
        }
        else if(a == min_val)   cnt++;
    }

    cout<<min_val<<' ' << cnt;
    return 0;
}

999 또는 -999

최대 100개의 세 자리 이하 정수가 차례로 주어지다가 999나 -999가 주어지면 입력 받는 것을 종료하고 이 숫자를 제외한 수 중 가장 큰 숫자와 가장 작은 숫자를 출력하는 프로그램을 작성해보세요.

#include <iostream>
#include <climits>
using namespace std;
int main(){
    int n,max_val = INT_MIN, min_val = INT_MAX;
    for(int i=0;i<100;i++){
        cin>>n;
        if(n==999||n==-999) break;
        if(n>max_val)   max_val = n;
        if(n<min_val)   min_val = n;
    }
    cout<<max_val<<' '<<min_val;
    return 0;
}

n개의 숫자 중 최대 2개

입력으로 주어진 N개의 정수를 내림차순으로 정렬 했을 때 첫 번째와 두 번째 숫자를 출력하는 코드를 작성해보세요.

#include <iostream>
#include <climits>
using namespace std;
int main(){
    int n,a,first_max = INT_MIN, second_max;
    cin >> n;
    for(int i=0;i<n;i++){
        cin>>a;
        if(a>=first_max){
            second_max = first_max;
            first_max = a;
        }
        else if(a>second_max)   second_max = a;
    }
    cout<< first_max <<' ' << second_max;
    return 0;
}

중복되지 않는 숫자 중 최대

N개의 숫자가 주어졌을 때, 중복하여 등장하지 않는 숫자 중 최댓값을 구하는 프로그램을 작성해보세요.

#include <iostream>
#include <climits>
using namespace std;
int main(){
    int a, n, max_val,is_val = 0;
    cin>>n;
    int m[1000] = {0, };
    for (int i=0;i<n;i++){
        cin>>a;
        m[a-1]++;
    }
    for(int j=999;j>=0;j--){
        if(m[j]==1){
            cout<<j+1;
            is_val =1;
            break;
        }
    }
    if(is_val == 0) cout<<-1;
    return 0;
}

가장 왼쪽에 있는 최댓값

N개의 숫자가 주어졌을 때, 주어진 숫자들 중 최댓값의 위치를 출력합니다. 만약 최댓값이 여러 개라면, 가장 왼쪽에 있는 최댓값의 위치를 출력합니다.

그 이후에는 위에서 구한 최댓값의 위치보다 더 왼쪽에 있는 숫자들 중 최댓값을 구해 그 위치를 출력합니다. 이 경우에도 최댓값이 여러 개라면, 가장 왼쪽에 있는 최댓값의 위치를 출력합니다.

위의 과정을 끊임없이 반복하며, 최종적으로 첫 번째 원소가 뽑히게 되면 이 과정을 종료합니다. 이러한 과정을 거쳐 구해진 최댓값의 위치들을 출력하는 프로그램을 작성해보세요

#include <iostream>
#include <climits>
using namespace std;
int main(){
    int n,max_val,index,tmp;
    cin >> n;
    int m[n];
    tmp = n;
    for(int i=0;i<n;i++){
        cin>>m[i];
    }
    while (tmp>0){
        max_val = INT_MIN;
        for(int j=0;j<tmp;j++){
            if(m[j]>max_val){
                max_val = m[j];
                index = j;
            }
        }
        cout<< index + 1<< ' ';
        tmp = index;
    }

    return 0;
}

500 근처의 수

10개의 정수를 입력받아 500 미만의 수 중 가장 큰 수와 500 초과의 수 중 가장 작은 수를 출력하는 프로그램을 작성해보세요.

10개의 정수가 공백을 사이에 두고 주어집니다. 단, 500은 주어지지 않으며, 전부 500 미만이거나 전부 500 초과인 데이터는 주어지지 않는다고 가정해도 좋습니다.

1 ≤ 주어지는 정수 ≤ 1,000

#include <iostream>
#include <climits>
using namespace std;
int main(){
    int n,min_val=1000,max_val = 1;
    for(int i=0;i<10;i++){
        cin >> n;
        if(n<min_val && n>500)  min_val = n;
        if(n>max_val && n<500)  max_val = n;
    }
    cout<< max_val<<' '<<min_val;
    return 0;
}

자동차 단일 거래 이익 최대화하기

향후 n년 간의 자동차 가격 정보가 미리 주어졌을 때, 자동차를 단 한 번 사서 되팔 때의 이익을 최대화하고자 합니다. 낼 수 있는 최대 이익을 출력하는 프로그램을 작성해보세요. 단, 자동차를 사기 전에는 팔 수 없습니다.

  • 자동차 가격은 0 ~ $2^{31}−1$ 사이의 범위를 갖습니다.

  • 1 ≤ n ≤ 1,000

#include <iostream>
using namespace std;
int main(){
    int n,result = 0;
    cin >> n;
    int m[n];
    for(int i=0;i<n;i++){
        cin >> m[i];
    }
    for(int j=0;j<n;j++){
        for(int k=j+1;k<n;k++){
            if(m[k]-m[j]>result)    result = m[k]-m[j];
        }
    }
    cout<<result;
    return 0;
}

두 숫자의 차의 최솟값

n개의 숫자가 오름차순으로 주어집니다. 이 중 서로다른 두 개의 숫자를 골랐을 때, 두 숫자의 차가 최소가 되는 경우의 그 차이를 출력하는 프로그램을 작성해보세요.

#include <iostream>
using namespace std;
int main(){
    int n,result;
    cin >> n;
    int m[n];
    for(int i=0;i<n;i++){
        cin >> m[i];
    }
    result = abs(m[0]-m[1]);
    for(int j=0;j<n;j++){
        for(int k=j+1;k<n;k++){
            if(abs(m[k]-m[j])<result)    result = abs(m[k]-m[j]);
        }
    }
    cout<<result;
    return 0;
}