[프로그래머스][C++] 로또의 최고 순위와 최저 순위
로또의 최고 순위와 최저 순위
문제 링크
분석
lottos
에서 0의 개수를 세야합니다.
0은 로또 번호를 가장 많이 맞춘 경우의 값이 됩니다.
0을 전부 틀린 숫자로 가정하고, 맞춘 숫자를 구해 가장 적게 맞춘 경우의 값을 구해야합니다.
가장 많이 맞춘 경우의 값과 가장 적게 맞춘 경우의 값으로 순위를 구합니다.
풀이
#include <vector>
using namespace std;
vector<int> solution(vector<int> lottos, vector<int> win_nums) {
vector<int> answer;
int high = 0;
int low = 0;
for (int i = 0; i < lottos.size(); ++i)
{
if (lottos[i] == 0)
{
++high;
continue;
}
for (int j = 0; j < win_nums.size(); ++j)
{
if (lottos[i] == win_nums[j])
{
++high;
++low;
break;
}
}
}
high = (high > 1) ? high : 1;
low = (low > 1) ? low : 1;
answer.push_back(7 - high);
answer.push_back(7 - low);
return answer;
}
high
는 로또 번호를 가장 많이 맞춘 경우의 값을 저장합니다.
low
는 로또 번호를 가장 적게 맞춘 경우의 값을 저장합니다.
lottos
를 순회해 당첨 번호를 확인합니다.
구매한 로또의 번호가 0인 경우 로또 번호를 가장 많이 맞춘 경우(high
)의 값을 1 증가시킵니다.
구매한 로또의 번호가 당첨 번호인 경우 모든 경우의 값을 1씩 증가시킵니다.
반복문이 끝난 후 다음과 같습니다.
로또 번호를 가장 많이 맞춘 경우와 가장 적게 맞춘 경우의 값으로 순위를 계산합니다.
1개 이하로 맞춘 경우 6위이므로, 6의 값을 가질 수 있도록 변경하고, 순위를 구해 반환합니다.
성능 요약
시간 복잡도는 $O(1)$의 시간 복잡도를 가집니다.
lottos
를 순회하는 반복문($O(6) \approx O(1)$)win_nums
를 순회하며 당첨 번호를 비교하는 반복문 ($O(6) \approx O(1)$)lottos
와win_nums
를 순회하는 중첩 반복분이므로 최악의 경우 ($6 \times 6 = 36$)- $O(36) \approx O(1)$
공간 복잡도는 고정된 크기의 상수 공간을 사용하기 때문에 $O(1)$입니다.
테스트 1 〉 통과 (0.01ms, 4.2MB)
테스트 2 〉 통과 (0.01ms, 4.16MB)
테스트 3 〉 통과 (0.01ms, 4.19MB)
테스트 4 〉 통과 (0.01ms, 4.27MB)
테스트 5 〉 통과 (0.01ms, 3.67MB)
테스트 6 〉 통과 (0.01ms, 4.16MB)
테스트 7 〉 통과 (0.01ms, 4.18MB)
테스트 8 〉 통과 (0.01ms, 3.66MB)
테스트 9 〉 통과 (0.01ms, 3.66MB)
테스트 10 〉 통과 (0.01ms, 4.02MB)
테스트 11 〉 통과 (0.01ms, 4.2MB)
테스트 12 〉 통과 (0.01ms, 4.2MB)
테스트 13 〉 통과 (0.01ms, 4.13MB)
테스트 14 〉 통과 (0.01ms, 3.74MB)
테스트 15 〉 통과 (0.01ms, 4.12MB)
댓글남기기