728x90
재귀를 이용
#include <iostream>
#include <stdlib.h>
using namespace std;
/*
배열의 처음과 맨 끝부터 비교해서 같으면 -> 그 다음을 재비교 (재귀)
배열의 처음과 맨 끝부터 비교해서 다르면 -> 둘중 더 작은쪽이 그다음과 더해짐 -> 재비교
*/
int answer = 0;
int solution(int* arr, int start, int end) {
if(start >= end)return answer;
else{
if(arr[start]>arr[end]){
//뒤쪽이 더 작음
answer++;
arr[end-1] = arr[end] + arr[end-1];
solution(arr,start,end-1);
}else if(arr[start]<arr[end]){
//앞쪽이 더 작음
answer=answer+1;
arr[start+1] = arr[start] + arr[start+1];
solution(arr,start+1,end);
}else{
//둘이 같음
solution(arr,start+1,end-1);
}
}
return answer;
}
int main(void) {
int n, i;
int arr[10];
int start = 0;
int end = n;
cin >> n;
for (i = 0; i < n; i++) {
cin >> arr[i];
//scanf("%d", &arr[i]);
}
end = n - 1;
cout << solution(arr, start, end);
return 0;
}
재귀아닌 버전
#include <iostream>
#include <stdlib.h>
#include <vector>
using namespace std;
/*
배열의 처음과 맨 끝부터 비교해서 같으면 -> 그 다음을 재비교 (재귀)
배열의 처음과 맨 끝부터 비교해서 다르면 -> 둘중 더 작은쪽이 그다음과 더해짐 -> 재비교
*/
int solution(vector<int> arr, int n){
int start=0;
int end = n-1;
int answer=0;
for(int i=0;i<arr.size();i++){
if(start>=end) break;
if(arr[start]> arr[end]){
arr[end-1]=arr[end]+arr[end-1];
end--;
answer++;
}
else if(arr[start]<arr[end]){
arr[start+1] = arr[start] + arr[start+1];
start++;
answer++;
}
else{
start++;
end--;
}
}
return answer;
}
int answer = 0;
int main(void) {
int n, i;
vector<int> arr;
int start = 0;
int end = n;
int num;
cin >> n;
for (i = 0; i < n; i++) {
cin >> num;
arr.push_back(num);
}
end = n - 1;
cout<<solution(arr,n);
return 0;
}
728x90
'Algorithm > 기타(기업등)' 카테고리의 다른 글
[EPPER/14회 8번]토마토 보관(중-3) (0) | 2021.03.18 |
---|---|
[EPPER/15회 7번] 도서관 좌석 예약(중-4) (0) | 2021.03.17 |
[EPPER/11회 9번]올바른 괄호 배열 구하기(중-2) (0) | 2021.03.17 |
[EPPER/12회 2번] 즐거운OT 방번호만들기(하-3) (0) | 2021.03.16 |
[EPPER/11회 7번] 단순계산기(하-2) (0) | 2021.03.16 |