user input 숫자인지 문자인지
- stoi(), stol(), stod() 등의 함수 에러처리로 파악한다
bool check_number(string s) {
try {
stoi(s);
} catch (const invalid_argument& e) { // 숫자 형태 아닐 때
return false;
} catch (const out_of_range& e) { // 표현 가능 범위 넘었을 때
return false;
}
return true;
}
in python?
- unsigned 정수에 한해 isdigit() 함수를 사용 가능하다 ("123"은 true, "25kim6"은 false)
for _ in range(m):
tmp = input()
if tmp.isdigit():
print(l[int(tmp)])
else:
print(d[tmp])
map counter 처럼 사용하기
- map 사용 시 할당안된 val은 일반 변수의 경우 0, 포인터 변수의 경우 NULL로 초기화되어있다
map<int, int> m;
for(int i=0; i<N; i++) {
cin >> tmp;
m[tmp]++;
}
in python?
collections 모듈의 Counter 클래스를 사용하면 됨
Counter( ) 생성자의 인자로 List, Dictionary, String 등등이 들어갈 수 있다. 딕셔너리 형태로 count 해주더라
from collections import Counter
cards = list(map(int,input().split()))
counter = Counter(cards) # Counter({10: 3, 3: 2, -10: 2, 6: 1, 2: 1, 7: 1}) 이런 형태
finds = list(map(int,input().split()))
for find in finds:
print(counter[find], end=' ')
set 자료형 교집합, 대칭차집합 구하기
- <algorithm> 헤더 선언 필요, 정렬된 상태의 자료형에서 사용 가능 (set은 자동정렬, vector는 수동 정렬 필요)
- set_intersection() 함수와 std::inserter() 사용
set<string> d;
set<string> b;
set<string> db;
for(int i=0; i<N; i++) {
cin >> name;
d.insert(name);
}
for(int i=0; i<M; i++) {
cin >> name;
b.insert(name);
}
set_intersection(d.begin(), d.end(), b.begin(), b.end(), inserter(db, db.begin()));
- set_symmetric_difference() 함수와 std::inserter() 사용해 대칭차집합 구할 수 있음
- 차집합은 set_difference() 임
sort(v1.begin(), v1.end());
sort(v2.begin(), v2.end());
set_symmetric_difference(v1.begin(), v1.end(), v2.begin(), v2.end(), inserter(res, res.begin()));
in python?
- & 기호 또는 set.intersection() 함수를 통해 가능 / ^ 기호 통해 가능
res = set_d & set_b # set_d.intersection(set_b)
# res = s1 ^ s2
for name in sorted(res):
print(name)
'BOJ' 카테고리의 다른 글
[C++] 셋 이상 수의 최대공약수(GCD) 구하기 (0) | 2023.08.18 |
---|---|
[C++] 시간 초과 꿀팁, binary search, 벡터 원소 삭제, set 자료형, map 자료형 (0) | 2023.08.15 |
[C++] vector 정렬/안정정렬, vector 중복요소 제거, pair 자료형 (0) | 2023.08.11 |
[C++] nlogn sorting 알고리즘 구현 (0) | 2023.08.10 |
[C++] cin.eof() (0) | 2023.05.05 |