알고리즘 연습/기초 (입출력 등)

[🥉3 / 백준 9085 / 파이썬] 더하기 (map 함수)

김세진 2021. 11. 12. 20:44
반응형

입력

입력의 첫 줄에는 테스트 케이스의 개수 T(1 ≤ T ≤ 10)가 주어진다. 각 테스트 케이스는 첫 줄에 자연수의 개수 N(1 ≤ N ≤ 100)이 주어지고, 그 다음 줄에는 N개의 자연수가 주어진다. 각각의 자연수 사이에는 하나씩의 공백이 있다.

출력

각 테스트 케이스에 대해서 주어진 자연수의 합을 한 줄에 하나씩 출력한다.

 

예제 입력 

2
5
1 1 1 1 1
7
1 2 3 4 5 6 7

예제 출력 

5
28




 

풀이

 

여러 가지 입력이 한 줄에 들어올 때, 공백을 기준으로 적절히 나눈 뒤 각각의 문자열을 int로 형변환해야 하는 문제이다.

예제와 같은 입력이 들어올 때 input으로 입력을 받는다면 "1 1 1 1 1" 처럼 스트링으로 입력을 받는다.

이를 split 함수를 이용해 분리하여 배열로 만들어주도록 하자.

 

따라서 input().split() 과 같이 함수를 사용한다면 ["1","1","1","1","1"] 과 같이 스트링이 공백을 기준으로 분리되어 배열에 저장된다.

여기에 sum을 이용하여 숫자를 모두 더하고 싶지만, 스트링 형태이기 때문에 그럴 수 없다.

따라서 모두 int로 형변환을 해야 하는데, 반복문을 사용한다면 매우 번거로울 것이다.

 

파이썬에서 이용할 수 있는 강력한 함수인 map을 살펴보도록 하자.

 

 

map(function, iterable)

우선 사용법부터 알아보자면 위와 같은 꼴로 사용한다.

왼쪽은 각각의 원소에 적용시킬 함수, 오른쪽은 배열과 같은 iterable한 자료형을 넣는다.

예제의 경우는 각각의 숫자에 int로 형변환을 할 것이기 때문에 map(int, input().split()) 처럼 이용하면 된다.

 

단, map 함수는 list가 아닌 map 객체를 return한다.

map 객체는 not subscriptable, 즉 인덱스가 없다.

때문에 이를 배열과 같이 사용하고 싶다면 앞에 list를 사용하여 배열 형태로 형변환하도록 해주자. 

 

우리가 사용할 sum 함수의 경우 map 객체에도 사용이 가능하므로 list로 변환 없이 진행해주면 된다.

 

for _ in range(int(input())):
    int(input())
    print(sum(map(int,input().split())))
반응형