티스토리 뷰
수 10개를 입력받은 뒤, 이를 42로 나눈 나머지를 구한다. 그 다음 서로 다른 값이 몇 개 있는지 출력하는 프로그램을 작성하시오.
#include <iostream>
#include <set>
using namespace std;
int main()
{
set<int>s;
int num;
for(int i = 0; i< 10; i++){
cin >> num;
s.insert(num%42);
}
cout << s.size();
return 0;
}
나의 접근 )
서로 다른 값이 몇 개 있는지를 알아내는 것이 목표다.
처음에는 새로운 배열을 하나 추가해서, 선택정렬을 하는 것처럼 일일이 하나씩 비교하고 count 할 생각이었다.
하지만, 너무 번거롭다고 생각되어 다른 방법을 찾아 보았다.
그때 알게 된 것이 아래에 정리해 둔 set이라는 것이다.
10개의 수를 for문을 통해 입력받고, s라는 set을 지정해둔 다음, s에 입력받은 num%42를 넣어주면
중복되는 값을 다 사라질 것이다.
그렇게 size를 출력하면, 서로 다른 값의 개수를 알 수 있다.
Set container
- 연관 컨테이너(Associative container) 중 하나
- 노드 기반 컨테이너 이며 균형 이진트리로 구현
- Key라 불리는 원소들의 집합으로 이루어진 컨테이너
- 원소 중복이 허용 되지 않음.
- insert 멤버 함수에 의해 삽입 => 자동 정렬
- default 정렬 기준 = 오름차순
How to use
- <set> 헤더 파일에 존재
- 기본 선언 형태 = set<Data_type>variable_name
set<int> s(pred); // pred를 통해 정렬기준을 세웁니다. set<int> s2(s1) // s1을 복사한 s2 // 연산자 (==, !=, <, >, <=, >=) 사용가능
** 출처 및 멤버 연산자에 대한 추가적인 내용 < https://blockdmask.tistory.com/79 >
Container
- STL(표준 C++ 라이브러리. 프로그램에 필요한 자료구조와 알고리즘을 Template로 제공하는 라이브러리)에서 Container는 같은 타입의 여러 객체를 저장하는 일종의 집합이라고 할 수 있다.
- Sequence Container : array, vector, list, deque
- Associative Container : set, multiset, map, multimap
< 출처 및 추가자료 : https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=je1206&logNo=221397075571 >
Node
- 컴퓨터 네트워크를 구성하는 기기 1개, 1개를 의미.
< 출처 및 추가자료 : https://engineer-mole.tistory.com/141 >
균형 이진트리
- 모든 노드의 왼쪽과 오른쪽 하위 트리의 높이가 최대 1만큼 차이가 날 수 있는 이진트리
< 출처 및 추가자료 : https://wonit.tistory.com/198 >