3번 최소, 최대
문제
N개의 정수가 주어진다. 이때, 최솟값과 최댓값을 구하는 프로그램을 작성하시오.
입력
첫째 줄에 정수의 개수 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 N개의 정수를 공백으로 구분해서 주어진다. 모든 정수는 -1,000,000보다 크거나 같고, 1,000,000보다 작거나 같은 정수이다.
출력
첫째 줄에 주어진 정수 N개의 최솟값과 최댓값을 공백으로 구분해 출력한다.
C++
vector를 사용해서 풀어본다.
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main(){
int n;
cin >> n;
vector<int> vec(n);
for (int i = 0; i < n; i++){
cin >> vec[i];
}
vector<int>::iterator min_iter = min_element(vec.begin(), vec.end());
vector<int>::iterator max_iter = max_element(vec.begin(), vec.end());
cout << *min_iter << " " << *max_iter;
return 0;
}
vector는 가변 배열이지만 사이즈를 특정해서 고정 크기로 사용할 수 있다.
algorithm을 사용해서 배열 안에서 min, max 요소를 찾아서 반복자를 반환받아서 값을 출력한다.
min, max_element 함수가 반복자를 반환하는 이유는 중복된 값을 저장할 필요 없이 컨테이너의 요소를 직접 참조할 수 있으며 컨테이너의 종류에 상관없이 유연하게 사용할 수 있기 때문이다. 또한 반복자에 접근해서 컨테이너의 요소를 직접 조작할 수도 있다.
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main(){
int n;
cin >> n;
vector<int> vec;
for (int i = 0; i < n; i++){
int val;
cin >> val;
vec.push_back(val);
}
vector<int>::iterator min_iter = min_element(vec.begin(), vec.end());
vector<int>::iterator max_iter = max_element(vec.begin(), vec.end());
cout << *min_iter << " " << *max_iter;
return 0;
}
가변적으로 사용할 때는 push_back을 사용하면 된다.
C#
using System;
using System.Collections.Generic;
using System.Linq;
class Program{
static void Main(string[] args){
int n = int.Parse(Console.ReadLine());
string[] input_arr = Console.ReadLine().Split(' ');
List<int> num_list = new List<int>();
for (int i = 0; i < n; i++){
num_list.Add(int.Parse(input_arr[i]));
}
int min = num_list.Min();
int max = num_list.Max();
Console.WriteLine($"{min} {max}");
}
}
C#에서는 List <T>를 사용할 수 있다. List는 Collections.Generic에 포함되어 있고 Min, Max를 사용하기 위해서 Linq도 사용한다.
리스트에 값을 넣는 과정도 Select와 ToList를 사용하면 한 번에 초기화할 수 있다.
string[] input_arr = Console.ReadLine().Split(' ');
List<int> num_list = new List<int>();
for (int i = 0; i < n; i++){
num_list.Add(int.Parse(input_arr[i]));
}
//================================================
List<int> numbers = Console.ReadLine().Split(' ').Select(int.Parse).ToList();
Linq는 이외에도 배열이나 컬렉션 등을 처리할 때 유용한 기능들을 제공하기 때문에 함께 사용하는 경우가 많다. 하지만 강력한 기능인만큼 많은 메모리를 사용하기 때문에 주의해야 한다.
Python
n = int(input())
num_list = list(map(int, input().split()))
min_val = min(num_list)
max_val = max(num_list)
print(f"{min_val} {max_val}")
파이썬은 list()를 사용할 수 있다.
map은 해당 함수가 반복 가능한 객체의 각 요소에 대해 적용된 결과를 반환하는 map객체를 생성하는데 이 객체는 필요에 따라 리스트나 튜플로 변환하여 사용할 수 있다.
map을 사용해서 입력되는 값을 공백으로 구분하고 각 문자열을 정수로 변환하여 반환되는 map으로 list를 초기화한다.
Node.js
const fs = require('fs');
const input = fs.readFileSync('/dev/stdin','utf8').split('\n');
const n = parseInt(input[0]);
const nums = input[1].split(' ').map(Number);
let min_val = nums[0];
let max_val = nums[0];
for (int i = 1; i < n; i++){
if (nums[i] < min_val)
min_val = nums[i]
else if (nums[i] > max_val)
max_val = nums[i]
}
console.log(`${min_val} ${max_val}`);
js도 map을 사용해서 배열을 초기화시킬 수 있다. 입력받은 값을 Number함수로 각 요소를 숫자로 변환한 map을 반환한다.
최대 최소를 구하는 방법은 함수를 쓰지 않고 각 요소들의 크기를 작으면 min, 크면 max로 비교하여 구할 수 있다.
js에서도 최대 최솟값을 구하는 Math.min, Math.max를 지원한다.
const fs = require('fs');
const input = fs.readFileSync('/dev/stdin','utf8').split('\n');
const n = parseInt(input[0]);
const nums = input[1].split(' ').map(Number);
const min_val = Math.min(...nums);
const max_val = Math.max(...nums);
console.log(`${min_val} ${max_val}`);
'Coding Test' 카테고리의 다른 글
백준 코딩테스트 #21. 1차원 배열 (7 ~ 10) (0) | 2024.08.04 |
---|---|
백준 코딩테스트 #20. 1차원 배열 (4 ~ 6) (0) | 2024.08.03 |
백준 코딩테스트 #18. 1차원 배열 (1, 2) (0) | 2024.08.03 |
백준 코딩테스트 #17. 반복문 (11, 12) (0) | 2024.08.01 |
백준 코딩테스트 #16. 반복문 (7~10) (0) | 2024.08.01 |