프로그래머스 코딩테스트 연습 - 약수의 개수와 덧셈 문제 풀기

By qsp , Created on 17th Jun 2021

프로그래머스 코딩 테스트 리뷰입니다~ 약수 문제를 한번 풀어 보았습니다~
문제를 풀면 다른 사람들은 어떻게 풀었는지 볼 수가 있는데 일단은 나랑 비슷한 방식으로 푼 사람들도 있어서 다행이다 😂 라는 생각도 들고 ㅋㅋㅋ
또 다른 사람들은 간단하면서 쉽게 푼 사람도 있어서 그런 것들은 보는 신기함이 있었네요~
언제나 내 코드가 KISS가 되길 원하며! ㅋ
코드 리뷰 포스팅 시작 합니더~

프로그래머스 코딩테스트 연습 리뷰하기

Programmers 프로그래머스에서 지난 주에 코딩 테스트를 했는데,
까먹기 전에 코딩테스트 코드 리뷰를 합니다~


약수의 개수와 덧셈

프로그래밍 언어는 c++ 입니다~

먼저 문제는 이렇습니다~요~

내가 작성한 코드

#include <string>
#include <vector>
#include <iostream>
using namespace std;

int divisionNum(int num) {
    //약수 구하기 함수 만들김
    int count =0;
    //i 값이 약수인지 확인 후 카운트 
    for (int i=1; i <= num; i++) {
        if (num % i == 0) {
            count++;
        }
    }    
    // 카운트 리턴해줌
    return count;
}


int solution(int left, int right) {
    int answer = 0;
    int result;

    //자기 자신도 포함해서 넘기기
    // i값이 처음 left값이고 right값까지 반복
    for (int i=left; i <= right; i++) {
        result = divisionNum(i); //divsionNum()호출 i값으로 넘김

        if (result % 2 ==0) { //리턴받은 결과가 짝수이면 플러스하기
            answer += i;
        } else {  //리턴받은 결과가 짝수 아니면(홀수) 마이너스 하기
            answer -= i; 
        }

    cout << answer << endl;
    }

    return answer;
}


코드 리뷰

약수를 구하는 문제였는데, 약수? 악수?🤝 역시 뭔지 떠오르지를 않는다? ㅋㅋ
바로 검색을 해보니 초등학교 문제가 나온다~ 역시 내 실력은 여기에 ㅋㅋㅋ

약수: 어떤 수를 나누었을 때 나누어 떨어지게 하는 자연수입니다.

응? 😩

어떤 수에서 자기자신을 포함해서 다 나누었을 때 떨어지게 하는 수가 약수라는 건데
문제 설명에서 다행이 예를 들어 설명이 되어 있어서 금방(?) 이해할 수 있었다

예로 13을 나누게 되면 1로 나누면 13개로 나눠서 딱 떨어지고 그리고 2,3,4,5,6,7,8,9,10,11,12 까지는 딱 떨어지지 않는다
마지막으로 13은 자기자신과는 13을 1로 나눠서 딱떨어져서 (나머지가 없게 되고)

그래서 1, 13이 약수라고 하는 거구나 ㅋㅋㅋ 좋았으! 풀어보자!! 😬


solution() 함수부터 살펴보면, 프로그래머스에서 제공하는 main함수라고 보면 될 듯하다

이제 left와 right 변수를 매개변수로 자동으로 할당이 되어서
그 변수들을 활용해서 처음 수 left와 두 번째가 right 만큼 반복문을 만들어서 반복하게 했다

13과 17이 입력이 되면 13, 14, 15, 16, 17 까지 반복하게 했다

이제 약수를 구해야하는데 여기에서는 사용자함수 (내가 만듬 ㅋㅋ) divisionNum() 함수를 호출하는데
이때 arguments (매개변수)로 현재 i값을 넘겨준다

divisionNum() 함수에서는 num 이란 변수로 값을 넘겨 받아서 그 수 만큼 반복을 해준다
그리고 즉 처음에 13이 넘어오면 13번을 반복하는데 이때 모든 수로 나눠본다
나머지가 없으면 카운트를 계속 더해주고 카운트를 return을 하게 된다

이제 다시 solution() 메인 함수로 돌아와서 리턴 받은 결과를 토대로 짝수이면
(2로 나눠서 나머지가 0이면 짝수임) answer 변수에 더하거나 빼줘야하는데

문제에서 짝수에 해당하면 제시된 left와 right의 수들을 모두 더해주라고 했으므로
answer 변수에 i값 (현재 제시된 숫자)를 더해주고, 홀수 이면 빼는 방식으로 처리~

이제 마지막으로 answer 변수를 리턴해주면 완성!


코드리뷰를 이렇게 하는게 맞는가 모르겠다 ㅋㅋ

다시 보니 조금 디테일(?)하게 했나..? 모르겠다 😝 ㅋㅋ
끝!

댓글

댓글이 없습니다.