본문 바로가기

자료구조, 알고리즘/백준 문제풀이8

[백준 14425] 문자열 집합 C++ C++의 Map을 활용하면 쉽게 풀 수 있는 문제 Map이란? 키와 값(Key-Value)의 쌍으로 이루어진 데이터의 집합 Key의 중복은 허용하지 않고, Value의 중복은 허용한다 map s; for (int i = 0; i > tmp; s.insert({ tmp, true }); } 주어진 n개의 문자열을 이렇게 저장한다고 하면, (문자열(Key) - true(Value)) 이런 식으로 저장된다. 다음 m개의 문자열에서 집합 s에 속한 문자열이 몇 개인지를 세는 문제이므로, (1)문자열을 하나 입력 받고 (2)해당 문자열을 key로 두었을 때 Value가 true인지 확인한 다음 (3)true일 경우 결과값에 +1 이런식으로 검증하면 된다. 처음에.. 2022. 8. 3.
[백준 18870] 좌표 압축 풀이 1. 벡터 입력 받고 원본 벡터(x)를 복사한 다른 벡터(solve)를 만든다 2. 복사한 벡터를 오름차순으로 정렬하고, erase, unique 함수를 사용하여 중복값을 제거한다 3. lower_bound 함수를 사용하여 2번 처리한 벡터에서 x[i] 값들이 몇번째에 위치하는지 확인한다 4. lower_bound 함수는 주소값을 반환하므로, 2번 처리한 벡터 solve의 시작 주소값을 빼서 출력 C++ erase, unique, lower_bound 1. erase: 말 그대로 벡터의 값을 지움 2. unique: 중복되지 않는 원소들을 앞에서부터 채워나가는 역할. 따라서 남은 뒷부분은 그대로 vector 원소값이 존재한다. => 두 함수를 함께 사용하면 중복값을 지울 수 있다. 3. lower_.. 2022. 7. 28.
[백준 2606] 바이러스 https://www.acmicpc.net/problem/2606 2606번: 바이러스 첫째 줄에는 컴퓨터의 수가 주어진다. 컴퓨터의 수는 100 이하이고 각 컴퓨터에는 1번 부터 차례대로 번호가 매겨진다. 둘째 줄에는 네트워크 상에서 직접 연결되어 있는 컴퓨터 쌍의 수가 주어 www.acmicpc.net 서로 연결되어있는 점을 찾아 개수를 세는 문제이기 때문에 dfs로 풀어야한다고 생각했다. 컴퓨터의 수(n), 연결한 간선의 수(k)를 먼저 입력을 받고, k번만큼 연결된 노드 쌍을 입력받는다. 어떻게 입력받아야 할 지 고민했는데, vector list[101]; 이렇게 vector로 list를 선언해서 해결했다. 답안 #include #include #include using namespace std;.. 2022. 6. 21.
[백준] 6588 골드바흐의 추측 일단 문제를 보고 생각한 풀이법은 다음과 같다. 1. 소수를 거른다 2. 입력받은 숫자가 n이라면, 홀수 소수의 수열 a(i)에 대해 차례로 검증한다 3. 출력한다 1. 소수를 거른다. 딱 떠오른 문제가 있다. 근데 그 방식이 기억이 안 나서 예전에 기록해 두었던 걸 찾았다. https://github.com/sunnyineverywhere/AltuBitu_Algorithm_Study/blob/main/SEON_UI_LEE/5.%20The%20Number%20Theory/BOJ2960.cpp GitHub - sunnyineverywhere/AltuBitu_Algorithm_Study Contribute to sunnyineverywhere/AltuBitu_Algorithm_Study development.. 2022. 4. 2.