[BOJ] Python 백준 10818번 최소, 최대 브론즈 3
https://www.acmicpc.net/problem/10818
문제 풀이
언어를 배우는 초기에 풀어볼 법한 아주 기초적인 문제라 포스팅하지 않으려 했지만 생각보다 정답 비율이 엄청 낮아서 작성하기로 했다.
단순하게 최솟값과 최댓값을 구하는 건 상당히 쉽다.
최솟값과 최댓값을 뜻하는 변수 두 개를 선언하고 전체 Data를 돌면서 각각 최솟값보다 작은 수가 나오면 갱신, 최댓값보다 큰 수가 나오면 갱신하면 끝이다.
이때 처음 변수 선언 시 팁이 될 수 있는 것은 최솟값 변수엔 가능한 최댓값보다 큰 값을, 최댓값 변수엔 가능한 최솟값보다 작은 값으로 초기화하는 것이다.
그래야 단 한 번이라도 갱신할 수 있으며 파이썬스럽게 선언하는 방법은 float('inf'), float('-inf') 이렇게 양의 무한대, 음의 무한대로 선언하는 것이다.
이걸 그대로 출력해도 inf, -inf로 나오기 때문에 편하게 무한대라 생각하면 된다.
문제를 푸는 코드는 먼저 C를 이용하여 앞서 설명한 방식대로 답을 구하는 방법과 파이썬의 함수를 이용하여 단 3줄로 구현하는 방법을 소개하겠다.
먼저 C 코드이다.
#include <stdio.h>
int main() {
int a,b,min=1000000,max=-1000000;
scanf("%d", &a);
for (int i = 0; i < a; i++) {
scanf("%d", &b);
if (min > b) {
min = b;
}
if (max < b) {
max = b;
}
}
printf("%d %d", min, max);
return 0;
}
원소는 -1000000 이상, 1000000 이하로 제한되어 있으므로 3번째 줄에서 딱 맞게 초기화했다.
그리고 5번째 반복문에서 원소를 하나씩 입력받으며 입력받은 값이 최솟값 변수보다 작다면 갱신, 최댓값 변수보다 크다면 갱신하고 결괏값을 출력하면 된다.
그저 완전 탐색하면 풀리는 상당히 쉬운 문제다.
다음은 파이썬 코드이다.
n=int(input())
num_list=list(map(int,input().split()))
print(min(num_list),max(num_list))
단 3줄로 상당히 간단하게 풀었다.
2번째 줄의 map은 input으로 받은 문자열을 split을 통해 공백을 기준으로 분리하고 int로 형 변환하는 함수이다.
따라서 리스트로 형 변환하여 저장한 뒤 min함수를 통해 최솟값을, max함수를 통해 최댓값을 출력하면 된다.
각 함수 별로 데이터 전체를 탐색하기 때문에 O(n)의 시간 복잡도가 걸리는데 이걸 두 번 반복해도 충분히 시간 초과에 걸리지 않고 통과할 수 있다.
'알고리즘 > 알고리즘 문제 풀이' 카테고리의 다른 글
[BOJ] Python 백준 2436번 공약수 골드 5 (0) | 2021.12.26 |
---|---|
[BOJ] Python 백준 1009번 분산처리 브론즈 3 (0) | 2021.12.26 |
[BOJ] Python 백준 11053번 가장 긴 증가 부분 수열 실버 2 (0) | 2021.12.24 |
[BOJ] Python 백준 1806번 부분합 골드 4 (0) | 2021.12.23 |
[BOJ] Python 백준 1991번 트리 순회 실버 1 (0) | 2021.12.20 |