programmers.co.kr/learn/courses/30/lessons/42628
이 문제를 풀다가 set에 대한 테크닉을 많이 익혔다.
기존의 Set 팁
jaeyoon8783.tistory.com/10?category=873882
Q. 기존의 set은 key값의 중복을 허용하지 않았는데 허용하는 set이 있다???????
A. multiset이라는것이 있다. 중복 허용을 제외하면 나머지는 전부 똑같다.
Q. set<int> s = {1,2,4,5,7,8} 인 상태에서 s.erase(4) 면 4번째가 아닌 숫자 4를 지웠다.
만약 0번째 원소를 지우고 싶을땐 어떻게 하나??
그면 1번째 원소는??
A. 0번째 원소는 s.erase(s.begin()) 을 하면 된다. (itr 위치류로 잡아주면 되는거였다.)
1번째 원소는 s.erase(s.begin()+1) 을 하면 될것 같지만 안된다.
=> s.erase(++s.begin()) 이렇게 써야 된다.
Q. set에 대한 탐색때 set<int>::iterator itr = s.begin() 이 너무 거추장 스럽다. 좀더 간단하게 쓸 수 있을까???
A. auto 자료형을 쓰면 된다.
밑은 코드이다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
#include <iostream>
#include <queue>
#include <set>
#define pii pair<int, int>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
set<int> s = { 6,1,8,4,2,7 }; // 1 2 4 6 7 8
s.erase(++s.begin());
auto itr = s.begin();
while (itr != s.end())
{
cout << *itr << ' ';
itr++;
}
}
|
cs |
'복습이 필요한 알고 팁' 카테고리의 다른 글
BFS가 상하좌우과정이 아닐 때 + 이동에 제약이 있을 때 (0) | 2020.09.18 |
---|---|
java로 알고리즘 만들기 (0) | 2020.09.06 |
동적 2차원 배열 + 특정 수로 초기화 하기 (0) | 2020.09.05 |
vector<int> 에서 .erase()쓰기 (0) | 2020.08.30 |
nCr 좀 더 간단하게 (r 이 작으면서 고정적인 값일때) (0) | 2020.08.29 |