Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
Tags
- java
- Kotlin
- 프로그래머스
- Effective Java
- 알고리즘
- CS
- 세그먼트 트리
- 동적계획법
- 스택
- 구현
- 후니의 쉽게 쓴 시스코 네트워킹
- 백준
- swea
- JUnit 5
- 수학
- BFS
- 투 포인터
- 문자열
- 시뮬레이션
- 플로이드-와샬
- dfs
- 유니온 파인드
- 완전탐색
- 위상정렬
- 그리디
- 에라토스테네스의 체
- mst
- Network
- 이분탐색
- 백트래킹
Archives
반갑습니다!
[백준] 14921용액 합성하기 본문
풀이
투 포인터 알고리즘을 사용해서 해결했다. 기존의 방식과 조금 변형해서 사용했는데, 시작 인덱스를 0, 끝 인덱스를 n-1
로 두었다. 그리고 두 인덱스가 가리키는 용액을 섞어서 0에 가장 가까운 조합을 찾아주었다. 이 때 0에 가장 가깝다는 것은 절대값이 가장 작다는 의미이므로 절댓값 함수 abs()
를 사용했다.
코드
C++
This file contains hidden or 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 <iostream> | |
#include <vector> | |
#include <algorithm> | |
using namespace std; | |
int main() { | |
int n; | |
cin >> n; | |
vector<int> nums(n); | |
for (int i = 0; i < n; i++) | |
cin >> nums[i]; | |
int ans = 1e9 + 1; | |
int s = 0, e = n - 1; | |
while (true) { | |
if (s == e) break; | |
int sum = nums[s] + nums[e]; | |
if (abs(sum) < abs(ans)) ans = sum; | |
if (sum > 0) e--; | |
else if (sum < 0) s++; | |
else break; | |
} | |
cout << ans << '\n'; | |
return 0; | |
} |
'알고리즘 문제 풀이' 카테고리의 다른 글
[백준] 6497 전력난 (0) | 2020.10.19 |
---|---|
[백준] 4386 별자리 만들기 (0) | 2020.10.19 |
[프로그래머스] 쿼드압축 후 개수 세기 (0) | 2020.10.13 |
[프로그래머스] 3진법 뒤집기 (0) | 2020.10.13 |
[백준] 3135 라디오 (0) | 2020.10.13 |