순서쌍의 개수

HS K·2023년 1월 30일
0
post-custom-banner

문제설명

순서쌍이란 두 개의 숫자를 순서를 정하여 짝지어 나타낸 쌍으로 (a, b)로 표기합니다. 자연수 n이 매개변수로 주어질 때 두 숫자의 곱이 n인 자연수 순서쌍의 개수를 return하도록 solution 함수를 완성해주세요.

제한사항

  • 1 ≤ n ≤ 1,000,000

내가 쓴 답

function solution(n) {
    let k = [a,b]
    let count = 0;
    if (a>0 && b>0) {
        if (a*b === n) {
            count++;
        }
    }
    return count
}

※ 풀이 아이디어를 떠올리지 못하겠다. [a,b] 배열을 만들어 그 배열의 개수를 count하는 알고리즘을 만들려고 했지만, n도 변수이고 a,b도 변수이기 때문에 자꾸 변수만 많아져서 다루기가 어려워졌다.

수정한 답

여러종류의 풀이 보기

1번

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;
}

2번

function solution(n) {
    const answer = []
    for (let i = 0; i < n + 1; i++) {
        if (n % i === 0) {
            answer.push(i)
        }
    }
    return answer.length
}

3번

function solution(n) {
    var answer = 0;
    for(let i = 1; i <= n; i++){
        if(n % i === 0) answer += 1;
    }

    return answer;
}

후기

  1. 내가 생각한 아이디어로 원하는 알고리즘을 작성하기 위해 어떤 고민을 해야하는지 아직 잘 감이 안잡히는 것 같다.
    ex) 이미 n은 변수로 나왔는데, a,b를 다시 변수로 설정해서 가져와야하나?
  1. 변수가 많아지면 관리하기가 어려워지는게 이런 뜻인것 같다.
  1. 변수를 언제 선언해야하는 줄 모른다. (=필요한 순간이 언제인지 모름)
  1. 풀이를 보니 사고의 관점만 조금 바꿔줬다면 생각보다 간단했다. 자꾸 순서쌍 (a,b)만 생각하면서 좋은방법은 없었나? 고민을 많이 했는데, 변수는 많아질수록 다루기가 어려워진다는 것을 유념해야겠다.
profile
주의사항 : 최대한 정확하게 작성하려고 하지만, 틀릴내용이 있을 수도 있으니 유의!
post-custom-banner

0개의 댓글