2863. 이게 분수?
https://www.acmicpc.net/problem/2863
2863번: 이게 분수?
첫째 줄에 표를 몇 번 돌려야 표의 값이 최대가 되는지 출력한다. 만약, 그러한 값이 여러개라면 가장 작은 값을 출력한다.
www.acmicpc.net
입력으로 100보다 작은 양의 정수 4개가 입력되고, 이 정수들을 시계방향으로 돌린 후 함수에 해당값을 넣어 계산하는 문제이다. 우선 입력되는 정수가 4개로 고정되어있으므로 결과값이 총 4개가 나온다.
이 문제를 처음 접근할 때, 규칙을 찾아서 각 자리의 인덱스가 어떻게 변화하는 지를 찾아내려고 했지만 결론적으로 경우의 수가 4개밖에 없기 때문에 규칙을 찾아도 주먹구구식 방식이 더 빠르고 간편하다는 결론이 나왔다.
앗! 그리고 필자가 문제를 풀 때 놓친 부분이 있었다. 문제에서 주어진 식은 나눗셈과 덧셈이 함께 있다. 나눗셈의 결과가 소숫점까지 발생할 수 있으므로 계산 결과는 모두 double형으로 저장했다.
때문에 입력 받은 정수를 순서대로 배열에 저장하고, 모든 경우의 함수값을 벡터에 저장했다. 벡터를 통하여 최대값이 되는 경우 표를 몇번 돌려야하는 지 쉽게 알 수 있다.
더보기
코드:
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
double arr[4];
vector<double> v;
int temp = -1;
int ret;
int main() {
ios::sync_with_stdio(0);
cout.tie(); cin.tie();
for (int i = 0; i < 4; i++) {
cin >> arr[i];
}
v.push_back(arr[0] / arr[2] + arr[1] / arr[3]);
v.push_back(arr[2] / arr[3] + arr[0] / arr[1]);
v.push_back(arr[3] / arr[1] + arr[2] / arr[0]);
v.push_back(arr[1] / arr[0] + arr[3] / arr[2]);
for (int i = 0; i < v.size(); i++) {
if (v[i] > temp) {
temp = v[i];
ret = i;
}
}
cout <<ret;
}
'알고리즘 이론 > 백준' 카테고리의 다른 글
[백준] 11059 크리 문자열 c++ (0) | 2021.06.26 |
---|---|
[5032] 탄산 음료 C++ (0) | 2021.06.26 |
[백준] 1427 소트인사이드 c++ (0) | 2021.06.26 |
[백준] 1065 한수 c++ (0) | 2021.06.26 |
[백준] 1026번 보물 c++ (0) | 2021.06.26 |