Pramp로 첫 mock 인터뷰 경험. (220712)
[x,y,z] 좌표와 경로가 주어질때, z좌표가 고도가 높아지면 에너지를 소모하고 고도가 하강하면 에너지를 얻는다. 가령 아래 예에서는 고도가 10에서 0으로 떨어질때 총에너지가 +10이 될거고, 다시 6으로 올라갈때 총 +4(10-6) 이 될것이다. 이 총에너지 값이 음수가되면 드론은 추락한다. 드론이 추락하지 않기위한 최소의 초기 에너지값을 구하라.
https://www.pramp.com/question/BrLMj8M2dVUoY95A9x3X
input: route = [ [0, 2, 10],
[3, 5, 0],
[9, 20, 6],
[10, 12, 15],
[10, 10, 8] ]
output: 5 # less than 5 kWh and the drone would crash before the finish
# line. More than `5` kWh and it’d end up with excess energy
문제를 이해하자마자 살짝 막막했지만, 예제를 하나씩 써보면서 루프를 반복하면서 값을 더하고빼다가 가장 작은min값을 업데이트하고 최종 답안은 그 min값을 리턴하면 된다는걸 깨달았다. 그리고 문제 풀이 시작.
위 example을 좀더 풀어서 따라가보면
10 0 6 15 8
+(10-0) +(0-6) +(6-15) +(15-8)
10 4 -5 2
이 경우에 최소값이 -5가 되기 때문에 최고 초기 에너지는 5가 되어야함. 루프를 진행하면서 sum에 (prev-curr) 를 누적해서 더해가면서 min값을 업데이트하면 됨.
#include <limits.h>
int calcDroneMinEnergy(size_t routeLength, int route[routeLength][3])
{
int sum = 0;
int prev = route[0][2];
int min = INT_MAX;
for (int i = 1; i < routeLength; i++) {
if (route[i][2] < prev)
sum += prev - route[i][2];
else
sum += prev - route[i][2];
prev = route[i][2];
if (sum < min)
min = sum;
}
return min < 0? min * -1 : 0;
}
int main() {
return 0;
}
지난번에 뭘 그리 어렵게 풀었는지 이해가 안감.
단순히 [i-1] - [i] 를 누적해서 더하면서 가장 최소값(음수값인경우)을 리턴하면됨.
배열인덱싱 문제는 반드시 각각의 값들과 예상계산 값들을 적어보면서 문제를 풀것.
a 10 0 6 15 8
+(10-0) +(0-6) +(6-15) +(15-8)
+10 -6 -9 +7
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#define min(a,b) (((a) < (b)) ? (a) : (b))
int calcDroneMinEnergy(size_t routeLength, int route[routeLength][3])
{
int sum = 0;
int min = INT_MAX;
for (int i = 1; i < routeLength; i++) {
sum += route[i-1][2] - route[i][2];
min = min(min, sum);
}
return (min < 0) ? -min : 0;
}
int main() {
return 0;
}
int calcDroneMinEnergy(size_t routeLength, int route[routeLength][3])
{
int sum = 0;
int min = 0;
for (int i = 1; i < routeLength; i++) {
sum += route[i-1][2] - route[i][2];
min = min(min, sum);
}
return -min;
}
Pra
ctice M
akes P
erfect!