[백준 BOJ] 15781번 헬멧과 조끼 (C++/cpp)

2024. 2. 2. 00:30PS (Program Solving)/BOJ (백준)

문제 설명

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

 

15781번: 헬멧과 조끼

입력의 첫째 줄에 맵에 존재하는 헬멧의 개수 N(N은 1000이하의 자연수)과 조끼의 개수 M(M은 1000이하의 자연수)이 주어진다. 둘째 줄에 각 헬멧의 방어력 h[i] (h[i]는 10억 이하의 자연수)가 N개 만큼

www.acmicpc.net

백준 BOJ 15781번 헬멧과 조끼 문제 사진1
백준 BOJ 15781번 헬멧과 조끼 문제 사진2

 

접근 방법 - 기초적인 최댓값 추출 연산 문제

백준의 15781번 문제는 여러 입력값들 중 최댓값을 추출하여 연산을 수행해야 하는 기초적인 문제이다.

해당 문제는, 입력값들 중 방어력이 가장 높은 헬멧과 조끼를 찾아내고 방어력의 최댓값을 구하여 출력해야 하는 문제이다.

문제에서 설명하는 대로 방어력이 가장 높은 헬멧과 조끼를 각각 찾아내어 이들의 합을 출력하기만 하면 되는 문제이다.

그렇기 때문에, 여러 개의 값들 중 최댓값을 추출하는 원리를 알고 있다면 이 문제는 매우 쉽게 해결할 수 있을 것이다.

아래로 코드와 설명을 나열해 놓으니, 혹여나 해당 문제를 해결하는 데에 어려움을 겪고 있다면 아래를 참고해 보길 바란다.

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

 

코드의 실행 순서

1) 헬멧의 개수(n)와 조끼의 개수(m)를 각각 입력받는다.

 

2) 헬멧과 조끼 방어력 최댓값을 저장할 max1, max2를 각각 0으로 초기화하면서 선언한다.

(자연수로 주어지는 입력값들 중 최댓값을 찾아내야 하기 때문에, 초기화 값은 가장 낮은 값인 0으로 설정하였다. 어차피 갱신될 값임을 전제로 두고 설정하였다.)

 

3) n개 헬멧의 방어력을 순차적으로 입력받으면서 max1의 값과 비교한다.

만약 max1보다 현재 입력값이 더 크다면, 최댓값을 갱신할 필요가 있기 때문에 현재 입력값으로 max1 값을 갱신한다.

 

4) m개 조끼의 방어력을 순차적으로 입력받으면서 max2의 값과 비교한다.

만약 max2보다 현재 입력값이 더 크다면, 최댓값을 갱신할 필요가 있기 때문에 현재 입력값으로 max2 값을 갱신한다.

 

5) 3)과 4)의 연산이 모두 끝났다면, 현재 저장되어 있는 max1과 max2의 합을 출력한 뒤 실행 종료한다.

반응형

 

성공한 코드

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

//백준 15781번 코드
int main() {
	ios::sync_with_stdio(false);
	cin.tie(NULL);	cout.tie(NULL);

	int n, m;
	cin >> n >> m;

	int max1 = 0, max2 = 0;
	for (int i = 0; i < n; i++) {
		int halmet;
		cin >> halmet;

		if (halmet > max1) { max1 = halmet; }
	}
	for (int i = 0; i < m; i++) {
		int vest;
		cin >> vest;

		if (vest > max2) { max2 = vest; }
	}

	cout << max1 + max2 << endl;
}

 

제출 결과

백준 BOJ 15781번 헬멧과 조끼 문제 C++ 제출 결과

(2023.12.17 백준 15781번 문제 제출 결과)

반응형