Python - 함수

oceanzoo·2021년 5월 4일
0

함수를 사용한 예제문제를 풀어보았다.
새롭게 안 기본문법들에 대해서도 같이 정리했다.
문제 출처 : 문제에 기재 / 참고자료 출처: 설명에 기재

기본 문법

def 함수 이름(매개변수):
	수행할 문장1
	수행할 문장2
    ...
    return 결괏값
    
결과값을 받을 변수 = 함수이름(입력인수 1, 입력인수 2,...)
  • 입력값이 없는 함수
def say():
	return 'Hi'
    
a = say()
print(a)   #Hi
  • 결괏값이 없는 함수
def add(a,b):
	print("%d, %d의 합은 %d입니다." % (a,b,a+b))
    
add(3,4)   #3,4의 합은 7입니다
  • 입력값이 몇개인지 모를 때
def 함수이름(*매개변수):
	수행할 문장
    ...

참고자료 출처: 책 'Do it! - 점프 투 파이썬'

예제

정수 n개의 합

문제 출처: https://www.acmicpc.net/problem/15596

코드
(1)

def solve(a):
	return sum(a)

(2)

def solve(a):
	ans = 0
    for i in a:
    	ans += i
    return ans

풀이
처음에 (1) 처럼 간단하게 sum함수를 이용해서 풀어줬다.
백준 사이트에서는 for문을 이용해서 풀게 힌트를 써놓아서 (2)처럼 for문을 이용해서도 풀어보았다.

셀프 넘버

문제 출처: https://www.acmicpc.net/problem/4673

코드

def d(n):
    m = n + sum(map(int,str(n)))
    return m

arr = []

for i in range(1,10001):
    arr.append(d(i))

for i in range(1,10001):
    if i not in arr:
        print(i)

풀이
우선, 생사자를 구하는 함수를 만들어 주었다.
map(int,str(n)) : 숫자를 자릿수를 기준으로 분류해서 나눌때 사용한다.
sum(map(int,str(n)) : sum을 이용하면 숫자의 각 자릿수를 합한 값을 알 수 있다.

생성자를 리스트에 하나씩 추가해주고
이 생성자 리스트에 없는 값을 not in을 통해 구해서 출력해주었다.

한수

문제 출처: https://www.acmicpc.net/problem/1065

코드

def hansu(n):
    han = 0
    for i in range(1,n+1):
        if i < 100:
            han += 1
        elif 100 <= i < 1000:
            num = list(map(int,str(i)))
            if num[0] - num[1] == num[1]-num[2]:
                han += 1
        elif i == 1000:
            break

    return han


n = int(input())
print(hansu(n))

풀이
우선 if문으로 세가지 범위로 나누어 구현하였다.
100보다 작은 수일 경우에는 무조건 한수로 봐야한다. 따라서 모든 수에 대해서 값을 1씩 증가시켜줬다.
또한 N은 1000보다 작으므로 세자리 수는 1000만 생각하면 되는데 1000은 한수가 아니므로 break문으로 for문을 빠져나오도록 했다.
가장 중요한 것은 100이상 1000미만의 수 인데, 이 경우에는 자릿수를 기준으로 분류해서 나눈 후 백의자리,십의 자리 차와 십의자리, 일의자리 차가 같을 경우에 값을 1씩 증가시키도록 만들었다.


❓🤔
함수는 반복적인 작성을 막기 위해서인데 이 코드에서도 꼭 필요했던 것일까? 함수를 추가하면서 간결성이 더 떨어졌다.
아니면 혹시 함수를 이용해서 더 쉽고 간단한 코드를 만들 수 있었던것일까?

profile
준비된 개발자를 위한 날갯짓 🦋

0개의 댓글