728x90
반응형

CPP 175

백준, BOJ, 16571번, 알파 틱택토 C++ [CPP] ★★★

이 문제도 구현 중 엄청 어려운 편에 속한다. 우선 나는 그렇다. 이건 진짜 어려웠다. 아니 알파고는 어떻게 계산함? https://www.acmicpc.net/problem/16571 #맞은 풀이 #include using namespace std; //게임은 누가먼저 시작하느냐에 따라 달라짐. string answer; //게임이 끝났는지(turn이 이기거나 지거나) 체크 //turn은 O 또는 X임 bool CheckGameEnd(vector& board, char turn){ //가로로 이겼는지 for(int i = 0; i

백준, 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

프로그래머스, N으로 표현: C++ [CPP] ★★

처음엔 어려웠다. 왜냐면.. 나는 이전 것의 결과만 생각했다. 즉, [3] 을 구하기 위해서는 [1] 과 [2]의 사칙연산만 하면 되는 줄 알았으나.. 교환법칙이 성립하지 않는 '/' 나눗셈과 '-' 때문에... [2]와 [1]도 계산해야했다. 나는 그것을 몰라서.. 다 틀렸다. https://programmers.co.kr/learn/courses/30/lessons/42895 #맞는 풀이 #include using namespace std; int solution(int N, int number) { int answer = -1; vector vec(10); vec[1].push_back(N); // 문자 한개 쓰인 것 추가. if(number == N) return 1; int seq = 2; wh..

백준, 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; //상태가 중복되는 ..

728x90
반응형