| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 | 28 |
| 29 | 30 | 31 |
- c#
- c#기본문법
- c#문제
- 유니티서바이벌게임만들기
- unity3d
- c#기초문법
- 유니티공부
- 바킹독알고리즘
- 티스토리챌린지
- C#문법
- 유니티게임만들기
- 백준 구현문제
- unity게임
- 오블완
- 바킹독
- Unity
- 유니티
- unity게임만들기
- unity3dservival
- 백준코딩테스트
- c# c#프로그래머스
- 유니티3dui
- 백준 c++ 공부
- 백준 C++
- c#코딩기초트레이닝
- 백준
- 백준코테
- unity3d게임만들기
- c#코테
- c#프로그래머스기초문법
- Today
- Total
나 개발자 진짜 되냐?
백준 C++ 3052번 나머지 ( sort, unique, erase, set ) 본문
백준 C++ 3052번 나머지 ( sort, unique, erase, set )
Snow Rabbit 2026. 2. 19. 23:56

설 연휴는 다들 잘 보내셨나요?!?!?!?!
저는 설연휴에 가족끼리 떡국도 먹고
놀러가서 기념 팔지도 맞췄습니다 ㅎㅎ
올해는 정말 좋은일이 가득하길 기대하고싶어요 ㅎㅎ
누군가가 이 글을 읽는다면
즐겁고 행복하고
무엇보다 건강한 일만 가득하길 바라겠습니다.🙏🙏🙏
음음.. 그래서!
오늘의 문제는!
풀 땐 쉬웠는데..
풀이법이 많아서!
더 쉬운 방법을 찾아 나서는
나


풀기는 금방 풀었다
42로 나눈 나머지라고 했으니
일단 값을 나눠서 배열에 넣어두고
cnt를 출력하도록 했다.
사실은 벡터로 하고 싶었는데
벡터로 어떻게 해야 하나.. 머릿속으로 잘 안 떠올라서 배열로 하게 되었다.

답은 맞았는데..
벡터로 하고 싶은 내 마음..!!
그래서 벡터로 했을 때 코드를 어떻게 써야 하는지 물어보았다.
vector <int> v(42,0);
이렇게 42개를 미리 만들고 0으로 초기화
v [a%42]++;
이렇게 해주면! 사실 똑같이 된다!!
벡터를 이렇게 써주면 좋지만
벡터에도 유용한 기능이 많다고 하며 나에게 맛있는 재료들을 알려주었다.
vector <int> v; 만 해주고
v.pushback(a%42);
해줘서 벡터에 그냥 넣는다
그럼 뭐 대충
1125342 이런 식으로 들어가면,
다음에
sort로 정렬을 해주고
sort(v.begin(), v.end());
1122345가 될 테니
v.erase(unique(v.begin(), v.end()), v.end());
이 식을 써주면 된다.
자 이게 무슨 뜻이냐!
unique 는 중복 원소를 맨 뒤로 빼주는 친구이다.
근데 이 친구 특징은
1 2 2 1
이렇게 있으면 2만 중복인 줄 알고
1 2 1 2 이렇게 배열한다.
즉 바로 옆에 친구만 중복인지 확인한다...
그렇기 때문에
정렬상태를 해놔줘야 한다. 그래서 우리는 위에 sort 해준 것..!!
특징이 하나 더 있다.
1 1 2 2로 두게 되면
1 2 ( 1 2 )를 두게 된다.
괄호는 이제 버려질것들
하지만 버리지 않고 이 유니크라는 친구는 세 번째 주소를 반환한다.
그래서 그 값부터! 끝까지
erase 해주면 된다.
중복 제거했으니 남은 나머지의 개수가 곧 벡터 크기가 된다.
v.size를 출력!!!

이 sort과 unique를 쓰는 것
그리고 erase까지!
이 세 가지를 쉽게 해주는 친구가 있다.
이 중복을 제거해 주는 라이브러리가 존재한다.
그것은 set
set
벡터와 비슷한 집합 형태의 친구
하지만? 넣어주기만 하면
크기 순서대로 정렬 + 중복 거르기
위 세 가지를 합쳐놓은 간단한 친구 되겠다!
set을 쓰게 되면
세가지를 알아야 한다고 한다.
s.insert(값) : 값을 넣어준다.
( 이미 같은 값이 들어갔다면 아무 일도 일어나지 않는다. )
s.size()
서로 다른 값이 몇 개 들었는지 알려준다.
s.find()
값이 있는지 없는지 알려준다.
그래서 이걸 어떻게 쓰냐!!
vector 쓰듯이
set <int> s;
s.insert(a%42) 해주면 된다.
벡터처럼 쓰며
출력은 더 쉽게 for문을 안 써도 되고
s.size()를 출력하면 된다.
그럼 더 간단하게 된다!!
set을 기억할 수 있길 바라며..
sort, unique, erase를 다 기억할 수 있을까??
set을 내가 vector 대신해서 쓸 수 있을까?
쉽지 않지만...
기억할 수 있길..ㅎㅎ
고생했다. 하루도
'C++을 시작해봐요! > 단계문제를 풀어보아요!' 카테고리의 다른 글
| 백준 C++ 30802번 웰컴키트 ( a를 b개 묶을 때 마법의 공식 ) (1) | 2026.02.24 |
|---|---|
| 백준 C++ 4153번 직각삼각형 ( 피타고라스 정리 ) (0) | 2026.02.23 |
| 백준 C++ 10818번 최소, 최대 ( minmax_element ) (0) | 2026.02.12 |
| 백준 C++ 10250번 ACM 호텔 ( 컴퓨터는 0, 나는 1 ) (0) | 2026.02.11 |
| 백준 C++ 1008번 A / B ( percision(), fixed ) (1) | 2026.02.04 |