1Level / 월간 코드 챌린지 시즌2 / 약수의 개수와 덧샘

2022. 7. 10. 15:35· 코딩 테스트/프로그래머스 코딩 테스트 연습
목차
  1. 문제 설명
  2. 제한 사항
  3. 문제 풀이 방법
  4. 내가 작성한 코드
728x90

문제 설명

두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서,

약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를

return 하도록 solution 함수를 완성해주세요.

 

 

제한 사항

  • 1 ≤ left ≤ right ≤ 1,000

 

문제 풀이 방법

  • 문제의 알고리즘을 완전탐색으로 생각하여 이중 for문을 이용해 코드를 작성했다.
  • count라는 변수를  for문 안에서 선언하여 약수의 개수를 측정하는 데에 사용했다.
  • 그리고 2로 나누었을 때 나머지가 0이면 약수가 짝수개, 0이 아니면 홀수개라는 로직으로계산했다.

 

내가 작성한 코드

function solution(left, right) {
    let answer = 0;
    for(let i=left; i<=right; i++){
        let count = 0;
        for(let j=1; j<=i; j++){
            if(i % j === 0){
                count += 1;
            }
        }
        if(count % 2 === 0){
            answer += i;
        }
        else{
            answer -= i;
        }
    }
    return answer;
}

 

 

문제를 푼 뒤 다른 사람이 작성한 코드를 보고 놀랐다.....

바로 이 코드인데

function solution(left, right) {
    var answer = 0;
    for (let i = left; i <= right; i++) {
        if (Number.isInteger(Math.sqrt(i))) {
            answer -= i;
        } else {
            answer += i;
        }
    }
    return answer;
}

이 코드에서 주목해야 할 부분은

if (Number.isInteger(Math.sqrt(i)))

이 조건문 이다.

 

로직은 제곱근이 정수이면 약수의 개수가 홀수라는 것이다.

 

예를 들어보자

먼저 12라는 수를 i에 넣어보자

제곱근은 3.4641... 이며,

약수는 1, 2, 3, 4, 6, 12 이렇게 6개이다.

 

다른 예로 9를 보자

제곱근은 3이며,

약수는 1, 3, 9 이렇게 3개이다.

 

좀 더 스마트하게 생각하면 기발한 코드가 나올 수 있다.

 

위의 코드는 완전 탐색 알고리즘을 이용했다고 말 할 수 있는가?

내 생각은 할 수 있다고 생각한다.

우선 left에서 right까지의 모든 수를 탐색했고,

그 수들 중 약수의 개수가 짝수인 수와 홀수인 수를 구분했기에

완전 탐색 알고리즘을 사용했다고 생각한다......

 

아직 초짜가 생각하는거라 틀릴지도 모르겠다....

728x90

'코딩 테스트 > 프로그래머스 코딩 테스트 연습' 카테고리의 다른 글

1Level / 월간 코드 챌린지 시즌3 / 나머지가 1이 되는 수 찾기  (0) 2022.07.11
1Level / 월간 코드 챌린지 시즌 3 / 없는 숫자 더하기  (0) 2022.07.10
2Level / 월간 코드 챌린지 시즌1 / 이진 변환 반복하기  (0) 2022.07.09
2Level / 월간 코드 챌린지 시즌1 / 삼각 달팽이  (0) 2022.07.08
1Level / 월간 코드 챌린지 시즌1 / 두 개 뽑아서 더하기  (0) 2022.07.07
  1. 문제 설명
  2. 제한 사항
  3. 문제 풀이 방법
  4. 내가 작성한 코드
'코딩 테스트/프로그래머스 코딩 테스트 연습' 카테고리의 다른 글
  • 1Level / 월간 코드 챌린지 시즌3 / 나머지가 1이 되는 수 찾기
  • 1Level / 월간 코드 챌린지 시즌 3 / 없는 숫자 더하기
  • 2Level / 월간 코드 챌린지 시즌1 / 이진 변환 반복하기
  • 2Level / 월간 코드 챌린지 시즌1 / 삼각 달팽이
58청춘
58청춘
할 수 있었는데, 해야했나, 했어만 했는데 라는 말을 하며 슬픔과 좌절감을 느끼지 않도록
250x250
58청춘
Just 두 It
58청춘
전체
오늘
어제
  • 분류 전체보기 (545) N
    • JavaScript (107) N
      • 모던 자바스크립트 Deep Dive (48)
      • You Don't know JS (44) N
      • Javascript (15)
    • TypeScript (8)
      • 이펙티브 타입스크립트 (3)
    • React (49)
      • 모던 리액트 Deep Dive (8)
      • 리액트 기초 (7)
    • 코딩 테스트 (285) N
      • 프로그래머스 코딩 테스트 연습 (208)
      • 백준 (65) N
      • 구름 Goorm (12)
    • 프로젝트 (2)
      • 북극팽귄 프로젝트 (9)
      • TYLEGG (2)
      • 가말다 - 마일스톤 (11)
      • INMATE 인천 맛집 소개 (11)
    • FE 이모저모 공부 (22)
    • CS (21)
      • 네트워크 (4)
    • MySQL (5)
    • 회고록 (2)
      • React 프리온보딩 (3)
      • 원티드 프리온보딩 프론트엔드 회고록 (0)
      • 가말다 회고록 (0)
    • 파이썬 (2)

블로그 메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록
  • 글쓰기

공지사항

인기 글

태그

  • BFS
  • 프로그래머스
  • dfs
  • 구현
  • REACT
  • 코테연습
  • cs
  • FE개발자
  • 배열
  • 문자열
  • 백준
  • 카카오
  • typeScript
  • 프로젝트
  • 수학
  • JavaScript
  • 스택
  • 완전탐색
  • Deep Dive
  • dp
  • 코테준비
  • 취준생
  • 정렬
  • 알고리즘
  • 취준
  • 스코프
  • 시뮬레이션
  • node.js
  • 코딩테스트
  • 가말다

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.1
58청춘
1Level / 월간 코드 챌린지 시즌2 / 약수의 개수와 덧샘
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.