언어: 파이썬
문제 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)
댓글