[코테] 약수구하기

HOU·2022년 5월 26일
0

코딩테스트

목록 보기
5/24
post-thumbnail

문제

약수의 개수와 덧셈

문제 설명

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

해결법

Step1.

약수를 구하는 알고리즘이 필요하다! 처음에 너무 수학스러워서 소인수분해 해서 약수를 구할 수 있다는데 쉽게 설명하면 16은 24 저 4에 1을 더한게 약수의 갯수이다. ㅎㅎ 하지만 나는 그냥 약수의 정의처럼!

약수의 정의
어떤 수나 식을 나누어 나머지가 없이 떨어지는 수나 식을 일컫는 말.

if(n%i) == 0 일 때라는 조건을 넣어서 코드를 작성했다.

step2.

이제 약수의 갯수에 짝수나 홀수에 따라서 더해줄지 -를 해줄지 결정해야 된다.
이 부분은 그냥 짝수 인지, 홀수 인지로 계산했다.

코드

내가 푼 코드

def solution(left, right):
  answer = 0

  for n in range(left, right+1):
      count = 0
      for i in range(1, n+1):
          if(n%i) == 0:
              count+= 1;
              
      if(count % 2)==0:
          answer += n;
      else:
          answer -= n;
      print(count)
      
  return answer

이렇게 완성했다. 풀어서 좋아했지만, 다른 수학 천재의 풀이법을 보고 바로 현타가 찾아왓다.

다른 사람 코드

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

와우 awsome하다 여기서 나는 4번째줄에 i**0.5를 처음에 잘 이해하지 못했는데, 제곱근을 이야기하는 거였다. 제곱근이 정수면 약수가 홀수라는 사실도 오늘 알았다. ㅎㅎㅎ
공부안한 티가 팍팍 나네..ㅋㅋ

소감

세상에는 수학 천재들이 많다! 하지만 나에겐 구글 선생님이 계시다. 화이팅!

profile
하루 한 걸음 성장하는 개발자

0개의 댓글