본문 바로가기

C programming/[Code Up]

[Code Up] 1226번 : 이번 주 로또

728x90
반응형

난이도  ⭐️⭐️

 

이번 주 로또

 로또 규칙에 대한 이해가 부족한 경우 인터넷 검색을 통해 알아보시기 바랍니다.

www.codeup.kr

문제 설명

지혜는 로또 마니아다.

매주 로또 한 장을 사고 토요일이면 대박을 기대하면서 당첨번호를 확인한다.

지혜는 로또 결과가 4등이었는데 확인을 잘못해서 5등인 줄 알고 그냥 바꾸기 귀찮아서 버렸었다.

(사실은 다른 줄에 있는 것까지 합쳐서 3개 맞았는데 5등인 줄 알았다고 한다.)

이러한 사태가 다시는 일어나지 않게 하기 위해 우리가 프로그램을 만들어 주자.

 

로또 순위 매기는 방법)

등수 방법
1등 당첨번호 6개 일치
2등 당첨번호 5개 일치 + 보너스번호 일치
3등 5개 번호 일치
4등 4개 번호 일치
5등 3개 번호 일치
2개 이하 일치

 

예)

13 23 24 35 40 45 7     ===> 로또 당첨번호 + 보너스 번호

 2  6  7 23  40 44      ====> 지혜가 가진 로또 번호

따라서 지혜는 "꽝"

입력

첫 줄에 로또 당첨번호 6개와 보너스 번호 1개가 주어진다.

둘째 줄에 지혜가 가지고 있는 로또 번호 6개가 주어진다.

출력

지혜의 당첨 결과를 출력한다.

출력방법) 

1등 = 1 출력, 2등 = 2 출력, 3등 = 3 출력, 4등 = 4 출력, 5등 = 5 출력, 꽝 = 0 출력

[입력 예시]

13 23 24 35 40 45 7
2 6 7 23 40 44

[출력 예시]

0

문제 풀이

이 문제의 가장 핵심 요소는 바로 2등의 판단이다. 2등의 조건은 다른 등수와 다르게 '당첨번호 5개 일치 + 보너스번호 일치'라는 조건을 가지므로 다르게 프로그래밍을 해야 한다.

먼저 두 개의 번호를 입력받아야 하는데 이중 반복을 이용하고 두 번째 입력의 횟수를 제한을 둬 코드를 간략화했다.

for(int i=0;i<2;i++){ if(i==1) cnt = 6;
        for(int j=0;j<cnt;j++) scanf("%d",&n[i][j]);};

지혜가 가지고 있는 로또 번호와 당첨 번호를 먼저 확인하고, 지혜가 당첨 숫자가 5개인 경우에는 보너스 숫자를 확인하여 2등을 판별한다.

for(int i=0;i<6;i++){
        for(int j=0;j<6;j++){
            if(n[0][i] == n[1][j]) cnt ++;
        }
    }
    if(cnt == 5){
        for(int j=0;j<6;j++){
            if(n[0][6]==n[1][j]){key=1;break;}
        }
    }

이러한 작업이 끝났다면 switch 문으로 조건을 비교해 등수를 파악한다.

정답 코드

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

int main(){
    int a,b,c,d,cnt=7,key=0;
    int n[2][7];
    for(int i=0;i<2;i++){ if(i==1) cnt = 6;
        for(int j=0;j<cnt;j++) scanf("%d",&n[i][j]);};
    cnt = 0;
    for(int i=0;i<6;i++){
        for(int j=0;j<6;j++){
            if(n[0][i] == n[1][j]) cnt ++;
        }
    }
    if(cnt == 5){
        for(int j=0;j<6;j++){
            if(n[0][6]==n[1][j]){key=1;break;}
        }
    }

    if(key==1) printf("2");
    else {
        switch (cnt)
        {
        case 3: printf("5");
            break;
        case 4: printf("4");
            break;
        case 5: printf("3");
            break;
        case 6: printf("1");
            break;
        
        default: printf("0");
            break;
        }
    }
/**
13 23 24 35 40 45 7
24 13 7 23 40 23
 */
}
728x90
반응형

'C programming > [Code Up]' 카테고리의 다른 글

[Code Up] 1284번 : 암호 해독  (0) 2023.11.02
[Code Up] 1283번 : 주식 투자  (1) 2023.11.02
[Code Up] 1282번 : 제곱수 만들기  (1) 2023.11.02
[Code Up] 1205번 : 최댓값  (0) 2023.11.02
[Code Up] 1165번 : 축구의 신 1  (1) 2023.11.02
댓글