[TIL 20th] 프로그래머스 : 로또의 최고 순위와 최저 순위
by 노실언니문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/77484
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
깃허브 풀이 링크
Algorithm_Cpp_SQL/프로그래머스/1/77484. 로또의 최고 순위와 최저 순위 at main · learner-nosilv/Algor
This repository contains the problems and code that I have successfully solved. This repository is automatically pushed by LeetHub and BaekjoonHub. - learner-nosilv/Algorithm_Cpp_SQL
github.com
간단히 말하면, 내 로또 종이 일부가 낙서때문에 보이지 않는 상황에서
낙서에 가려진 번호를 제외한 내 로또번호랑 실제 당첨번호를 비교해서, 나의 최고 등수와 최저 등수를 가늠하라는 문제이다.
일단, 방향성을 잡자면 ; 소팅, 벡터의 원소 삭제는 pop_back()뿐이라는 점을 염두하고 코드를 짰다.
- 소팅을 한 후에 비교를 하면 비교 횟수가 줄어들 듯했다.
- 번호가 0이냐? 이런 비교를 하는 것도 아까워서 민우 번호 벡터에 있는 0(낙서로 지워진 번호)은 미리 삭제를 하려는데 벡터는 맨 뒤 원소만 지울 수 있어서 소팅을 내림차순으로 했다. pop_front()는 없는 듯
( 큐도 생각해봤는데, 입력될 때의 자료형이 고정되어 있어서 어쩔수없다 ! )
1. 내림차순 정렬하고 값이 0인 원소 삭제하기(낙서로 지워진 번호 갯수 카운팅)
2. 내 번호와 로또번호를 비교하여 맞춘 갯수 카운팅
소팅을 했기 때문에 내 번호와 로또 번호를 비교해서 동일한 번호를 찾는 과정은 간편해졌다.
이중for문을 쓰지 않아도 되고 말이다.
3. 낙서로 지워진 번호 갯수와 맞춘 갯수를 사용하여 최고등수/최저등수 계산
1순위+6개번호 = 2순위+5개번호 = ... = 5순위+2개번호 = 7개로 동일하다. 그걸 이용해서 등수를 계산했다.
vector<int> answer;
answer.push_back( (empty+match>1 ? 7-(empty+match) : 6) ); // 최고등수
answer.push_back( (match>1 ? 7-(match) : 6) ); // 최저등수
풀 코드
레벨 1 짜리 문제이기도 하고, 끽해봤자 6개번호라 대충해도 되는데 다른 방법으로 풀어보게 되었다.
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> solution(vector<int> lottos, vector<int> win_nums) {
int empty=0; // 빈자리
// 내림차순 정렬
sort(lottos.rbegin(), lottos.rend());
sort(win_nums.rbegin(), win_nums.rend());
while(!lottos.empty() && lottos.back()==0) {
lottos.pop_back();
empty++;
}
// 현재 맞춘 갯수 카운팅
int match=0; // 맞춘갯수
int l=0;
int w=0;
while(l<lottos.size() && w<win_nums.size()){
if(lottos[l]==win_nums[w]) { match++; l++; w++; }
else if(lottos[l]<win_nums[w]) w++;
else l++;
}
vector<int> answer;
answer.push_back( (empty+match>1 ? 7-(empty+match) : 6) ); // 최고등수
answer.push_back( (match>1 ? 7-(match) : 6) ); // 최저등수
return answer;
}
'Today I Learned' 카테고리의 다른 글
[TIL 22th] 확신에 차진 않지만 걷는 걸음 / 스프링 심화주차 개인과제 완료 (0) | 2025.02.28 |
---|---|
[TIL 21th] LeetCode 584. Find Customer Referee (0) | 2025.02.03 |
1월 1, 2주차 우수 TIL에 선정되다 (예? 제가요?) (0) | 2025.01.23 |
[TIL 19th] 벡터의 주소를 가리키는 포인터를 사용하면 낭패본다 (0) | 2025.01.20 |
[TIL 18th] 재귀 & 유클리드 호제법 다시 사용해보기 (0) | 2025.01.18 |
블로그의 정보
노력하는 실버티어
노실언니