자료 구조 10

C

[BOJ 4195] 친구 네트워크 C++

난이도: Gold 2 번호: 4195 생성일: March 2, 2023 7:14 PM 알고리즘 분류: 분리 집합, 자료 구조, 해시를 사용한 집합과 맵 알고리즘, 자료 구조: Disjoint Set, Union-find 언어: C++ 4195번: 친구 네트워크 C++ // BOJ4195 친구 네트워크 #include #include #include #include using namespace std; // 이름과 인덱스를 매핑할 unordered_map unordered_map uMap; // 부모 노드를 저장할 vector vector parent; // 친구 수를 저장할 vector vector friend_num; // 인덱스에 해당하는 노드의 루트 노드를 반환하는 함수 int getParent(i..

Algorithm/BOJ 2023.03.02

C

[BOJ 25325] S5 학생 인기도 측정 { C++ }

25325번: 학생 인기도 측정 C++ map 대신 pair 사용. #include #include using namespace std; void split(string S, pair *P, int T) { int cnt = 1, i = 0; for (char c : S) if (c == ' ') cnt++; string arr[cnt]; for (char c : S) if (c == ' ') i++; else arr[i] += c; for (auto s : arr) for (int k = 0; k < T; k++) if (P[k].first == s) P[k].second++; } bool cmd(pair A, pair B) { if (A.second == B.second) return (A.first..

C

[BOJ 7785] S5 회사에 있는 사람 { C++ }

7785번: 회사에 있는 사람 7785번: 회사에 있는 사람 첫째 줄에 로그에 기록된 출입 기록의 수 n이 주어진다. (2 ≤ n ≤ 106) 다음 n개의 줄에는 출입 기록이 순서대로 주어지며, 각 사람의 이름이 주어지고 "enter"나 "leave"가 주어진다. "enter"인 경우는 www.acmicpc.net C++ #include #include #include using namespace std; int main() { cin.tie(0)->sync_with_stdio(0); int N, idx; string name, status; set S; cin >> N; while (N--) { cin >> name >> status; if (status == "enter") S.insert(name)..

카테고리 없음 2022.07.05

C

[BOJ 1417] S5 국회의원 선거 { C++ }

1417번: 국회의원 선거 1417번: 국회의원 선거 첫째 줄에 후보의 수 N이 주어진다. 둘째 줄부터 차례대로 기호 1번을 찍으려고 하는 사람의 수, 기호 2번을 찍으려고 하는 수, 이렇게 총 N개의 줄에 걸쳐 입력이 들어온다. N은 50보다 작거나 같 www.acmicpc.net C++ #include using namespace std; int main() { cin.tie(0)->sync_with_stdio(0); int N, T[51] = {0, }, cnt = 0, i, idx; cin >> N; // 받을 개수가 하나라면 계산 없이 종료 if (N T[i]; while (true) { int max = 0; for (i = 1; i < N; i++) // 인덱스 1 ~ N-1 중에서 가장 큰..

카테고리 없음 2022.07.04

C

[BOJ 20920] S3 영단어 암기는 괴로워 { C++ }

20920번: 영단어 암기는 괴로워 20920번: 영단어 암기는 괴로워 첫째 줄에는 영어 지문에 나오는 단어의 개수 $N$과 외울 단어의 길이 기준이 되는 $M$이 공백으로 구분되어 주어진다. ($1 \leq N \leq 100\,000$, $1 \leq M \leq 10$) 둘째 줄부터 $N+1$번째 줄까지 외울 단 www.acmicpc.net C++ #include #include #include #include using namespace std; bool cmp(pair &a, pair &b) { // 두 int 값 이 같으면 두번째 정렬 조건으로 if (a.second == b.second) { // 두 문자열의 길이가 같으면 세번째 정렬 조건으로 if (a.first.length() == b...

C

[BOJ 1302] S4 베스트 셀러 {C++}

1302번: 베스트셀러 1302번: 베스트셀러 첫째 줄에 오늘 하루 동안 팔린 책의 개수 N이 주어진다. 이 값은 1,000보다 작거나 같은 자연수이다. 둘째부터 N개의 줄에 책의 제목이 입력으로 들어온다. 책의 제목의 길이는 50보다 작거나 같고 www.acmicpc.net C++ #include #include using namespace std; int main() { cin.tie(0)->sync_with_stdio(0); pair P = {"", -1}; map M; string S; int N; cin >> N; /************************** * * S : 입력 받을 문자열 * M : map이 중복 제거 및 문자열 알파벳 순 정렬을 해준다! * P : 가장 많이 팔린 책 정..

C

[BOJ 9733] S5 꿀벌 {C++}

9733번: 꿀벌 C++ #include #include #include using namespace std; int main() { cin.tie(0)->sync_with_stdio(0); cout.setf(ios::fixed); cout.precision(2); unordered_map M; string S, ord[] = {"Re", "Pt", "Cc", "Ea", "Tb", "Cm", "Ex"}; int T = 0; /************************** * * S : 입력 받을 문자열 * M : 중복 제거 map 자료구조 * T : 전체 일 개수 **************************/ while (getline(cin, S)) { stringstream ss(S); // s..

C

[BOJ 16499] S4 동일한 단어 그룹화하기 {C++}

16499번: 동일한 단어 그룹화하기 16499번: 동일한 단어 그룹화하기 첫째 줄에 단어의 개수 N이 주어진다. (2 ≤ N ≤ 100) 둘째 줄부터 N개의 줄에 단어가 한 줄에 하나씩 주어진다. 단어는 알파벳 소문자로만 이루어져 있고, 길이는 10을 넘지 않는다. www.acmicpc.net C++ unordered_set은 정렬을 하지 않고 중복만 제외하는 set 자료 구조이다. unordered_set 으로 선언하면 unordered_map 형태와 같다. 입력되는 모든 문자열을 알파벳 순으로 정렬해 중복을 제거하면 문제에서 요구하는 알파벳 구성이 다른 문자열의 개수를 찾을 수 있다. #include #include #include using namespace std; int main() { ios..

C

[ BOJ 5568 ] S4 카드 놓기 { C++ }

5568번: 카드 놓기 5568번: 카드 놓기 예제 1의 경우 상근이는 11, 12, 21, 112, 121, 122, 212를 만들 수 있다. www.acmicpc.net C++ 뽑을 카드 개수에 따라 모든 경우의 수를 돌려야 하므로 백 트래킹. map은 중복 검사와 정렬까지 해주는데, 이 문제에서 정렬은 필요가 없으므로 대신 unordered_set, unordered_map을 써도 좋다. map은 set과 구조가 같다 카더라. #include #include #include using namespace std; map M; vector DECK; int N, P, cnt = 0; bool USED[10]; void f(vector V, int D) { if (D == P) { string res =..