https://school.programmers.co.kr/learn/courses/30/lessons/77484
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
난이도 : Lv. 1
문제
로또를 구매한 민우는 당첨 번호 발표일을 학수고대하고 있었습니다.
하지만, 민우의 동생이 로또에 낙서를 하여, 일부 번호를 알아볼 수 없게 되었습니다.
당첨 번호 발표 후, 민우는 자신이 구매했던 로또로 당첨이 가능했던 최고 순위와 최저 순위를 알아보고 싶어 졌습니다.
(알아볼 수 없는 번호를 0으로 표기)
민우가 구매한 로또 번호를 담은 배열 lottos, 당첨 번호를 담은 배열 win_nums가 매개변수로 주어집니다.
이때, 당첨 가능한 최고 순위와 최저 순위를 차례대로 배열에 담아서 return 하도록 solution 함수를 완성해주세요.
#include <string>
#include <vector>
using namespace std;
vector<int> solution(vector<int> lottos, vector<int> win_nums) {
vector<int> answer;
int hitNum = 0; // 맞춘 숫자
int missingNum = 0; // 알 수 없는 수
int bestCase;
int worstCase;
for(int lottoNum : lottos)
{
if (lottoNum == 0)
++missingNum;
for(int winNum : win_nums)
{
if(lottoNum == winNum)
++hitNum;
}
}
bestCase = 7 - (hitNum + missingNum);
if(bestCase >= 6)
bestCase = 6;
worstCase = 7 - hitNum;
if(worstCase >= 6)
worstCase = 6;
answer.push_back(bestCase);
answer.push_back(worstCase);
return answer;
}
풀이
- 맞춘 수, 0의 개수를 저장할 변수 hitNum과 missingNum을 선언한다.
- 최고 순위와 최저 순위를 저장할 변수 bestCase와 worstCase를 선언한다.
- for(int lottoNum : lottos)과 for(int winNum : win_nums) 를 이용해 이중 반복문을 선언한다.
: for(int lottoNum : lottos) 은 lottoNum이 lottos 배열의 원소를 순회하면서 차례대로 가르킨다는 뜻이다. - 반복문을 돌면서 0이 발견되면 missingNum에 1을 더하고,
lottoNum과 winNum이 같으면 hitNum에 1을 더한다. - bestCase에는 7 - (맞춘 개수 + 0의 개수)
worstCase에는 7 - 맞춘 개수를 넣는다.
다만 두 케이스가 6보다 작거나 같으면 6을 넣는다.
이는 1개를 맞추거나 맞춘게 없는 경우 모두 6등이기 때문이다. - answer 백터에 두 케이스를 push_back 한다.
'[게임 개발] 알고리즘 공부 > 프로그래머스' 카테고리의 다른 글
[C++] 완주하지 못한 선수 (0) | 2023.07.07 |
---|---|
[C++] 2021 카카오 채용연계형 인턴십 - 숫자 문자열과 영단어 (0) | 2023.06.24 |
[C++] 2018 KAKAO BLIND RECRUITMENT[1차] 비밀지도 (0) | 2023.06.23 |
[C++] 가장 가까운 같은 글자 (0) | 2023.06.22 |
[C++] 2023 KAKAO BLIND RECRUITMENT개인정보 수집 유효기간 (0) | 2023.05.21 |