꾸준하고 즐겁게
Programmers Coding Test 연습 문제 - 약수의 개수와 덧셈 (python -> C++) 본문
Programmers Coding Test 연습 문제 - 약수의 개수와 덧셈 (python -> C++)
wj9183 2021. 6. 13. 22:10https://programmers.co.kr/learn/courses/30/lessons/77884?language=python3
코딩테스트 연습 - 약수의 개수와 덧셈
두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주
programmers.co.kr
먼저 파이썬으로 풀었던 코드다.

def solution(left, right):
temp = []
answer = 0
#레프트 ~ 라이트 모든 수
for i in range(left, right+1):
#그 수의 약수 찾기
for j in range(1, i+1):
#약수가 있다
if i % j == 0:
#리스트에 넣는다.
temp.append(j)
#약수 다 찾고
if len(temp) % 2 == 0:
answer += i
elif len(temp) % 2 == 1:
answer -= i
temp = []
return answer
그냥 순서대로 설명해보겠다.
temp라는 리스트와 answer라는 변수를 만든다.
반복문으로 left 이상 right 이하의 사이의 숫자를 하나씩 가져올 것이다.
그리고 1 이상 그 숫자 이하의 모든 수 i를 가져오고 그중에 약수를 골라 리스트에 담는다.
약수를 다 찾아서 약수의 갯수가 짝수개면 미리 만들어둔 answer 변수에 더하고, 아니면 뺀다.
한 숫자의 약수를 가져왔으면 다른 숫자의 약수를 또 가져와야한다.
temp 리스트에 이미 가져온 약수들이 가득 차 있으면 문제가 있으므로 약수를 구하는 반복문이 끝날 때마다 temp를 빈 리스트로 초기화한다.
이 문제 파이썬으로 푸는 거 빼먹고 넘어갔던 것 같은데, 왜 까먹었는지는 몰라도 아무튼 오늘 풀어서 점수도 부분도 편집 안하고 넣어봤다. 별 거 아니지만 뿌듯.

#include <string>
#include <vector>
using namespace std;
int solution(int left, int right) {
int answer = 0;
for(int i = left; i <= right; i++)
{
std::vector<int> temp;
for (int j = 1; j <= i; j++)
{
if(i % j == 0)
{
temp.push_back(j);
}
}
if(temp.size() % 2 == 0)
{
answer = answer + i;
}
else
{
answer = answer - i;
}
}
return answer;
}
그리고 알고리즘은 파이썬에서 했던 그대로다.
그냥 C 같은데 std::vector<int> temp; 부분만 C++이다.
이 부분은 C++에서 temp라는 이름의 int 자료형 데이터를 담을 수 있는 벡터를 선언한 것이다.
그냥 int가 들어가는 리스트라고 생각하고 썼다.
밑에 push_back 함수도 있다.
'Coding Test > Programmers' 카테고리의 다른 글
Programmers Coding Test 연습 문제 - 문자열 내 p와 y의 개수 (Python -> C++) (0) | 2021.06.17 |
---|---|
Programmers Coding Test 연습 문제 - 직사각형 별찍기 (python -> C++) (0) | 2021.06.16 |
Programmers Coding Test 연습 문제 - [1차] 뉴스 클러스터링 (0) | 2021.06.09 |
Programmers Coding Test 연습 문제 - 영어 끝말잇기 (0) | 2021.06.06 |
Programmers Coding Test 연습 문제 - 5주차 (10문제) (0) | 2021.05.02 |