개발자 혜진
꾸준하게 개발 블로그
개발자 혜진
05-25 13:09
전체 방문자
오늘
어제
  • 전체보기 (69)
    • 코딩테스트 (25)
    • HTML (1)
    • CSS (6)
    • React (3)
    • Vue (8)
    • Javascript (9)
    • Java (3)
    • IDE (1)
    • Toy Project (10)
    • 개발 서적 (2)
    • 개발 이야기 (0)
    • TMI (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 글쓰기

인기 글

태그

  • springboot mustache 한글 깨짐
  • javascript 진수
  • 드로잉윗유
  • styled-component focus out
  • vuetify
  • 클래스 토글
  • 시저암호javascript
  • vue2캘린더 만들기
  • spring boot 한글 깨짐
  • 프로그래머스예산
  • 박스가운데정렬
  • 가로가운데정렬
  • classList메소드
  • Java초기화
  • vue2
  • 텍스트에이미지적용
  • react
  • 시저암호js
  • div가운데정렬
  • TypeScript기본문법
  • 예산js
  • 8진수2진수
  • input Foucs Out
  • 뷰티파이
  • 프로그래머스0
  • 텍스트에그라데이션
  • 프로그래머스 3진법뒤집기
  • js 진수변환
  • 프로그래머스
  • 이상한문자만들기 js

최근 글

hELLO · Designed By 정상우.
개발자 혜진

꾸준하게 개발 블로그

코딩테스트

[코딩테스트] 순서쌍의 개수

2022. 10. 18. 12:18

문제 설명

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


제한사항
  • 1 ≤ n ≤ 1,000,000

 

입출력 예nresult
20 6
100 9

입출력 예 설명

입출력 예 #1

  • n이 20 이므로 곱이 20인 순서쌍은 (1, 20), (2, 10), (4, 5), (5, 4), (10, 2), (20, 1) 이므로 6을 return합니다.

입출력 예 #2

  • n이 100 이므로 곱이 100인 순서쌍은 (1, 100), (2, 50), (4, 25), (5, 20), (10, 10), (20, 5), (25, 4), (50, 2), (100, 1) 이므로 9를 return합니다.

 

function solution(n) {
    let pairNum = 0
    for(var i = 1; i <= n; i++){
        n % i === 0 ? pairNum++ : 0 
    }
    return pairNum
}

저는 살짝 꼼수를 부려서 해결 했지만, 순서쌍의 개수가 아닌 숫서쌍을 반환하라는 문제였다면 코드 내용이 조금 바뀌어야 할 것 같습니다. 

만약 곱20인 순서쌍을 반환하시오 였다면을 생각해서 코드를 구현해보면.

function solution(n) {
    let pairNumList = []
    for(var i = 1; i <= n; i++){
        if(n % i === 0 ){
            pairNumList.push([i,n/i])
        }
    }
    return pairNumList
}

이런 식으로 구현했을 것 같습니다. 하지만 유효성에서 좋은 결과물을 가져올 수 있을지 고민입니다. 

다른 분들의 코드로 공부하던중 유효성 부분에서 가장 좋을것 같은 코드를 정리하려고 합니다.

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

Math.sqrt는 제곱근을 반환해 주는 JS내장 메소드입니다.

isInteger은 숫자가 실수인지 정수인지를 판별해 주는 메서드입니다.

절반만큼만 실행시켜줘도, 순서쌍의 개수를 구할 수 있는 코드입니다. (1,20)(20,1)은 같은 거니까요. 그리고 만약 Math.sqrt가 정수라면 (10,10)과 같이 곱하는 수가 있으니, Number.isInteger(Math.sqrt(n))가 참인지 거짓인지 판단해 참이면 +1을 해주고 ans를 return 해주고 그렇지 않으면 그냥 ans를 리턴해주는 것 같습니다. 제가 짠 코드보다 절반 정도 for문을 덜 도니 효율성 측면에서는 아주 좋은 것 같습니다. 

저작자표시 비영리 변경금지 (새창열림)

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

[코딩테스트]주사위의 개수  (0) 2022.10.27
[코딩테스트]배열 회전 시키기  (0) 2022.10.18
[코딩테스트] 배열의 유사도  (0) 2022.10.15
[코딩테스트] 제곱수 판별하기  (0) 2022.10.15
[코딩테스트] 가위 바위 보  (0) 2022.10.14
    '코딩테스트' 카테고리의 다른 글
    • [코딩테스트]주사위의 개수
    • [코딩테스트]배열 회전 시키기
    • [코딩테스트] 배열의 유사도
    • [코딩테스트] 제곱수 판별하기
    개발자 혜진
    개발자 혜진
    잊어버리지 않기위한 개발 블로그

    티스토리툴바