본 페이지는 C++ 독학을 위해 작성한 포스트입니다 풀이과정도 포함되어있지만 문법공부에 대한 비중이 있습니다.
(+ Java언어 내용도 포함되어있습니다. )
https://school.programmers.co.kr/learn/courses/30/lessons/77884?language=java
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;
}
'알고리즘 > [프로그래머스]Lv.1' 카테고리의 다른 글
[프로그래머스]Lv1. 서울에서 김서방 찾기 (0) | 2022.10.31 |
---|---|
[프로그래머스]Lv1. 없는 숫자 더하기 (0) | 2022.10.31 |
[프로그래머스]Lv1. 문자열 다루기 (0) | 2022.10.31 |
[프로그래머스]Lv1. 핸드폰 번호 가리기 (0) | 2022.10.26 |
[프로그래머스]Lv1. 문자열을 정수로 (0) | 2022.10.26 |