문제 링크 : https://www.acmicpc.net/problem/25757
메모
- 각 게임의 참여 인원 수를 문제에서 제시해줬는데, 내 마음대로 이 수보다 인원 수가 적으면 게임에 참여할 수 있다고 생각했음. 그래서 모든 사람들이 게임에 참여할 수 있도록, 즉 나머지가 생기지 않도록 게임을 많이 시행해야 한다고 생각하고 코드를 짰음.
- vector에 이름들 다 입력 받고 중복되는 거 없애려 했는데 아예 unordered_set으로 둬서 중복 없는 배열? 만드는 방법이 있었음. 어떤 게 나은지는.
코테 강의 자료에 나와있는 코드는 다음과 같음.
auto it = unique(v.begin(), v.end()); cout << it- v.begin() << '\n';
이렇게 되는데 우리가 예상하는 중복이 제거된 배열을 얻기 위해서는 sort 함수를 같이 써야 됨.
결론적으로는 다음과 같은 코드를 써서 중복을 제거한 vector를 만들어야 됨.
sort(s2.begin(), s2.end()); s2.erase(unique(s2.begin(),s2.end()),s2.end());
set은 고유한 요소만을 저장하는 컨테이너. 중복된 값은 제거되고 map처럼 자동 정렬됨.
Q. set과 unqiue 중 어떤것을써야할까? 앞서서 unique를 통해 중복된 요소를 제거하는 로직을 배웠습니다. set을 통해서도 제거할 수 있죠. 그렇다면 어떤 것을 사용하는게 더 좋을까요? set을 사용해도 되고, unique와 erase를 사용해도 됩니다.
set보다는unique()와 erase() 사용하는 코드가 더 좋다고 벤치마킹 결과가 나왔으나 필요한 로직에 따라 어떤 것을 쓸지가 달라짐.
+ multiset은 중복 값이 들어갈 수 있는 set
=> 일단 vector에 unique, erase를 사용하는 방향으로 연습
맞힌 코드
//
참고
//
'Algorithm' 카테고리의 다른 글
[백준/BOJ] 14503번 로봇 청소기 C++ (0) | 2025.01.26 |
---|---|
[백준/BOJ] 14888번 연산자 끼워넣기 C++ (0) | 2025.01.26 |
[백준/BOJ] 2164번 카드2 C++ (0) | 2024.11.20 |
[프로그래머스] 42842번 카펫 C++ (0) | 2024.11.13 |
[프로그래머스] 86491번 최소직사각형 C++ (0) | 2024.11.13 |