약수의 개수와 덧셈-파이썬(Python) [프로그래머스/코딩테스트 연습/Lv.1]

2022. 10. 6. 14:07·Algorithm, 코딩테스트
728x90
반응형

문제

https://school.programmers.co.kr/learn/courses/30/lessons/77884?language=python3

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

문제 설명

 

두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요.

제한사항

  • 1 ≤ left ≤ right ≤ 1,000

입출력 예

left right result
13 17 43
24 27 52

입출력 예 설명


입출력 예 #1

  • 다음 표는 13부터 17까지의 수들의 약수를 모두 나타낸 것입니다.
수 약수 약수의 개수
13 1, 13 2
14 1, 2, 7, 14 4
15 1, 3, 5, 15 4
16 1, 2, 4, 8, 16 5
17 1, 17 2
  • 따라서, 13 + 14 + 15 - 16 + 17 = 43을 return 해야 합니다.

입출력 예 #2

  • 다음 표는 24부터 27까지의 수들의 약수를 모두 나타낸 것입니다.
수 약수 약수의 개수
24 1, 2, 3, 4, 6, 8, 12, 24 8
25 1, 5, 25 3
26 1, 2, 13, 26 4
27 1, 3, 9, 27 4
  • 따라서, 24 - 25 + 26 + 27 = 52를 return 해야 합니다.

풀이

def solution(left, right):
    answer = 0
    for i in range(left,right+1):
        sqrt_i=int(i**0.5)
        if sqrt_i**2==i:
            answer-=i
        else:
            answer+=i
    return answer

설명

사실 이 문제는 수학적인 지식을 알고 있다면 간단하게 풀 수 있다. 그 지식이란 "완전 제곱수의 약수의 개수는 홀수이다." 이다. (*왜 그런지는 구글에 검색해보자...)

 

answer라는 변수를 만들어 0으로 초기화하고, for문을 통해 i를 left부터 right까지로 하여 i가 완전 제곱수일 경우 answer에서 빼주고 아닐 경우 더해준다. 완전 제곱수인지 판별하는 방법은 다음과 같다. i를 0.5 제곱한 값에 int()로 정수로 변환한 값을 sqrt_i 값에 대입해준다. 그리고 sqrt_i를 제곱한 값이 i와 같을 경우 i는 완전 제곱수인 것이다. (자세한 내용은 아래 "Tip" 참고)

이후 answer를 반환한다.

 

Tip (아래 "더보기" 클릭)

더보기

어떤 정수가 완전 제곱수인지 판단하는 방법은 이 문제에도 나온 적이 있다.

https://20mini.tistory.com/9?category=1102532 

 

[프로그래머스/코딩테스트 연습/Lv.1] 정수 제곱근 판별-파이썬(Python)

문제 https://school.programmers.co.kr/learn/courses/30/lessons/12934?language=python3 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고,..

20mini.tistory.com

어떤 정수 n이 완전제곱수 였으면 n의 제곱근은 정수이므로 int()함수를 해도 값이 그대로일 것이고, 그 값을 제곱한 수는 n과 같을 것이다. 그러나 n이 완전제곱수가 아니었으면 n의 제곱근은 소수점 아래의 값을 가지고 있을 것이고, n의 제곱근에 int()함수를 실행한 값은 n의 제곱근에서 소수점 아래의 값을 버린 값이 된다. 따라서 그 값을 제곱한 수는 n과 다를 것이다.


TIL

없음

728x90
반응형
저작자표시 비영리 (새창열림)

'Algorithm, 코딩테스트' 카테고리의 다른 글

부족한 금액 계산하기-파이썬(Python) [프로그래머스/코딩테스트 연습/Lv.1]  (1) 2022.10.07
행렬의 덧셈-파이썬(Python) [프로그래머스/코딩테스트 연습/Lv.1]  (0) 2022.10.06
문자열 다루기 기본-파이썬(Python) [프로그래머스/코딩테스트 연습/Lv.1]  (0) 2022.10.06
수박수박수박수박수박수?-파이썬(Python) [프로그래머스/코딩테스트 연습/Lv.1]  (0) 2022.10.06
문자열 내림차순으로 배치하기-파이썬(Python) [프로그래머스/코딩테스트 연습/Lv.1]  (0) 2022.10.03
'Algorithm, 코딩테스트' 카테고리의 다른 글
  • 부족한 금액 계산하기-파이썬(Python) [프로그래머스/코딩테스트 연습/Lv.1]
  • 행렬의 덧셈-파이썬(Python) [프로그래머스/코딩테스트 연습/Lv.1]
  • 문자열 다루기 기본-파이썬(Python) [프로그래머스/코딩테스트 연습/Lv.1]
  • 수박수박수박수박수박수?-파이썬(Python) [프로그래머스/코딩테스트 연습/Lv.1]
20mini
20mini
개발 공부를 하며 알게 된 내용들을 기록한 블로그입니다. 댓글로 조언, 지적, 충고 등 다양한 의견들 항상 환영합니다!!
    반응형
    250x250
  • 20mini
    해시태그코딩 #coding
    20mini
  • 전체
    오늘
    어제
    • 분류 전체보기 (94)
      • Python (1)
      • Algorithm, 코딩테스트 (82)
      • Machine Learning (8)
      • 논문 리뷰 (0)
      • 그 외 공부 관련 (2)
      • 기타 (1)
  • 인기 글

  • 태그

    완전탐색
    lv.1
    lv.2
    Python
    알고리즘
    lv.3
    코딩테스트
    프로그래머스
    hash
    Machine Learning
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
20mini
약수의 개수와 덧셈-파이썬(Python) [프로그래머스/코딩테스트 연습/Lv.1]
상단으로

티스토리툴바