2022. 4. 11. 01:29ㆍPS (Program Solving)/BOJ (백준)
문제 설명
https://www.acmicpc.net/problem/2576
2576번: 홀수
7개의 자연수가 주어질 때, 이들 중 홀수인 자연수들을 모두 골라 그 합을 구하고, 고른 홀수들 중 최솟값을 찾는 프로그램을 작성하시오. 예를 들어, 7개의 자연수 12, 77, 38, 41, 53, 92, 85가 주어지
www.acmicpc.net
접근 방법 - 나머지 연산자를 이용한 수학 문제
백준의 2576번 문제는 나머지 연산자를 주로 이용하여 해결할 수 있는 수학 문제이다.
해당 문제는, 입력값들 중 홀수들의 합과 그들 중 최솟값을 구해 출력해야 하는 문제이다.
여기서 홀수는 2로 나누어 떨어지지 않기 때문에 나머지가 존재하며, 짝수는 2로 나누어 떨어지기 때문에 나머지가 존재하지 않는다.
필자는 이 점을 이용하여 홀수와 짝수를 판별하였고 연산을 진행하였다.
위의 핵심 개념을 사용하기 위해선 나머지 연산자가 필요하다는 점 참고하길 바란다.
필자는 아래의 순서대로 코드를 작성하여 문제를 해결하였다.
코드의 실행 순서
1) min을 100으로 초기화하여 선언하고, sum을 0으로 초기화하여 선언한다.
(입력값들이 모두 100보다 작기 때문에, 원활한 연산을 위해 min을 100으로 초기화하였다.)
2) 반복문을 7번 실행하며 아래의 연산을 취한다. (모든 테스트 케이스에서 고정적으로 7개의 입력값을 받는다.)
- 자연수를 하나씩 입력받는다.
- 입력받은 자연수를 나머지 연산자로 홀수 여부를 판별한다.
만일 홀수라면, sum에 입력값만큼 더한다. 그리고 이 홀수가 min보다 작다면 min에 해당 값을 저장한다.
- 입력을 모두 받을 때까지 이 과정을 반복한다.
3) 연산이 끝났다면, 아래의 순서대로 출력을 수행한다.
- 만일 sum이 0이라면, 입력값들 중 홀수가 존재하지 않다는 뜻이다. 이 경우엔, -1만 출력한다.
- sum이 0이 아니라면, 홀수가 존재한다는 뜻이다. 이 경우엔, 최종적으로 저장된 sum과 min을 순차적으로 출력한다.
4) 출력이 완료되었다면 실행 종료한다.
성공한 코드
#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable: 4996)
#include <iostream>
#define endl '\n'
using namespace std;
//백준 2576번 코드
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
int a;
int min = 100;
int sum = 0;
for (int i = 0; i < 7; i++) {
cin >> a;
if (a % 2 != 0) {
sum += a;
if (min > a) { min = a; }
}
}
if (sum == 0) { cout << -1 << endl; }
else {
cout << sum << endl << min << endl;
}
}
제출 결과
(2022.04.05 백준 2576번 문제 제출 결과)
'PS (Program Solving) > BOJ (백준)' 카테고리의 다른 글
[백준 BOJ] 15596번 정수 N개의 합 (C++/cpp) (0) | 2022.04.16 |
---|---|
[백준 BOJ] 10430번 나머지 (C++/cpp) (0) | 2022.04.13 |
[백준 BOJ] 2744번 대소문자 바꾸기 (C++/cpp) (0) | 2022.04.11 |
[백준 BOJ] 15962번 새로운 시작 (C++/cpp) (0) | 2022.04.10 |
[백준 BOJ] 2292번 벌집 (C++/cpp) (0) | 2022.04.10 |