- 입력받을 배열을 공간을 선언한다.
- 입력받은 배열을 for문을 통해서 %42 해준다.
- %42한 값은 set container에 넣어준다.
이때, set container는 중복 값을 받지 않기 때문에 나머지 중 같은 수는(이미 담긴 수) 제외되고 담긴다
- set container의 size를 구하면 담긴 원소 개수를 알 수 있다.
=> 10개의 값을 각 %42를 한 후, 나머지 값들 중 중복을 제외한 서로 다른 값의 나머지 개수만 구하기
// BJ 3052
#include <iostream>
#include <set>
using namespace std;
int main(void) {
int array[10];
int count = 0;
for (int i = 0; i < 10; i++) {
cin >> array[i];
}
set<int> remainder;//set 중복허용X
for (int i = 0; i < 10; i++) {
remainder.insert(array[i] % 42);
}
//같지 않은 수 인쇄
cout << remainder.size();
return 0;
}
[STL] set 정리
set container
- 연관 컨테이너 중 하나
- 노드 기반 컨테이너, 이진 트리로 구현
- key라 불리는 원소들의 집합
- key값은 중복 허용 안됨
- 원소가 insert 멤버 함수에 의해 삽입되면, 원소는 자동으로 정렬됨 (default 정렬 : 오름차순)
헤더 파일
- #include <set>
- using namespace std;
- 선언 방법 : set<int> s -------> set<데이터타입> 변수이름
예시
- set<int> s;
- s.begin();
첫 번째 원소 리턴
- s.end();
마지막 원소 리턴
- s.clear();
모든 원소 제거
- s.count(k) -------> int k는 원소임
원소 k의 개수 반환 (** set에서는 중복이 불가능하기 때문에 0,1 임.)
다만, multiset에서는 키값이 중복 가능하기 때문에 거기서 쓰임
- s.empty();
set s가 비워져 있는지 확인
- s.insert(k);
원소 k 삽입
삽입시 자동으로 정렬된 위치에 삽입됨
삽입이 성공 여부는 pair<iterator, bool>으로 나오게 됨
- s.insert(iter, k);
iter가 가리키는 위치부터 k를 삽입할 위치를 탐색하여 삽입
- s.erase(iter);
iter가 가리키는 원소 제거
- s.erase(start, end);
stat~end 범위의 원소 모두 제거
- s.find(k)
원소 k를 가리키는 반복자 반환
- s.size();
s의 원소 개수를 반환
- s.max_size();
s의 최대 남은 메모리 크기를 반환
'[알고리즘] 문제풀이 연습' 카테고리의 다른 글
백준 10219 - meats on the grill : reverse함수 등 (0) | 2019.07.04 |
---|---|
3) 알고리즘 : 정렬 - 삽입정렬(Insertion Sort) (0) | 2019.07.03 |
2) 알고리즘 : 정렬 - 버블정렬(Bubble Sort) (0) | 2019.07.01 |
1) 알고리즘 : 정렬 - 선택정렬(selection sort) (0) | 2019.07.01 |
[알고리즘 공부 계획] + 백준 5598 - OX퀴즈 풀이 (0) | 2019.07.01 |