본문 바로가기

전체 글79

백준 21939번: 문제 추천 시스템 Version1 (C++) https://www.acmicpc.net/problem/21939 해당 문제의 핵심 접근 방법은 아래 두 가지와 같다. 해당 문제는 실제 번호에 해당하는 배열의 위치에 난이도를 넣어서 하나의 문제 번호만 존재하도록 관리한다. 위 배열을 참고해서 set 자료형을 배열로 선언하여 배열의 위치를 난이도로 하고 해당 배열에 문제 번호를 넣으면 문제 번호가 오름차순이 되기 때문에 문제에서 원하는 조건을 조금 더 쉽게 구현할 수 있다. 풀이는 아래와 같다. #include #include using namespace std; int probl[100'002]; set s[102]; int n,m; int main() { cin >> n; for(int i=0; i> p >> l ; probl[p]=l; s[l]... 2024. 1. 31.
백준 1202번: 보석 도둑(C++) https://www.acmicpc.net/problem/1202 해당 문제를 풀 때 가장 중요한 것은 어떤 조건에서 가장 이득을 보는지 생각해야 한다. 우선 쉽게 정답을 먼저 말하면 가장 가격이 비싼 보석을 가장 무게가 적은 가방에 넣는 과정만 생각하면 상덕이가 훔칠 수 있는 보석의 최대 가격을 구할 수 있다. 우선 보석의 무게와 가격이 중복될 수 있고 가방의 무게도 중복될 수 있으므로.. 중복을 고려한 자료구조를 사용 해야 되고 보석 같은 경우 가격에 따라서 정렬 해야지 가장 비싼 보석부터 가방에 넣어볼 수 있고, 가방 같은 경우도 가장 무게가 적은 가방에 넣는 과정을 진행해야 하므로 무게에 따른 정렬이 필요하다. 따라서 다음과 같이 코드를 작성 하였다. 헷갈렸던 부분을 하나 이야기 해보자면 보석의 .. 2024. 1. 31.
백준 7662번: 이중 우선순위 큐 (C++) https://www.acmicpc.net/submit/7662 우선 해당 문제는 바킹독님 강의를 참고하여 이진 검색 트리 알고리즘을 활용한 STL인 multiset을 활용하였다. 이 문제는 Key, value 대응 관계가 필요한건 아니니 map보다는 set이나 multiset(중복허용)이 적합하다. (최솟값 삭제 최댓값 삭제 모두 O(logN)) #include #include using namespace std; int main() { int t; cin >> t; while (t--) { int k; cin >> k; multiset ms; while(k--) { char c; cin >> c; if (c == 'D') { int num; cin >> num; if (ms.empty()) conti.. 2024. 1. 31.
백준 9375번: 패션왕 신해빈 [C++] https://www.acmicpc.net/problem/9375 해당 문제 같은경우는 hash_map 자체에 대한 이해도를 묻기보단 문제를 해석하는 센스와 수학적인 경우의수를 어떻게 쉽게 구할 수 있는지가 쟁점인 문제다. 입력으로 옷의 이름과 옷의 종류를 입력받는데 옷의 이름은 겹치지 않으므로 경우의 수를 구할 때 옷의 종류 만 생각하면 된다. 예를 들어서 옷의 종류가 양말, 모자, 상의 라고 가정하고 각각 다른 양말2개, 모자3개, 상의2개가 있다고 가정해보자 양말 안에서 선택할 수 있는 경우의수는 양말1 or 양말2 or 양말 선택 x 총3개 모자 안에서 선택할 수 있는 경우의수는 모자1 or 모자2 or 모자3 or 모자 선택 x 총4개 상의 안에서 선택할 수 있는 경우의수는 상의1 or 상의2o.. 2024. 1. 31.
백준 17219번: 비밀번호 찾기 [C++] https://www.acmicpc.net/problem/17219 #include #include using namespace std; int n,m; unordered_map um; int main() { cin >> n >> m; for(int i=0; i> add >> pass; um.insert(make_pair(add,pass)); } for(int i=0;i> add; if(um.find(add)!=um.end())cout N >> M; while (N--) { cin >> s >> p; umap[s] = p; } while (M--) { cin >> s; cout 2024. 1. 31.
백준 13414번: 수강신청 [C++] https://www.acmicpc.net/problem/13414 푸는데 시간이 오래 걸렸다.. 코로나 걸려서 집중력도 떨어지고 오랜만에 푸니까 잘 안풀린다.. ㅠ unordered_map or undordered_set 같은 경우 내가 집어 넣은 순서대로 출력을 꺼낼 수 있다고 생각했는데 실제로는 넣은 순서대로 출력이 나오지 않고 해쉬 테이블 안에서 값을 꺼내므로 랜덤한 값이 출력되게 된다. 따라서 이 문제를 풀기위한 핵심은 unordered_map을 사용하여 학번과, 숫자(들어온 순서) 를 pair자료형을 통해서 받고 숫자를 기반으로 정렬하는 방법이 최선이란것을 깨달았다. 아래 두개의 풀이를 참고했다. #include #include using namespace std; bool compare(co.. 2024. 1. 31.
백준 1620번: 나는야 포켓몬 마스터 이다솜 [C++] 알고리즘(코딩 테스트) 공부를 안한지 2달째.. 현업에서 막상 코드 유지보수 업무를 하다보니까 생각보다 코드를 건드리거나 구현할 일이 적은 것 같다. 그래서 알고리즘을 취미로 꾸준히 하려고 한다. 막상 오랜만에 다시 시작하니까 ㅋㅋㅋㅋㅋㅋㅋ 손이 안떨어진다... 코딩의 길 멀고도 험하다.. https://www.acmicpc.net/problem/1620 #include #include using namespace std; unordered_map p1; unordered_map p2; int n,m; int main() { ios::sync_with_stdio(0); cin.tie(0); cin >> n >> m; string s; for (int i = 1; i > s; p1.insert(make_p.. 2024. 1. 31.
백준 7785번: 회사에 있는 사람 [C++] https://www.acmicpc.net/problem/7785 #include #include using namespace std; unordered_set s; int n; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); cin >> n; while (n--) { string name; string log; cin >> name >> log; if (log == "enter") s.insert(name); else s.erase(name); } vector ans(s.begin(), s.end()); sort(ans.begin(), ans.end(), greater()); // 역순으로 정렬 for (auto x : ans) cout 2024. 1. 31.