반응형
안녕하세요? 수구리입니다.
이번 포스팅에서도 프로그래머스 문제를 가져왔습니다~
이 문제에서는 로또와 관련된 문제인데요.
vector에서 find 함수에 대한 내용입니다. 문제는 아래 링크에 두었습니다
생각해야 할 조건이 있으니 천천히 읽어보고 오시는 것을 추천드립니다!
[ 문제 ] 프로그래머스: 로또의 최고 순위와 최저 순위
https://programmers.co.kr/learn/courses/30/lessons/77484
[ 나의 풀이 ]
#include <algorithm>
#include <string>
#include <vector>
using namespace std;
vector<int> solution(vector<int> lottos, vector<int> win_nums) {
vector<int> answer; // [최고 순위, 최저 순위]
int hit = 0; // 맞춘 번호의 개수
int none = 0; // 모르는 번호 개수 (0의 개수)
for (auto& num : win_nums) {
auto it = find(lottos.begin(), lottos.end(), num);
if (it != lottos.end()){
hit++;
}
}
for (auto& num : lottos) {
if (num == 0) none++;
}
// 맞은 개수 + 모르는 번호의 개수 = 최대 순위
int max_hit = hit + none;
// 맞은 개수 = 최소 순위
int min_hit = hit;
// 최소로 맞은 숫자의 개수가 1 or 0 이라면 낙첨
if (min_hit < 2) min_hit = 1;
// 최대로 맞은 숫자의 개수가 0 이라면 낙첨
if (max_hit == 0) max_hit = 1;
// 7에서 빼준 이유는 (순위 + hit) = 7 이기 때문
answer.push_back(7-max_hit);
answer.push_back(7-min_hit);
// [최고 순위, 최저 순위] 반환
return answer;
}
[ 설명 ]
1. 입력으로 주어진 당첨 번호의 vector를 순회하면서 num이라는 지역 번수에 담아온다.
2. 1의 과정에서 받아온 num이라는 값이 있는지 find 함수를 통해서 lottos vector에서 찾는다.
3. 만약 값이 있다면 lottos.end() 가 아니기 때문에 조건을 통과하고 hit 변수에 1을 증가시킬 것이다.
4. 다음으로는 lottos 라는 vector를 순회하면서 단순하게 모르는 번호 즉, 0의 개수를 none라는 변수에 저장한다.
5. 예외처리를 통해 최대로 맞춘 번호의 수 (max_hit)과 최소로 맞춘 번호의 개수 (min_hit) 변수를 가지고 최고 순위와 최저 순위를 계산해준다.
6. 계산된 각 순위를 answer에 순서대로 push_back 한 후 결과를 출력한다.
반응형
'✏️ PS > Programmers' 카테고리의 다른 글
[ python ] 프로그래머스: 수박수박수박수박수? (0) | 2021.12.14 |
---|---|
[ C++ ] 프로그래머스: 신규 아이디 추천 (0) | 2021.12.13 |
[ C++ ] 프로그래머스: 가운데 글자 가져오기 (0) | 2021.12.09 |
[ python ] 프로그래머스: 문자열 내림차순 정렬 (0) | 2021.12.07 |
[ C++ ] 프로그래머스: 소수 만들기 (0) | 2021.11.17 |