본문 바로가기

알고리즘/[프로그래머스]Lv.1

[프로그래머스]Lv1. 약수의 개수와 덧셈

본 페이지는 C++ 독학을 위해 작성한 포스트입니다 풀이과정도 포함되어있지만 문법공부에 대한 비중이 있습니다.
(+  Java언어 내용도 포함되어있습니다. )

https://school.programmers.co.kr/learn/courses/30/lessons/77884?language=java 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

1.문제설명

두 정수 left와 right가 매개변수로 주어집니다. 
left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요.

 

2. 문제해결 접근

  • 약수의 갯수를 를 구하는방법? - 반복문으로, 1부터 해당숫자까지, n % i == 0 일경우, 변수의 갯수를 증가한다.
  • 홀/짝 수를 판별하여, 해당 수를 합산하거나 차를 할 수 있따 if(cnt/2 ==0)
  • 약수의 갯수를 담는 변수 하나, 약수의 갯수에 따라 인수를 합산하는 변수 하나를 선언해서 연산해본다.
  • 범위는 for문에서 초깃값으로, 그리고 조건문으로 선언하면 가능할것 같다.

 

3.답안 : [언어 : java]

class Solution {
    public int solution(int left, int right) {
        int answer = 0;
        for (int i = left; i <= right; i++) {
			// 약수를 판별하고, 약수의 갯수를 담는 변수를 선언
			int cnt = 0;
			
			for (int j = 1; j <= i; j++) {
				//나머지가 없는, 다시말해 약수가 나오면, cnt를 증가한다.
				if( i % j == 0 )cnt++;
				
			}
			System.out.println( "cnt : " + cnt );
			// cnt가 짝수일경우합, 홀수일경우 차연산을 한다
			if(cnt % 2 == 0)answer += i;
			else answer -= i;
			
		}
        
        return answer;
    }
}

 

4. C++ 답안

 

#include <string>
#include <vector>

using namespace std;

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