728x90
반응형

BOJ 114

백준, BOJ, 16928번, 뱀과 사다리 게임 C++ [CPP] ★★★★★

은근히.. 헷갈렸다. 사실 쉬웠는데.. 헷갈렸다. 짜증난다 ㅠㅠㅠ BFS문제면서 DP 문제라고 생각하면 되겠다. https://www.acmicpc.net/problem/16928 #맞은 풀이 #include using namespace std; vector fromTo; //보드 int dist[101]; //array[출발]=도착 int arr[101]; int main(){ int N, M; cin >> N >> M; for(int i = 0; i> start >> finish; arr[start] = finish; } //배열초기화(시작주소, 종료주소(얼만큼 할지), 값) fill(dist, dist+101, -1); //1부터 BFS로 시작 dist[1] = 0; queue q; q.push(1..

백준, BOJ, 2096번, 내려가기 C++ [CPP] ★★★

우선 DP문제인줄 알고 풀었고 메모리도 적당히 딱 맞는듯해서 그렇게 풀었지만 의도는 다른 것이라고 한다. 슬라이딩 윈도우라고 하는데..? 음.. 투포인터랑 비슷하다고 한다. 슬라이딩 윈도우도 또 한 번 글을 써야 겠다. https://www.acmicpc.net/problem/2096 #맞은 풀이 #include using namespace std; int arr[3]; int dpmin[3]; int dpmax[3]; int main(){ int n; cin >> n; //가장 처음 줄 cin >>arr[0] >> arr[1] >> arr[2]; //초기화 for(int i = 0; i now0 >> now1 >> now2; //dpmax값이 변하기 전값을 가지고 있어야함 int tempMax_0 = ..

백준, BOJ, 14226번, 이모티콘 C++ [CPP] ★★★

어렵지 않았다. 다만 어떻게 풀지? 가 관건이다. https://www.acmicpc.net/problem/14226 문제 분석부터 해보자 최솟값을 가지는데 수행해야 하는 작업의 가중치가 같다? BFS 가자 #include using namespace std; //1개는 이미 입력 int S; int visited[3000][3000]; int main(){ cin >> S; //현재 상태, 클립보드에 저장된 개수 queue q; q.push({1,0}); visited[1][0] = 1; while(!q.empty()){ auto cur = q.front(); q.pop(); int now = cur.first; int clip = cur.second; //체크 if(now == S){ cout

백준, BOJ, 2110번, 공유기 설치 C++ [CPP] ★★

이건 문제가 조금 이해하기 어려웠다. https://www.acmicpc.net/problem/2110 #맞은 풀이 #include using namespace std; int N,C; vector house; //좌표는 0부터 10억 가능. int answer = -1; //공유기 사이의 거리를 최소 dist 이상으로 설치할 수 있는지. bool Check(int dist){ int cur = house[0]; int cntRouter = 1; for(int i = 1; i= dist){ cntRouter++; cur = house[i]; } } // 더 사용하면 안된다. if(cntRouter >= C) return true; else return false; } //해당 범위에서 true인지 체크 ..

백준, BOJ, 2512번, 예산 C++ [CPP] ★★

이분탐색 중에서 풀만한 문제다. 조건을 빼먹으면 틀리는 문제.. 그래서 나도 틀림..ㅋㅋㅋ https://www.acmicpc.net/problem/2512 #맞는 풀이 #include using namespace std; int N; vector countryBudget; long long total; long long answer; long long M; //1.budget은 주어진 예산을 초과해서 분배해서는 안된다. //2. budget은 상한만큼만 배정되어야 한다. bool AssignBudget(long long budget){ if(budget >M)return false; //1 long long sum = 0; for(auto x : countryBudget){ long long now =..

백준, BOJ, 7662번, N번째 큰 수 C++ [CPP] ★★★

이 친구는 메모리제한이 빡세다. 그래서.. 새로운 방법을 생각해내야 했다. N이 1500번이라 1500*1500은 충분한데.. 공간이 부족하다..? https://www.acmicpc.net/problem/2075 힙 사이즈를 N으로 고정시켜서 1500 * 1500의 계산을 함에도 메모리가 부족하지 않게 했다. 이 생각을 한 번에 생각할 수는 없었고.. 그냥.. N번째 큰수라함은.. 가장 큰 수 5개 중 가장 작은 값이라 생각할 수도 있고 그냥 모든 수 중에서 5개라고 생각할 수도 있다. 위에 생각이 문제 푸는데 더 도움이 되었다. #맞은 풀이 #include using namespace std; priority_queue pq; //최소힙 int main(){ ios::sync_with_stdio(fa..

백준, BOJ, 4358번, 생태학 C++ [CPP] ★★

우선 Unordered 맵과 Ordered맵에 대한 정말 좋은 구분이라고 생각한다. Unordered_map으로 만들었다면.. 정렬을 따로 해줘야했을 것이다. https://www.acmicpc.net/problem/4358 #맞은 풀이 #include using namespace std; string s; //int와 int의 연산은 int가 나오므로 float으로 형변환하거나 처음부터 float과 연산 float num; int main(){ map trees; while(getline(cin, s)){ num++; //초기 값은 1 if(trees.count(s) == 0){ trees[s]=1; } else{ trees[s]++; } } //소수점 자리 고정하는 부분 cout

백준, BOJ, 21921번, 블로그 C++ [CPP] ★★

흥미로운 문제다. 실제로 최근 1달 이내... 최근 1년 이내.. 최근 5년 이내.. 를 가진 모든 데이터들을 이렇게 다룰 것만 같다. 그만큼 중요하지만 쉬운 문제라고 본다. 큐를 이용한다. https://www.acmicpc.net/problem/21921 #맞는 풀이 #include using namespace std; int N, X; int main(){ cin >> N >> X; queue q; int cnt = 0; int sum = 0; unordered_map number; int M = 0; while(N--){ int visit; cin >> visit; sum += visit; q.push(visit); cnt++; if(cnt>=X){ M = max(M,sum); number[sum..

백준, BOJ, 10825번, 국영수 : C++ [CPP] ★

어렵지 않다. 그냥 풀면되는데.. Compare 함수에 익숙하지 않다면 어려울 수도 있다. https://www.acmicpc.net/problem/10825 #맞은 풀이 #include using namespace std; //구조체 struct Student{ string name; int korean; int english; int math; }; //구조체 벡터 vector vec; int N; //감소하는 순 (참조자로 받는다 -> 시간 단축) bool comp(const Student &stA, const Student &stB){ //가장 밑에 첫번째 기준을 써놓고 if(stA.korean == stB.korean){ if(stA.english == stB.english){ if(stA.ma..

백준, BOJ, 1759번, 암호만들기 : C++ [CPP] ★★★★

//첫번째 풀이 2021.12.05 //두번째 풀이 2022.02.08 어렵다기보다는.. 조건이 많은 문제였다. https://www.acmicpc.net/problem/1759 #맞은 풀이 #include #include #include using namespace std; int L, C; vector vec; bool isUsed[15]; //L,C는 글로벌, 백트래킹함수 -> 차례대로 고름 void func(int cnt, string s) { //L개 골랐다면 출력할지 정함 -> 자음 2개 모음 1개 if (cnt == L) { int consonant = 0; int vowel = 0; for (int i = 0; i < L; i++) { if (s[i] == 'a' || s[i] == 'e'..

728x90
반응형