728x90
반응형

백준 144

백준, BOJ, 12100번, 2048 C++ [CPP] ★★★★

난 아주 고난이도라고 생각하는 구현 문제다. 해당 게임을 해봤음에도.. 나는 이 문제를 푸는데 오랜 시간이 걸렸다. https://www.acmicpc.net/problem/12100 #맞은 풀이 #include using namespace std; int maxNumber = -1; int N; // N*N size vector vec; void DFS(int cnt, vector& board); void shiftBlock(int type, vector& board); //1 => 모든 경우를 살펴봐야함. int solution(vector& board) { DFS(0, board); return maxNumber; } //2 void DFS(int cnt, vector& board){ //모든 경우..

백준, 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, 7662번, 이중 우선순위 큐 C++ [CPP] ★★

두개의 큐를 쓰면 되지 않을까??? 생각이었지만 예외처리가 꽤나 까다로웠다. https://www.acmicpc.net/problem/7662 여러가지 방법이 있겠지만 나는 쉬운 방법으로 풀었다. MultiSet 자체가 무엇을 위해 만들어졌냐고 하면..? Set이라는 것이 집합이라 중복을 허용하지 않지만.. 이 친구는 key의 중복을 허용해서 유용하게 이 문제에 쓰였다. 중복이 허용되는 Set이라고 보면 된다. 자동정렬 + key,value 형태라고 보면 된다. #맞는 풀이 #include using namespace std; int tc; int main(){ cin>>tc; while(tc--){ int k; cin >> k; //1. ordered된 multi_set으로 중복도 포함된 set을 만들..

백준, 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, 1525번, 퍼즐 C++ [CPP] ★★★★★

나의 좁은 식견에 안타까워하며 배운 상태 저장방법!! 행렬을 문자열로 문자열을 행렬로 변환하는 방법!! 행렬 자체를 저장하는 것이 메모리가 많이드므로 문자열로 저장하는 방법!!! 배울 것이 많은 문제다. https://www.acmicpc.net/problem/1525 #맞은 풀이 #include using namespace std; int dc[4] = {1,-1,0,0}; int dr[4] = {0,0,1,-1}; string start = ""; //상태를 문자열로 저장함 int answer = -1; //answer가 갱신되지 않는 것은 아무리 시도해도 만들 수 없는 것을 의미 int main(){ queue q; //string(상태), int(실행횟수) set check; //상태가 중복되는 ..

백준, 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, 2346번, 풍선 터뜨리기 C++ [CPP] ★★★★★

큐 같지만 덱인 문제다. (원형큐 문제다) 꽤 생각해볼만한 문제다. 왜냐면 front가 항상 앞을 가리키고 있다고 생각하면 역방향 회전과 정방향 회전의 느낌이 조금 다른 느낌이라서 그렇다. 메모리 제한이 있기 때문에 잘 해야한다. 하나로 묶을 수 있는 것은 하나로 묶어야한다. https://www.acmicpc.net/problem/2346 #내 풀이 #include using namespace std; int N; //메모리 제한 4MB //int 1개 4바이트.. 256개면 1KB, 256*1024개면 1MB..? int main(){ cin >> N; deque balloon; for(int i = 1; i> x; balloon.push_back({i,x}); //1~N번 } while(!ballo..

백준, BOJ, 2589번, 보물섬 : C++ [CPP] ★★

조금 특이한 BFS랄까..? 최장거리의 최단시간을 구해야 한다. ???? 처음에는 이해가 안갔다. https://www.acmicpc.net/problem/2589 #맞는 풀이 #include using namespace std; int row, col; //행, 열 char arr[50][50]; //입력 int visited[50][50]; //방문여부 -1로 초기화 int memo[50][50]; // 기억 int dx[4] = {-1,1,0,0}; int dy[4] = {0,0,-1,1}; int main(){ cin >> row >> col; //문자열로 입력받음. for(int i = 0; i> s; //visited -1 초기화 for(int j = 0; j

728x90
반응형