요소 삭제하기
Coddy C++ 여정의 로직과 흐름 섹션에 포함된 레슨 — 56개 중 38번째.
때로는 더 이상 필요하지 않은 요소를 세트(set)에서 제거해야 할 때가 있습니다. .erase() 메서드를 사용하면 값을 제공하여 특정 요소를 제거할 수 있습니다.
set에서 요소를 제거하는 방법은 다음과 같습니다:
std::set<int> numbers = {10, 20, 30, 40};
numbers.erase(20); // 요소 20을 제거합니다.erase(20)를 호출한 후, 세트에는 {10, 30, 40}만 포함됩니다. 세트에 존재하지 않는 요소를 삭제하려고 하면 아무 일도 일어나지 않습니다. 세트는 변경되지 않은 상태로 유지되며 오류도 발생하지 않습니다.
이것은 요소가 존재하는지 확실하지 않을 때조차도 .erase()를 안전하게 사용할 수 있게 해줍니다. 사용자 입력이나 프로그램 로직에 따라 특정 항목을 제거해야 하는 깔끔한 컬렉션을 유지하는 데 특히 유용합니다.
챌린지
쉬움std::set에서 .erase() 메서드를 사용하여 요소를 제거하는 방법을 보여주는 프로그램을 작성하세요. 이 챌린지는 집합(set)에서 특정 요소를 안전하게 제거하고 그 결과를 관찰하는 능력을 테스트합니다.
다음과 같은 입력이 제공됩니다:
- 집합에 처음에 추가할 요소의 개수를 나타내는 정수
n - 집합에 삽입할
n개의 정수 - 제거할 요소의 개수를 나타내는 정수
m - 집합에서 제거할 요소를 나타내는
m개의 정수
프로그램은 다음을 수행해야 합니다:
- 비어 있는
std::set<int>을 생성합니다. - 추가할 요소의 개수를 읽고
.insert()를 사용하여 집합에 삽입합니다. - 모든 삽입이 끝난 후 초기 집합의 크기를 출력합니다.
- 제거할 요소의 개수를 읽습니다.
- 제거할 각 요소에 대해
.erase()를 사용하여 제거를 시도합니다. - 각 제거 시도 후, 현재 집합의 크기를 출력합니다.
- 마지막으로, 집합에 남아 있는 요소들을 순회하며 정렬된 순서로 출력합니다.
다음과 같은 정확한 출력 형식을 사용하세요:
초기 집합 크기:
Initial size: [size]각 제거 시도 후:
After removing [number]: size = [current_size]최종 남은 요소들:
Remaining elements: [element1] [element2] [element3] ....erase()는 집합에 존재하지 않는 요소를 제거하려는 시도를 안전하게 처리한다는 점을 기억하세요. 이 경우 집합은 변경되지 않으며 오류도 발생하지 않습니다. 범위 기반 for 루프(range-based for loop)를 사용하여 남은 요소들을 출력하세요. 집합은 요소들을 정렬된 상태로 유지하므로 자동으로 정렬된 순서로 표시됩니다.
치트 시트
.erase()를 사용하여 값을 제공함으로써 세트에서 특정 요소를 제거합니다:
std::set<int> numbers = {10, 20, 30, 40};
numbers.erase(20); // 요소 20을 제거합니다세트에 존재하지 않는 요소를 삭제하려고 하면 아무 일도 일어나지 않습니다. 세트는 변경되지 않은 상태로 유지되고 오류도 발생하지 않으므로 .erase()는 안전하게 사용할 수 있습니다.
직접 해보기
#include <iostream>
#include <set>
using namespace std;
int main() {
// 추가할 요소의 개수를 읽습니다
int n;
cin >> n;
// 빈 세트(set)를 생성합니다
set<int> mySet;
// n개의 요소를 읽고 삽입합니다
for (int i = 0; i < n; i++) {
int element;
cin >> element;
// 세트에 요소를 삽입합니다
}
// 제거할 요소의 개수를 읽습니다
int m;
cin >> m;
// TODO: 아래에 코드를 작성하세요
// 1. 초기 세트 크기를 출력합니다
// 2. 제거할 각 요소에 대해 .erase()를 사용하고, 각 제거 후의 크기를 출력합니다
// 3. 세트에 남은 요소들을 출력합니다
return 0;
}이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.