프로그래밍/프로그래머스
Lv1_[로또의 최고 순위와 최저 순위, C++] 풀이 및 알고리즘 정리 - 프로그래머스
워킹독
2022. 12. 23. 09:01
728x90
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 내용, 조건, 예시는 프로그래머스 사이트 참조
여기서 알아야할 풀이 방식은 다음과 같다
- lottos와 win_nums를 비교해서 일치하는 숫자 찾기
- lottos에 존재하는 0의 갯수 찾기
- (일치하는 개수 == 최저 순위), (최저 순의 + 0의 개수 = 최고 순위)
두 벡터간의 일치하는 수를 찾는 방법은 여러가지가 중에 set 자료구조를 사용해서 비교
각 벡터에 저장된 값은 중복된 수가 들어있지 않기 때문에 데이터 손실도 없기에 검색이 빠른 set 구조를 사용
win_nums를 set으로 변환 후 lottos와 비교하며 0의 개수와 일치하는 수를 찾음
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 | #include <string> #include <vector> #include <set> using namespace std; vector<int> solution(vector<int> lottos, vector<int> win_nums) { vector<int> answer; int count_0 = 0; int count_etc = 0; vector<int> score = { 6, 6, 5, 4, 3, 2, 1 }; set<int> s(win_nums.begin(), win_nums.end()); for (auto item : lottos) { if(item == 0) { count_0++; } else { auto ret = s.insert(item); if(ret.second == false) { // 중복 count_etc++; } } } answer.push_back(score[count_etc + count_0]); answer.push_back(score[count_etc]); return answer; } | cs |
↓↓↓↓↓↓ 유익했다면 하트 뿅 ♥ ↓↓↓↓↓↓
728x90
반응형