반응형
문제
https://school.programmers.co.kr/learn/courses/30/lessons/120836
🐍파이썬
def solution(n):
answer = 0
for i in range(1, int(n**(1/2))+1):
if n % i == 0:
answer += 1
answer *= 2
if n % n**(1/2) == 0:
answer -= 1
return answer
1️⃣ n의 루트만큼 반복문을 돌며 n % i이 나누어 떨어지는 경우를 카운트한다.
2️⃣ 위의 반복문은 n의 루트만큼만 돌았기 때문에 모든 경우의 수를 구하기 위해 answer에 2를 곱한다.
3️⃣ 만약 n이 n의 루트로 나누어 떨어진다면 그 몫도 n**(1/2)가 되기 때문에 이 경우는 중복제거를 위해 answer에서 하나를 빼준다.
ex) n이 100인 경우 n의 루트인 10으로 나누면 순서쌍은 (10, 10)이 되기 때문에 중복되는 경우 -1을 진행
다른 풀이 방법
def solution(n):
return len(list(filter(lambda v: n % (v+1) == 0, range(n))))
n=6일 때 n이 (0+1, 1+1, ..., 6+1)으로 나누어 떨어지는 경우를 추려 리스트에 넣고 리스트의 길이를 리턴
💡 filter()
- 여러 개의 데이터로 중 원하는 조건의 데이터를 추려낼 때 사용하는 파이썬 내장함수
- 기본문법: filter(조건 함수, 순회 가능한 데이터)
- 참고: https://www.daleseo.com/python-filter/
def solution(n):
answer = 0
for i in range(n):
if n % (i+1) == 0:
answer += 1
return answer
for문을 사용한 풀이
🐥자바스크립트
function solution(n) {
let answer = 0;
for(let i = 1; i <= n; i++){
if(n % i == 0){
answer++;
}
}
return answer
}
다른 풀이 방법
function solution(n) {
let ans = 0;
for (let i = 1; i < Math.sqrt(n); i++)
if (n%i === 0) ans+=2;
return Number.isInteger(Math.sqrt(n)) ? ans+1 : ans;
}
루트만큼 돌면서 n % i가 나누어 떨어지는지 확인하고 나누어 떨어지면 ans에 2를 더한다.
끝으로 루트값이 integer인지 확인하고 integer이면 +1, 아니면 그냥 ans만 리턴
원리: n이 어떤 정수의 제곱이라면 루트값은 정수이다.
반응형
'Problem Solving > 프로그래머스' 카테고리의 다른 글
[프로그래머스 | 파이썬 / 자바스크립트] 삼각형의 완성조건 (2)(코딩테스트 입문/ level 0) (0) | 2023.02.23 |
---|---|
[프로그래머스 | 파이썬 / 자바스크립트] 모음제거(코딩테스트 입문/ level 0) (0) | 2023.02.22 |
[프로그래머스 | 파이썬 / 자바스크립트] 둘만의 암호(연습문제/ level 1) (0) | 2023.02.22 |
[프로그래머스 | 파이썬 / 자바스크립트] 안전지대(코딩테스트 입문/ level 0) (0) | 2023.02.22 |
[프로그래머스 | 파이썬 / 자바스크립트] 자릿수 더하기(코딩테스트 입문/ level 0) (0) | 2023.02.21 |
[프로그래머스 | 파이썬 / 자바스크립트] n의 배수 고르기(코딩테스트 입문/ level 0) (2) | 2023.02.21 |