문제
N개의 정수가 주어진다. 이때, 최솟값과 최댓값을 구하는 프로그램을 작성하시오.
입력
첫째 줄에 정수의 개수 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 N개의 정수를 공백으로 구분해서 주어진다. 모든 정수는 -1,000,000보다 크거나 같고, 1,000,000보다 작거나 같은 정수이다.
출력
첫째 줄에 주어진 정수 N개의 최솟값과 최댓값을 공백으로 구분해 출력한다.
예제 입력 1 복사
5
20 10 35 30 7
예제 출력 1 복사
7 35
백준 10818번 알고리즘 문제를 풀어보다가
List안에 map을 사용하는 방법에 대해 궁금해서 찾아보게 되었다.
map
map은 리스트의 요소를 지정된 함수로 처리해주는 함수이다.
map은 원본 리스트를 변경하지 않고 새 리스트를 생성한다.
- list(map( 함수, 리스트))
예를 들어 실수가 저장된 리스트가 있을 때, 이 리스트의 모든 요소를 정수로 변환하려면
for반복문을 통해 아래처럼 나타낼 수 있다.
a = [1.2, 2.5, 3.7, 4.6]
for i in range(len(a)):
a[i] = int(a[i])
print(a)
>> [1, 2, 3, 4]
for에 range(len(a))를 사용해 인덱스를 가져왔다.
그리고 가져온 인덱스로 요소 하나하나에 접근한 뒤 int로 변환하여 다시 저장했다.
매번 for 반복문으로 요소를 변환하는 것이 번거롭기 때문에 이 때 map을 사용해 준다.
a = [1.2, 2.5, 3.7, 4.6]
a = list(map(int,a))
print(a)
>> [1, 2, 3, 4]
a = list(map(int, a)) 한 줄로 변환이 끝났다. map에 int와 리스트를 넣으면 리스트의 모든 요소를 int를 사용해 변환해준다.
그 다음, list를 사용해 map의 결과를 다시 리스트로 만들어준다.
또한, map에는 list뿐만 아니라, 모든 반복가능한 객체를 넣을 수 있다.
range를 사용해 숫자를 만든 뒤, 숫자를 문자열로 변환
a = list(map(str, range(10))) #range로 0~숫자생성->str로 문자열 변환(각 요소 '')
print(a)
>> ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
input().slipt()와 map
input().split()의 결과는 문자열 리스트라 map을 사용할 수 있다.
a = input().split()
10 20 (입력) #10 20을 입력하면, 문자열 2개가 들어있는 리스트 생성
a
['10', '20']
map을 사용해 정수로 변환
a = map(int, input().split())
10 20 (입력)
a
<map object at 0x03DFB0D0> #다시 10 20을 입력하면 map object(맵객체)생성
list(a) #map object에서는 값을 볼 수 없어 리스트 사용해서 리스트 출력
[10, 20] #정수 두개
a, b = map(int, input().split())을 풀어서 쓰면 다음과 같은 코드가 된다.
x = input().split() # input().split()의 결과는 문자열 리스트
m = map(int, x) # 리스트의 요소를 int로 변환, 결과는 맵 객체
a, b = m # 맵 객체는 변수 여러 개에 저장할 수 있음