문제 설명 |
본 문제는 프로그래머스의 로또의 최고 순위와 최저 순위 문제로 로또 6/45에서 영감을 받아
당첨번호 여섯자리가 배열로 주어지고 임의의 로또 번호 여섯자리가 한 자리씩 배열에 담겨 주어집니다
문제의 특성 상 로또번호가 훼손되었다고 하는데 여섯자리 중 훼손된 번호는 0으로 배열에 담습니다.
이러한 상황에서 훼손된 숫자를 고려하였을 때 임의의 로또 번호로 얻을 수 있는 최고순위와 최저순위를 반환하는 문제입니다.
로또 번호는 여섯자리이고, 숫자의 범위는 1에서 45까지입니다. 0은 훼손된 숫자입니다.
해결 과정 |
최고순위와 최저순위가 만들어지는 상황을 가정해보자면 지워지진 않은 숫자와 당첨숫자를 비교해
그 값을 서로 비교해 신뢰할 수 있는 순위를 얻을 수 있을 것 입니다. 여기서 훼손된 번호가 미지수로 적용되어
훼손된 번호의 갯수에 따라 최고순위를 얻을 수 있을 것이며 훼손된 번호가 없다면 지금 수가 바로 최저순위일 것 입니다
그래서 저는 unordered_map을 통해 해쉬테이블을 만들어 1에서 45의 숫자의 second에 0을 넣어 전체 초기화를 시켰습니다. 이후 당첨번호를 전체 순회하여 해쉬테이블에 해당 값의 second 값을 1씩 증가시켰습니다. 그리고 코드에서 lottos라는 임의의 숫자 여섯자리 배열을 순회하여 0의 갯수를 counter_zero 변수에 담고, 0이 아닌 수는 해쉬테이블에서 찾아
그 수가 0이 아니면 counter_match로 숫자가 일치한 횟수를 저장했습니다.
그리고 최대횟수를 counter_match + counter_zero, 최저횟수를 counter_match로 두고 이를 당첨등수로 바꿔줄 lookup 테이블을 만들어서 answer배열에 삽입합니다.
코드 전문 |
#include <string>
#include <vector>
#include <array>
#include <unordered_map>
using namespace std;
vector<int> solution(vector<int> lottos, vector<int> win_nums) {
vector<int> answer;
int counter_zero = 0;
int counter_match = 0;
unordered_map<int, int> win_hash_table;
array<int,7> rank_table{6,6,5,4,3,2,1};
for (int i = 1; i <= 45; i++)
{
win_hash_table.insert({ i,0 });
}
for (auto num : win_nums)
{
win_hash_table.find(num)->second++;
}
for (auto num : lottos)
{
if (num == 0) counter_zero++;
else if (win_hash_table.find(num)->second != 0) counter_match++;
}
answer.emplace_back(rank_table[counter_match + counter_zero]);
answer.emplace_back(rank_table[counter_match]);
return answer;
}
느낀 점 (잡설 99% , 배운점 1%(많은 편)) |
unordered_map이란 것도 써보고 find()와 ->연산자를 응용하여 접근해보았습니다.
lookup table이란 것도 만들어 보았습니다.
저에게 있어 딱 좋은 문제네요. 헤
긴 글 읽어주셔서 감사합니다.
부족한 점이 있다면 부디 알려주시면 감사하겠습니다.
'알고리즘 부셔버렷 > ProblemSolving' 카테고리의 다른 글
[프로그래머스] 숫자 문자열과 영단어 (문제 설명, 해결 과정, 코드 전문, c++) (0) | 2022.05.27 |
---|---|
[프로그래머스] 신규 아이디 추천 (0) | 2022.05.27 |
[프로그래머스] 신고 결과 받기 (문제 해결 과정, 코드 전문, C++) (0) | 2022.05.26 |
[LeetCode 415] Add Strings (문제 설명, 해결 과정, 코드 전문, 느낀 점) (0) | 2022.05.12 |
[LeetCode 125] valid palindrome (코드, 느낀 점) (0) | 2022.05.11 |
댓글