[프로그래머스] 기사단원의 무기

gcoco·2023년 5월 12일
0

안녕하세요! 교정기 만기전역 한 GCOCO입니다!


잡설 한 COOKIE🍪

제가 교정기를 착용했던 것은 21년 3월부터였는데요, 2년 2개월이 지난 지금에서야 교정기를 오늘 떼고 왔습니다!
새삼 꽤나 길었네요... 군생활보다도요!!!!
하지만 시작이 있다면 끝이 있기 마련!
길고 길었던 교정의 시간도 끝났습니다. (물론 가철식 교정장치를 1년 더 할 예정입니다하하하하하하하하하핳하ㅏ)
교정장치를 떼고 먹는 첫 밥은 정말로 이상한 기분이었습니다. 장치가 없음에도 불구하고 치아 사이사이에
음식물이 끼는 기분은 드는데 실제로는 안낀달까!!!!

아무튼, 기쁩니다!

하나 더 제가 하고싶은 말은, 망설이지 말고 시작하십시오!
당신이 바라는 결과던 아니던 시작이 있어야 결과가 도출되는 법입니다!

기운차게, 문제보러 가시죠!


문제링크:

옛풀이

#include <string>
#include <vector>
#include <cmath>

using namespace std;
int yaksu(int n){
    int count=0;
   for(int i=1;i<=sqrt(n);i++)
       if(n%i==0){
           if(n/i==i)
               count++;
           else
               count+=2;
       }
    return count;
}
int solution(int number, int limit, int power) {
    int answer = 0;
    for(int i=1;i<=number;i++){
        cout<<yaksu(i)<<endl;
        if(yaksu(i)>limit)
            answer+=power;
        else
            answer+=yaksu(i);
    }
    return answer;
}

네 이 문제는 별 거 없습니다!

  1. 1부터 number까지 for에서 출발할 것인데
  2. yaksu함수를 통해 yaksu의 갯수를 구하고
  3. limit를 기준으로 범위 체크
  4. limit를 넘는다면 power만큼 answer에 더해주고
  5. 아니라면 약수의 갯수만큼 answer 더해주기

이 step을 코드로 작성한 것입니다.


새풀이

#include <string>
#include <vector>
#include <cmath>

using namespace std;
int yaksu(int number){
    int count=0;
    for(int i=1;i<=sqrt(number);i++){
        if(number%i==0){
            if(i==sqrt(number))
                count+=1;
            else
                count+=2;
        }
    }
    return count;
}

int solution(int number, int limit, int power) {
    int answer = 0;
    for(int i=1;i<=number;i++){
        int count = yaksu(i);
        if(count>limit)
            answer+=power;
        else
            answer+=count;
    }
    return answer;
}

넵! 똑같습니다.

조금 다른 부분을 살펴보자면

  1. yaksu 함수에서 n/i==i => i==sqrt(number)
  2. main문에서 count 변수를 활용하여 가시성 UP

이정도가 되겠네요~

사실 1번은 표현만 다르지 같은것을 의미하는 것이죠?
정수의 제곱으로 표현이 가능한 숫자이냐?를 묻는것입니다. 예를들어 4일 경우, 2의 제곱으로 나타내듯이요.


가벼운 리뷰였습니다!

이상으로 포스팅을 마치겠습니다.

profile
그코코 입니다.

0개의 댓글