Sets - Introduction to Sets

Sets라는 자료형은 내가 아직까진 많이 쓰지 않아서 까먹을까봐 기초문제를 풀어보았다.

문제 풀이

Sets는 순서가 없고, 중복된 요소가 없는 집합이다. 출력되거나, 순회되거나, 순서가 있는 자료형으로 바뀔 때는 요소들은 임의의 순서로 나타난다. 즉, Sets는 요소가 있는지 확인(멤버십 확인)하거나 중복된 요소들을 제거할 때 쓰인다고 보면 된다.

문제 해석

오늘은 문제에 내러티브가 있다. 식물학 교수인 Ms.Gabriel Williams가 Mickey에게 일을 시키는데 마이키를 도와줘야 한다.

Task

  • Ms.Williams의 온실 속 모든 식물은 다양한 높이를 가졌는데, 서로 다른 키의 평균을 구하라.
  • average function을 완성시켜야 하는데, 이 함수는 정수로 이루어진 배열을 매개변수를 받는다.
  • 결과로 나오는 부동소수는 소수점 이후 3자리까지만 반올림한다.

Input Format

  • 첫 번째 줄은 arr의 크기, N이 입력된다.
  • 두 번째 줄은 arr[i]에 들어갈 N개의 정수가 공백으로 구분되어 입력된다.
  • 이것들은 HackerRank가 다 처리해준다.

문제 풀이

이미 주어진 코드 해석

1
2
3
4
5
6
7
8
def average(array):
# your code goes here

if __name__ == '__main__':
n = int(input())
arr = list(map(int, input().split()))
result = average(arr)
print(result)
  • 친절한 HackerRank가 인풋을 받아 정수 처리 해주고, 리스트까지 다 만들고 내가 만들 함수에 인수로 넣어준다.
  • arr을 넣어 호출된 average(arr)가 리턴한 값을 변수 result에 넣어 출력까지 해주니까 나는 그냥 함수나 만들자.

Pseudocoding

  • 서로 다른 높이를 가진 애들만 평균을 내야 하므로 Sets 자료형으로 타입캐스팅해주고, reducelambda를 사용해서 모두 더해준다. (이 때 reduce는 import해줘야.)
  • 위의 더한 값을 sets의 크기를 분모로 나누어 평균을 구해준다.
  • round 함수를 통해 위의 평균값을 소수점 이후 3자리까지만 나타내게끔 반올림한 숫자를 리턴해준다. 인수로 숫자를 넣고 몇자리까지 나타내고 싶은지 두 번째 인수를 주면 된다.

코드 작성하기

1
2
3
4
5
6
7
from functools import reduce

def average(array):
setArr = set(array)
setArrLen = len(setArr)
aver = reduce(lambda x, y : x+y, setArr) / setArrLen
return round(aver, 3)

느낀 점

  • 제목이 introduction이라 쉬울 줄 알았는데 reduce도 쓰고 lambda도 써서 뭔가 고차원적으로 풀어낸 것 같다.
  • 첫 인풋으로 준 N은 전혀 쓰일 일이 없었는데 왜 준거였는지 찜찜…