용액의 특성값이 중복이 된다는 생각을 안하고 풀어서 1일이 걸렸다.
코드의 변화가 많이 있었는데
처음에는 순차적으로 검색하는걸 작성하다가 시간초과가 날 예상을 하고 안짰다.
다음에는 순차적으로 하는데 idx를 저장해서 그 idx만큼만 돌게했다. 시간초과
다음에는 l과 r을 두고 만나는 방식으로 했는데 틀렸다. 양수와 음수를 가지고 계산함.
다음에는 양수와 음수를 생각하지 않고 l과 r을 두고 만나는 방식을 사용함. (정답)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <cstdio> | |
/** | |
* https://www.acmicpc.net/problem/14921 | |
* BOJ 백준온라인져지 14921 용액 합성하기 풀이 | |
*/ | |
using namespace std; | |
int abs(int a){ | |
return a > 0 ? a : -a; | |
} | |
int min(int a, int b){ | |
int aa = abs(a); | |
int bb = abs(b); | |
return aa < bb ? a : b; | |
} | |
int main(){ | |
int N; | |
scanf("%d", &N); | |
int *list = new int[N]; | |
for(int i = 0; i < N; i++){ | |
scanf("%d", &list[i]); | |
} | |
int maximum = 1000000000, l = 0, r = N - 1; | |
do{ | |
if(abs(maximum) > abs(list[l] + list[r])){ | |
maximum = list[l] + list[r]; | |
} | |
if(abs(list[l] + list[r]) >= abs(list[l] + list[r - 1])){ | |
r--; | |
}else if(r + 1 < N && abs(list[l] + list[r]) > abs(list[l] + list[r + 1])){ | |
r++; | |
}else{ | |
l++; | |
} | |
}while(l < r); | |
printf("%d", maximum); | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <cstdio> | |
/** | |
* https://www.acmicpc.net/problem/14921 | |
* BOJ 백준온라인져지 14921 용액 합성하기 풀이 | |
*/ | |
using namespace std; | |
int abs(int a){ | |
return a > 0 ? a : -a; | |
} | |
int min(int a, int b){ | |
int aa = abs(a); | |
int bb = abs(b); | |
return aa < bb ? a : b; | |
} | |
int main(){ | |
int N; | |
scanf("%d", &N); | |
int *list = new int[N]; | |
for(int i = 0; i < N; i++){ | |
scanf("%d", &list[i]); | |
} | |
int maximum = 1000000000, l = 0, r = N - 1; | |
do{ | |
if(abs(maximum) > abs(list[l] + list[r])){ | |
maximum = list[l] + list[r]; | |
} | |
if(abs(list[l] + list[r]) >= abs(list[l] + list[r - 1])){ | |
r--; | |
}else if(r + 1 < N && abs(list[l] + list[r]) > abs(list[l] + list[r + 1])){ | |
r++; | |
}else{ | |
l++; | |
} | |
}while(l < r); | |
printf("%d", maximum); | |
} |
'IT > 알고리즘' 카테고리의 다른 글
BOJ 백준온라인져지 14923 미로탈출 풀이 (0) | 2017.12.15 |
---|---|
BOJ 백준온라인져지 1456 거의 소수 풀이 (0) | 2017.12.14 |
BOJ 백준온라인져지 2530 인공지능 시계 풀이 (0) | 2017.12.14 |
BOJ 백준온라인져지 2525 오븐 시계 풀이 (0) | 2017.12.14 |
BOJ 백준온라인져지 9987 포켓몬 마스터 풀이 (0) | 2017.12.14 |