본문 바로가기
카테고리 없음

함수 문제 풀이 및 해설

by abccoco 2022. 5. 30.

언어:  파이썬

 

문제 1

정수 n개가 주어졌을 때, n개의 합을 구하는 함수를 작성하시오. 작성해야 하는 함수는 다음과 같다.

Python 2, Python 3, PyPy, PyPy3: def solve(a: list) -> int

a: 합을 구해야 하는 정수 n개가 저장되어 있는 리스트 (0 ≤ a[i] ≤ 1,000,000, 1 ≤ n ≤ 3,000,000) 리턴값: a에 포함되어 있는 정수 n개의 합 (정수)

정수 n개가 주어졌을 때, n개의 합을 구하는 함수를 작성하시오.

 

 

문제를 풀기 위해 알아야할 점

  • sum() 함수의 의미
  • 함수를 사용할때의 for문 사용법

 

파이썬의 내장 함수 sum은 list의 합을 구해준다 이 함수를 사용하면 간단하게 문제를 풀 수 있다

sum(a)를 한다면 a의 리스트를 전부 합해주는것이다 그리고 합해준 값을 return으로 반환하면 끝

 

문제 풀이 1-1

# solve라는 함수를 만들고 매계변수인 a를 넣는다(참고로 a는 리스트 형태이다)
def solve(a):
	# sum안에 매계변수 a를 넣고 sum을 사용해 매계변수를 합해주고 리턴시켜준다
	return sum(a)

 

문제 풀이 1-2

for문을 사용해 푼다면 매계변수 리스트 형태인 a를 반복문으로 하나씩 더해줄 수도 있다

def solve(a):
	# num은 0
	num = 0
    # 변수 i 안에 매계변수인 리스트 a를 하나씩 넣어 반복문으로 돌려준다
    for i in a:
		# 리스트에 있는 숫자가 하나씩 하나씩 i에 들어가고 num과 i를 더한 값이 num안에 들어간다
    	num += i
    # 반복문 다 돌아가면 리스트의 값이 다 합쳐졌을거다 다 합쳐진 num을 return해준다
    return num

 

문제 2

생성자가 없는 숫자를 셀프 넘버라고 한다. 100보다 작은 셀프 넘버는 총 13개가 있다. 1, 3, 5, 7, 9, 20, 31, 42, 53, 64, 75, 86, 97

10000보다 작거나 같은 셀프 넘버를 한 줄에 하나씩 출력하는 프로그램을 작성하시오.

 

 

문제를 풀기 위해 알아야 할 점들

  • range() 함수의 의미
  • set() 함수의 의미 : set() 함수는 집합 함수로서 중복된 데이터를 가지고 있지 않다(중복 데이터 삭제를 위해 사용)
  • set() 함수에서의 add의 의미
  • sorted() 함수의 의미

 

range() 함수는 연속되는 숫자를 만들어 준다

# range 예시
list(range(0, 5))

[0, 1, 2, 3, 4,]

add는 set 자료형에 값을 추가할 수 있다

# add 예시

a = set([1, 2, 3])
a.add(4)
a
{1, 2, 3, 4}

sorted() 함수는 기존의 리스트 변경이 아닌 새로운 리스트를 정렬해줄때 사용한다

# sorted 예시

sorted([4, 2, 3, 5, 1])
[1, 2, 3, 4, 5]

 

문제풀이

# natural_num 변수 안에 range()를 사용해 1부터 10000까지의 값을 넣는다
# set()함수를 사용해 그 값을 중복된 집합으로 만든다
natural_num = set(range(1, 10001))
# generate_num 변수를 집합으로 만든다
generate_num = set()

# for문을 사용해 1부터 10000의 값을 돌려준다
for i in range(1, 10001):
	# j라는 변수 안에 문자열로된 1-10000값을 넣어준다
    # 숫자를 문자열로 바꾸어 숫자를 쪼개어 주는것이다 123이라는 숫자가 있으면 1,2,3 이렇게
	for j in str(i):
    	# i 안에 정수로 된 1-10000의 값을 하나씩 더해 i 안에 넣어준다
        # 쪼개어진 문자열 숫자를 다시 정수형으로 바꾸어 더하기를 해준다
        # 이 방식을 통해 문제처럼 숫자를 더해줄 수 있게 된다
    	i += int(j)
        # add를 사용해 generate_num이라는 변수안에 i 즉 우리가 for문을 통해
        # 하나씩 더해주는 값들이 i 안에 들어간다
    generate_num.add(i)
    
    # self_num이라는 변수 안에 sorted() 함수를 사용해 새로운 리스트를 만들어 정렬해준다
    # 현재 natural_num 안에는 1-10000의 숫자가 들어있다
    # 현재 generate_num 안에는 for문을 통해 돌렸리고 add를 통해 하나하나
    # 숫자를 합쳐주었던 리스트가 집합 상태로 들어있다
    # 그 두 리스트를 빼고 새로운 리스트를 만든다
    self_num = sorted(natural_num - generate_num)
    # for i 안에 우리가 만든 새로운 리스트를 넣어준다
    for i in self_num:
    # i를 출력한다
    	print(i)

댓글