728x90
반응형

문제풀이(Problem Solving) 326

프로그래머스 카카오, 신고 결과 받기 C++ [CPP] ★★

우선 map을 자유자재로 사용한다면 쉽겠다. unordered_map인데도.. 순서가 바뀌어서 깜짝 놀랐다. https://programmers.co.kr/learn/courses/30/lessons/92334 #맞는 풀이 #include using namespace std; vector solution(vector id_list, vector report, int k) { vector answer(id_list.size()); int idx = 0; //유저 ID, Index unordered_map users; //유저 ID, 신고받은 횟수 unordered_map result; for(auto x : id_list){ result[x]; //0으로 초기화 users[x] = idx++; } //유저..

프로그래머스 카카오, k진수에서 소수 개수 구하기 C++ [CPP] ★★★★★(문자열처리)

우선 문자열처리가 C++에서 어렵다. 나는 아직 stringstream에 익숙하지 않아서 어려웠다. stringstream만 익숙한 사람이라면 무리없이 풀 것이다. https://programmers.co.kr/learn/courses/30/lessons/92335 #맞는 풀이 #include using namespace std; bool IsPrime(long long num){ if(num == 2)return true; if(num == 1 ||num % 2 == 0) return false; for(long long i = 3; i 다음 것 조사 if(val.size() == 0){continue;} if(IsPrime(stol(val))){ answer ++; } } return answer; ..

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

728x90
반응형