본문 바로가기
개발 노트/백준, 프로그래머스 풀이

[c++] 로또의 최고 순위와 최저 순위

by tokkiC 2022. 6. 15.

처음 풀어본 프로그래머스 코딩테스트 문제이다

백준 코딩테스트는 전처리 매크로부터 메인함수까지 코드 전체를 작성해서 만들었는데

프로그래머스는 함수 부분만 구현을 하도록 하는 것 같다

초기화 하지 않은 int형에 ++을 하는 실수가 있었고(쓰레기값에 ++하니 값이 엄척나게 튀었다;

0이 하나도 없고 하나도 맞지 않은 경우 mu와 nn이 모두 0일때 lrank와 hrank가 모두 7 이 된다

하지만 최저 등수는 6등이니 if문으로 7등일때 6등으로 수정해주었다(두개 뿐이니 하나하나 설정하는게 편했다)

문제 질문하기란에 테스트 케이스 14번에서 막히는 사람들이 많던데(나도 그랬고) (모두 틀리고 0도 없는 케이스)

7등의 경우를 6등으로 바꿔주면 테스트 케이스 14번을 해결 가능하다

함수 내에서만 해결을 해야 하므로 백준보다 조금 까다롭다고 느꼈다

풀다보면 익숙해지겠지!

 

https://programmers.co.kr/learn/courses/30/lessons/77484

 

코딩테스트 연습 - 로또의 최고 순위와 최저 순위

로또 6/45(이하 '로또'로 표기)는 1부터 45까지의 숫자 중 6개를 찍어서 맞히는 대표적인 복권입니다. 아래는 로또의 순위를 정하는 방식입니다. 1 순위 당첨 내용 1 6개 번호가 모두 일치 2 5개 번호

programmers.co.kr

 

#include <bits/stdc++.h>

using namespace std;


vector<int> solution(vector<int> lottos, vector<int> win_nums) {
    vector<int> answer;
    int nn=0;
    int mu=0;
    int lrank=0;
    int hrank=0;
    for(int i=0; i<6; i++){
        if(lottos[i]==0)
            nn++;
        else {
        	for(int j=0; j<6; j++)        		
            	if(lottos[i]==win_nums[j])
                	mu++;
        }
    }
    lrank = 7-mu;
    if(lrank == 7)
        lrank = 6;
    hrank = 7-nn-mu;
    if(hrank == 7)
    	hrank = 6;
	answer.push_back(hrank);
    answer.push_back(lrank);
    return answer;
}

int main(){
	vector<int> ans;
	vector<int> lottos = {44, 1, 0, 0, 31, 25};
	vector<int> win_nums = {31, 10, 45, 1, 6, 19};
	ans=solution(lottos, win_nums);
	return 0;
}

 

댓글