[백준 BOJ] 17173번 배수들의 합 (C++/cpp)

2022. 10. 12. 12:05PS (Program Solving)/BOJ (백준)

문제 설명

https://www.acmicpc.net/problem/17173

 

17173번: 배수들의 합

신원이는 백준에서 배수에 관한 문제를 풀다가 감명을 받아 새로운 문제를 만들어보았다. 자연수 N과 M개의 자연수 Ki가 주어진다. Ki중 적어도 하나의 배수이면서 1 이상 N 이하인 수의 합을 구하

www.acmicpc.net

백준 BOJ 17173번 배수들의 합 문제 사진

 

접근 방법 - 나머지 연산자 사용의 기초 문제

백준의 17173번 문제는 나머지 연산자 사용의 기초적인 원리를 다루고 있는 문제이다.

해당 문제는, 주어진 범위에 있어 입력값으로 나오는 숫자의 배수인 경우들의 합을 구하여 출력해야 하는 문제이다.

이 문제와 같은 경우에는 "나누어 떨어진다."라는 개념을 주로 이용해야하기 때문에 %(나머지 연산자)를 응용해야 한다.

주어진 범위의 숫자들을 입력값으로 나누었을 때의 결과를 따져야 하는데, 이러한 연산에 능숙하다면 쉽게 풀 수 있는 문제로 예상된다.

혹여나 해당 문제를 해결하는 데에 어려움을 겪고 있다면 아래의 설명과 코드를 참고해보길 바란다.

필자는 아래의 순서대로 코드를 작성하여 문제를 해결하였다.

 

코드의 실행 순서

1) 배수 판별을 위한 입력값들을 저장할 배열(cnt)을 전역 변수로 선언해둔다.

 

2) 숫자의 범위(1~n)와 cnt 배열에 입력받을 값의 개수(m)를 입력받는다.

뒤이어, m의 크기에 따라 cnt의 값을 하나씩 입력받는다.

 

3) 배수들의 합을 저장할 변수 sum을 0으로 초기화하여 선언한다.

 

4) 2중 반복문을 통하여 아래의 연산을 취한다. 

(1부터 n까지 하여, cnt 중 하나의 값에 대한 배수가 있는지 아닌지를 판별하려 한다.)

- 만일 현재 탐색값 i가 cnt의 값 중 하나에 나누어 떨어진다면, sum에 해당 i를 더하도록 한다.

그리고 break를 통해, 다음 i의 값을 탐색하도록 한다.

 

5) 연산이 완료되었다면, 최종적으로 저장된 sum의 값을 출력한 뒤 실행 종료한다.

반응형

 

성공한 코드

#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable: 4996)
#include <iostream>
#define endl '\n'
using namespace std;

//백준 17173번 코드
int cnt[1000];
int main() {
	ios::sync_with_stdio(false);
	cin.tie(NULL);	cout.tie(NULL);

	int n, m;
	cin >> n >> m;
	for (int i = 0; i < m; i++) {
		cin >> cnt[i];
	}

	int sum = 0;
	for (int i = 1; i <= n; i++) {
		for (int j = 0; j < m; j++) {
			if (i % cnt[j] == 0) {
				sum += i;
				break;
			}
		}
	}
	cout << sum << endl;
}

 

제출 결과

백준 BOJ 17173번 배수들의 합 문제 C++ 제출 결과

(2022.05.18 백준 17173번 문제 제출 결과)

반응형