티스토리 뷰
1. 문제
문제 설명
정수 n을 입력받아 n의 약수를 모두 더한 값을 리턴하는 함수, solution을 완성해주세요.
제한 사항
n
은 0 이상 3000이하인 정수입니다.
입출력 예
n | return |
---|---|
12 | 28 |
5 | 6 |
입출력 예 설명
입출력 예 #1
12의 약수는 1, 2, 3, 4, 6, 12입니다. 이를 모두 더하면 28입니다.
입출력 예 #2
5의 약수는 1, 5입니다. 이를 모두 더하면 6입니다.
2. 풀이 과정
def solution(n):
if n == 0 or n == 1:
return n
factor = set()
for i in range(1, ((n // 2) + 1)):
if (n % i) == 0:
factor.update([i, (n // i)])
return sum(factor)
예를 들어, n = 28인 경우, 14까지만 반복되고 1 - 28, 2 - 14, ... 식으로 묶어서 factor에 들어간다.
다만, 4 - 7 와 7 - 4 는 같기 때문에 애초에 factor를 리스트가 아닌 중복은 제거되는 집합으로 정의하였다.
3. 다른 사람의 풀이
def sumDivisor(num):
return num + sum([i for i in range(1, (num // 2) + 1) if num % i == 0])
역시 한 줄의 미학...!
num / 2 의 수들만 검사하면 되는 것은 캐치했지만 자기 자신을 나중에 따로 더해주면 코드가 더 깔끔해질 수 있었다.
자기 자신을 따로 나중에 따로 더해준다면 내가 푼 방법처럼 약수를 짝지어 factor에 추가하지 않아도 되었다.
여러모로 아쉬웠던 문제
'Algorithm > Programmers' 카테고리의 다른 글
2016년 (0) | 2020.02.14 |
---|---|
두 정수 사이의 합 (0) | 2020.02.14 |
문자열을 정수로 바꾸기 (0) | 2020.02.08 |
서울에서 김서방 찾기 (0) | 2020.02.04 |
짝수와 홀수 (0) | 2020.02.04 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 북마크 어플리케이션
- Django 댓글
- Django 팔로우
- Redis Cache
- java
- Django 회원 정보 수정
- query parameter
- 파이썬
- 서점 어플리케이션
- Django 인스타그램
- Django 비밀번호 수정
- Django 해시태그
- Django 북마크
- Django 검색
- Django 컬렉션
- Django 어플리케이션
- Django 프로젝트 생성
- Django 좋아요
- Django User
- Django 로그인
- Django application
- Django 회원가입
- MySQL
- Django
- Django 로그아웃
- 장고
- Django 업로드
- Django Instagram
- Redis
- python
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함