문제
직육면체의 가로, 세로, 높이, 부피 중 하나가 0(미지수)일 때, 나머지 세 값으로 미지수를 구하라.
입력
여러 테스트 케이스에 네 값이 주어지며, 모두 0이면 종료한다. 하나가 0인 값이 미지수이다.
출력
각 케이스마다 네 값을 모두 채워서 출력한다.
예제
| 입력 | 출력 |
|---|---|
2 3 0 24 0 0 0 0 | 2 3 4 24 |
풀이
0인 위치를 찾아 나머지 값들로 역산한다.
- 네 값 중 0인 위치를 기록한다
- 네 번째 값(부피)이 0이 아니면, 나머지 세 값의 곱으로 나누어 미지수를 구한다
- 네 번째 값이 있으면 부피를 알려진 세 값의 곱으로 나눈다
- 모든 값을 출력한다
핵심 아이디어: 부피 = 가로 * 세로 * 높이 관계에서 하나의 미지수를 나눗셈으로 바로 구한다.
코드
#include <vector>
#include <iostream>
using namespace std;
int main()
{
while (1)
{
int zeroIdx, val = 1;
vector<int> len(4);
for (int i = 0; i < 4; i++)
{
cin >> len[i];
if (!len[i])
zeroIdx = i;
}
if (!len[0] && !len[1] && !len[2] && !len[3])
break;
for (int i = 0; i < 3; i++)
if (len[i])
val *= len[i];
if (len[3])
val = len[3] / val;
for (int i = 0; i < 4; i++)
{
if (i == zeroIdx)
cout << val << ' ';
else
cout << len[i] << ' ';
}
cout << '\n';
}
}복잡도
- 시간: O(T)
- 공간: O(1)