[백준 BOJ] 11948번 과목선택 (C++/cpp)

2022. 8. 21. 00:23PS (Program Solving)/BOJ (백준)

문제 설명

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

 

11948번: 과목선택

JOI는 물리, 화학, 생물, 지구과학, 역사, 지리 총 6 과목의 시험을 봤다. 각 시험의 만점은 100점이다. JOI는 물리, 화학, 생물, 지구과학 4과목 중에서 3 과목을 선택하고 역사, 지리 2 과목 중에

www.acmicpc.net

백준 BOJ 11948번 과목선택 문제 사진1
백준 BOJ 11948번 과목선택 문제 사진2

 

접근 방법 - 사칙연산의 응용문제

백준의 11948번 문제는 사칙연산을 응용하여 해결해야 하는 문제이다.

해당 문제는, 4과목과 2과목 중 3과목과 1과목을 선택할 시 입력받은 6과목의 점수들을 통하여 받을 수 있는 가장 높은 점수를 출력해야 하는 문제이다.

알고리즘을 짜는 데에 어색함이 있다면 배열을 이용하여 해결하는 것이 수월할 수 있는 문제이다.

다만 필자의 경우엔 입력을 받는 대로 바로 연산을 수행하면서, 배열을 사용하지 않는 방향에서 해결을 시도해보았다.

이 문제의 핵심은 최솟값을 구하는 데에 있다.

이 점만 알고 있다면 해당 문제를 해결하는 데에는 큰 어려움이 없을 것으로 예상이 된다.

다만 해결에 어려움을 겪고 있다면, 아래 필자의 설명과 코드를 한번 참고해보길 바란다.

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

 

코드의 실행 순서

1) 4과목과 2과목의 최솟값을 저장할 변수 min1, min2를 각각 100으로 초기화하여 선언해둔다.

(입력값의 최댓값이 100이기 때문에, 최솟값 연산을 원활히 하기 위해서 100으로 설정해두었다.)

 

2) 그와 동시에, 점수의 합계를 저장할 변수 sum을 0으로 초기화하여 선언해둔다.

 

3) 2개의 반복문으로 아래와 같은 연산을 취하며, 4과목과 2과목에 대한 연산을 각각 수행하도록 한다.

- 각 과목의 점수(a)를 입력받는다.

- sum에 a의 값을 더한다.

- 만일 각 min1과 min2의 값보다 a의 값이 더 작다면, 각 min1과 min2에 해당 a의 값을 저장한다.

 

4) 연산이 완료된 sum에, 최종적으로 저장된 min1, min2의 값을 뺀다.

 

5) 현재의 sum 값을 출력한 뒤, 실행 종료한다.

반응형

 

성공한 코드

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

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

	int min1 = 100;
	int min2 = 100;
	int sum = 0;
	for (int i = 0; i < 4; i++) {
		int a;
		cin >> a;
		sum += a;
		if (min1 > a) { min1 = a; }
	}
	for (int i = 0; i < 2; i++) {
		int a;
		cin >> a;
		sum += a;
		if (min2 > a) { min2 = a; }
	}
	sum -= min1;	sum -= min2;
	cout << sum << endl;
}

 

제출 결과

백준 BOJ 11948번 과목선택 문제 C++ 제출 결과

(2022.07.31 백준 11948번 문제 제출 결과)

반응형