최대최소_220712
주어진 숫자들 중 최댓값 구하기
일차원 배열에서 최댓값은 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;
}