Programmers: 로또의 최고 순위와 최저 순위

KangDroid·2021년 5월 1일
0

Algorithm

목록 보기
10/27

문제

문제 설명

  • 본인이 적은 로또 번호와, 실제 로또 번호가 있다.
  • 근데 본인이 적은 로또 번호 n개를 모르는 상태
  • 이 때 당첨될 수 있는 경우의 수를 구하는 것
    • 최대 등수와 최소 등수!

문제 핵심

  • 최소 등수
    • 최소 등수 = 모르는 것을 모두 틀렸다고 하고, 맞춘 갯수
  • 최대 등수
    • 최대 등수 = 모르는 것을 모두 맞았다고 하고, 맞춘 갯수
  • 로 구할 수 있다.
  • 그래서 모르는 것들의 갯수를 구하고, 모르는걸 제외한 맞춘 갯수를 구하면 끝!
  • 물론 맞춘 갯수를 등수로 다시 변환을 해줘야된다.[이는 문제에 나와있음!]

알고리즘

  • 정렬[X]
  • 민우[문제 주인공] 로또 번호를 순회하면서
    • 0이 있는 경우 zeros_count 1 증가
    • 민우가 적은 로또 번호가 맞은 경우 right_count 1 증가
  • 계산
    • 최대로 맞은 갯수 = zeros_count + right_count
    • 최소로 맞은 갯수 = right_count
  • 갯수 -> 등수 변환
  • 벡터로 변환 -> 끝!

코드

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int get_rank(int size) {
    if (size == 6) return 1;
    else if (size == 5) return 2;
    else if (size == 4) return 3;
    else if (size == 3) return 4;
    else if (size == 2) return 5;
    else return 6;
}

vector<int> solution(vector<int> lottos, vector<int> win_nums) {
    int right_count = 0;
    int zeros_count = 0;
    for (int i = 0; i < lottos.size(); i++) {
        if (lottos[i] == 0) {
            zeros_count++;
        }
        if (find(win_nums.begin(), win_nums.end(), lottos[i]) != win_nums.end()) {
            right_count++;
        }
    }

    int maximum_size = right_count + zeros_count;
    int minimum_size = right_count;

    int maximum_rank = get_rank(maximum_size);
    int minimum_rank = get_rank(minimum_size);

    return {maximum_rank, minimum_rank};
}
profile
Student Platform[Backend] Developer

0개의 댓글

관련 채용 정보