본문 바로가기

cpp46

[개쉬운 풀이] 백준 2467 용액 (10일차) - 이분 탐색X https://www.acmicpc.net/problem/2467문제  생각사실 문제의 의도는 이분탐색이다. 그러나 두 값을 더해서 0에 가장 가까운 용액을 찾는 문제에서 영감을 얻었다.우리는 사전문제 등 문자열을 비교할때 보통 sort를 한 다음, 양 옆 문자들만 비교한다. 이를 착안하여 문제를 풀었다. 두 용액이 0에 가장 가까우려면 두 용액의 숫자 크기가 거의 비슷해야한다. 따라서 두 용액을 절대값 처리를 통해 정렬해주었다.[-99, -2, -1, 4, 98] => [1, 2, 4, 98, 99] 이렇게 되면 한 눈에 98과 99가 부호가 다르다면 정답임을 알 수 있다. 따라서 절대값 처리와 함께 원래의 부호도 같이 저장하여 정렬하였다. 마지막으로, 출력할 때 더 작은 값을 기준으로 출력해야한다. .. 2024. 12. 1.
[2024 AOC] 1일차 CPP https://adventofcode.com/2024 Advent of Code 2024 adventofcode.com 문제 1번 생각단순하게 왼쪽 숫자와 오른쪽 숫자를 정렬 후 거리를 구하는 문제이다.풀이#include #include #include using namespace std;const int MAX = 1000;vector l;vector r;void input(){ int left, right; for(int i = 0; i > left >> right; l.push_back(left); r.push_back(right); }}void sol(){ sort(l.begin(), l.end()); sort(r.begin(), r.end()).. 2024. 12. 1.
[개쉬운 풀이] 백준 1697 숨바꼭질 (9일차) 문제생각처음에는 단순하게 BFS로 갈 수 있는 모두의 경우를 계산하면 된다고 생각했다. 그러던 와중 우선순위 큐와 다익스트라를 활용하여 가장 빠른 시간을 구하는 것이 더 완벽하다고 생각했다.따라서 다익스트라로 구현했지만, 실제 BFS와 비교해보니 단순 BFS로도 해결이 된다. (심지어 더빠름) 풀이#include #include #include using namespace std;typedef pair ii;const int MAX = 100001;int N, K;int isVisited[MAX];void input(){ cin >> N >> K; for(int i = 0; i , greater> pq; pq.push(make_pair(0, N)); isVisited[N] = 0; .. 2024. 11. 30.
[개쉬운 풀이] 백준 15989 1, 2, 3 더하기 4 (8일차) https://www.acmicpc.net/problem/15989 문제 생각처음에는 이항계수 문제인 줄 알았다. 그러나 순서 상관 없이 오직 정수 1, 2, 3을 이용해서 모든 수를 만드는 문제이다. 그래서 처음 DP로 접근하여 생각을 해보았다. 정수 / 3으로 3이 몇개 들어가는지 계산을 해보았고 이후 각 3의 개수에 따라 2가 들어가는 갯수만 세주면 나머지 1은 자동으로 빈자리를 채워준다. 이렇게 생각하니 DP까지도 생각할 필요 없이 단순 계산으로 풀 수 있었다. 즉, N을 3으로 나누고, 3을 몇개 쓸 것인지 for 문을 통해서 돌린다. 이후 3으로 사용하고 남은 나머지 값(=tmp)에 tmp/2 +1 하면 답이다.->tmp/2 + 1에서 +1을 한 이유는 2를 아예 안쓰는 경우를 더한 것이다. .. 2024. 11. 29.