파일 업로드

과일 카운터 (함수의 정의와 호출)

profile
실행 시간 제한메모리 제한
1 초10 MB
📃 해결할 문제

이번 시간에는 함수에 대해 이해해볼거에요 :)

함수의 정의부터 함수의 재사용에 대해 이야기 해봅시다.

  • 함수의 정의

Python 에서는 함수(function)의 정의(define)를 할 때, 다음과 같이 작성합니다.

def 함수명(첫번째 입력, 두번째 입력, ...):
	함수를 실행하면 실행할 코드
	...
	return 반환할 값

우리에게 익숙한 함수부터 알아볼까요?

수학에서의 함수는 아래처럼 작성할 수 있어요

f(x) = 3x + 2

g(x,y) = 10x+2y + 3

그렇다면 컴퓨터에서는 동일한 함수를 어떻게 정의해야 할까요?

def f(x):
	# 실행할 코드 내용
	# 3x + 2
	result = 3 * x + 2
	# 결과를 반환합니다. (return)
	return result


def g(x, y):
	# 실행할 코드 내용
	# 10x + 2y + 3
	result = 10 * x + 2 * y + 3
	# 결과를 반환합니다. (return)
	return result

 

  • 함수의 재사용

코드를 작성할 때 이전에 짜놨던 코드와 똑같은 코드를 작성해야할 때가 있어요

들어가기에 앞서 한가지 상황을 봅시다.

2개의 리스트가 주어졌을 때, 사과의 개수를 각각 구하시오. 

이 문제는 for 문과 while 문에서 작성했던 코드와 많이 유사한데요

앞의 문제와의 차이점은 아래와 같아요!

  1. 입력 값이 자료형은 같지만 값은 다를 수 있다.
  2. 같은 코드2번 이상 실행해야 한다.

이런 상황에서 우리는 함수를 사용하면 코드를 깔끔하게 작성할 수 있어요

함수를 왜 사용하는 지에 대한 이유중 한 가지는 코드의 재사용이 가능하다는 점이 있습니다.

 

위의 문제 상황을 코드로 작성해볼까요?

elements_1 = ['사과', '딸기', '바나나', '포도', '사과', '딸기', '포도', '사과', '딸기', '바나나']
elements_2 = ['바나나', '사과', '포도', '딸기', '오렌지', '멜론', '체리', '바나나', '딸기', '자두', '사과', '바나나']

count_1 = 0
for fruit in elements_1:
	if fruit == '사과': # 만약 fruit이 '사과'라면?
		count_1 = count_1 + 1

count_2 = 0
for fruit in elements_2:
	if fruit == '사과': # 만약 fruit이 '사과'라면?
		count_2 = count_2 + 1

print(count_1, count_2)
# 결과
# 3 2

위의 코드는 

element_1이 첫번째 리스트이고, count_1은 첫번째 리스트에서 '사과'가 몇개 있는지 확인하고

element_2가 두번째 리스트이며, count_2은 두번째 리스트에서 '사과'가 몇개 있는지 확인한 뒤

count_1 과 coun_2 를 출력하여 사과의 개수를 각각 출력하는 코드에요

 

하지만 이렇게 작성하면 같은 코드를 2번 작성하게 되니 코드의 길이가 늘어나불필요해 보이고 다른 사람이 코드를 보고 이해하기도 힘들겠죠? 

 

위의 상황을 함수로 다시 작성해 볼까요?

elements_1 = ['사과', '딸기', '바나나', '포도', '사과', '딸기', '포도', '사과', '딸기', '바나나']
elements_2 = ['바나나', '사과', '포도', '딸기', '오렌지', '멜론', '체리', '바나나', '딸기', '자두', '사과', '바나나']

def count_apple(elements):
	count = 0
	for fruit in elements:
		if fruit == '사과': # 만약 fruit이 '사과'라면?
			count = count + 1
	return count

count_1 = count_apple(elements_1) # 함수 호출하기! 1
count_2 = count_apple(elements_2) # 함수 호출하기! 2

print(count_1, count_2)
# 결과
# 3 2

코드가 되게 짧아지고, 이해하기도 편하고, 깔끔해졌죠?

 

이렇게 우리가 코드를 작성할 때는, 재사용이 가능하도록 함수를 작성하는 것이 좋습니다. 

또한 함수를 기능 단위로 작성하게 되면, 보이지 않던 곳에서도 코드를 재사용 할 수 있다는 것이 보이고 코드를 작성하는 속도도 빨라진답니다.

그럼, 함수를 사용하는 목적중 하나가 '코드의 재사용성' 이라면

여러분이 함수를 작성할 때도 이 함수를 재사용이 가능하도록 작성해야지! 라고 한번쯤 생각하시는 것이 좋을거에요 :)

 


이제 실습해볼까요?

 

실습 문제

임의의 과일 리스트하나의 과일 이름이 주어집니다.

이때, 주어진 과일 이름과일 리스트에 몇 개 담겨있는지를 구하는 함수를 작성하세요.

💻 입력

첫 번째 줄에는 과일 이름들이 나열되어 있고

두 번째 줄에는 개수를 세야 하는 과일의 이름이 주어집니다.

🖨️ 출력

주어진 과일 이름이 과일 리스트에 몇 개 담겨있는지 출력합니다.


💻 예제 입력 1
사과,딸기,바나나,포도,사과,딸기,포도,사과,딸기,바나나
사과
🖨️ 예제 출력 1
3
💻 예제 입력 2
바나나,딸기,딸기,포도,사과,딸기,체리,사과,딸기,딸기
사과
🖨️ 예제 출력 2
2

출처: 돌핀 코딩