Jindory
Jindory의 기록 라이프
Jindory
전체 방문자
오늘
어제
07-08 06:23
  • 분류 전체보기
    • 개발
      • AI
      • Java
      • Javascript
      • JPA
      • Python
      • Spring
      • Web
    • 데이터베이스
      • Database
      • Oracle
      • MySQL
    • 코딩테스트
      • 구름IDE
      • 백준
      • 코딩테스트 준비
      • 프로그래머스
    • 분석 및 설계
      • Design Pattern
      • UML
    • 트러블슈팅
      • Java
      • JPA
      • Spring
    • 개발 커리어
      • 면접
      • 멘토링
      • 포트폴리오
      • 프로젝트

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

최근 댓글

최근 글

티스토리

250x250
hELLO · Designed By 정상우.
Jindory

Jindory의 기록 라이프

[프로그래머스] 로또의 최고 순위와 최저 순위(Java/Python)
코딩테스트/프로그래머스

[프로그래머스] 로또의 최고 순위와 최저 순위(Java/Python)

2022. 3. 9. 16:37
반응형

문제설명

로또 6/45(이하 '로또'로 표기)는 1부터 45까지의 숫자 중 6개를 찍어서 맞히는 대표적인 복권입니다. 아래는 로또의 순위를 정하는 방식입니다. 

순위당첨 내용

1 6개 번호가 모두 일치
2 5개 번호가 일치
3 4개 번호가 일치
4 3개 번호가 일치
5 2개 번호가 일치
6(낙첨) 그 외

로또를 구매한 민우는 당첨 번호 발표일을 학수고대하고 있었습니다. 하지만, 민우의 동생이 로또에 낙서를 하여, 일부 번호를 알아볼 수 없게 되었습니다. 당첨 번호 발표 후, 민우는 자신이 구매했던 로또로 당첨이 가능했던 최고 순위와 최저 순위를 알아보고 싶어 졌습니다.

제한사항

  • lottos는 길이 6인 정수 배열입니다.
  • lottos의 모든 원소는 0 이상 45 이하인 정수입니다.
    • 0은 알아볼 수 없는 숫자를 의미합니다.
    • 0을 제외한 다른 숫자들은 lottos에 2개 이상 담겨있지 않습니다.
    • lottos의 원소들은 정렬되어 있지 않을 수도 있습니다.
  • win_nums은 길이 6인 정수 배열입니다.
  • win_nums의 모든 원소는 1 이상 45 이하인 정수입니다.
    • win_nums에는 같은 숫자가 2개 이상 담겨있지 않습니다.
    • win_nums의 원소들은 정렬되어 있지 않을 수도 있습니다.

전체코드(Java)

import java.util.*;
class Solution {
    public int[] solution(int[] lottos, int[] win_nums) {
        // 정답의 개수에 따른 순위를 미리 정의해 놓는다.
        int[] answer = {6,6,5,4,3,2,1};
        // 맞은 개수와, 0의 개수를 정의한다.
        int correct = 0;
        int zero = 0;
        for(int i=0;i<lottos.length;i++){
            // 만일 lottos의 수가 0이라면 zero를 증가
            if(lottos[i] == 0 ){
                zero++;
            }
            // lottos의 수가 0이 아니라면 win_nums에 존재하는지 확인하여 존재하면 correct 증가
            else if(contains(win_nums,lottos[i])){
                correct++;
            }
        }
        // zero가 다 맞을 경우와 다 틀릴 경우를 배열에 담아 반환
        int[] result = {answer[correct+zero],answer[correct]};
        return result;
    }
    
    public static boolean contains(final int[] arr,final int num){
        return Arrays.stream(arr).anyMatch(i->i==num);
    }
}

전체코드(Python)

def solution(lottos, win_nums):
    # 갯수만큼 감했을때 등수가 나오도록 7을 rank에 셋팅한다
    rank = 7
    # lottos를 순회(중복제거)하며 맞은 갯수에 따라서 최대 등수를 rank에 저장한다
    for l in set(lottos):
        if l in win_nums:
            rank-=1
    # 0이 다 맞았다고 전제하여 0의 갯수만큼 등수를 올리고, 다 틀린경우 rank를 등수로 매긴다
    answer = [rank-lottos.count(0),rank]
    # 값이 7일 경우 7등은 없으므로 1을 감하여 6등으로 만든다
    return [i-1 if i ==7 else i for i in answer]

혹시라도 정정할 내용이나 추가적으로 필요하신 정보가 있다면 댓글 남겨주시면 감사하겠습니다.

오늘도 Jindory 블로그에 방문해주셔서 감사합니다.

 

[참고]

https://programmers.co.kr/learn/courses/30/lessons/77484?language=java

반응형
저작자표시 비영리 (새창열림)

'코딩테스트 > 프로그래머스' 카테고리의 다른 글

[프로그래머스] 소수 만들기(Java/Python)  (0) 2022.03.23
[프로그래머스] 숫자 문자열과 영단어(Python)  (0) 2022.03.16
[프로그래머스] 다리를 지나가는 트럭(Python)  (0) 2022.03.16
[프로그래머스] 신규 아이디 추천(Python)  (0) 2022.03.09
[프로그래머스] 신고 결과 받기(Java/Python)  (0) 2022.03.09
    '코딩테스트/프로그래머스' 카테고리의 다른 글
    • [프로그래머스] 숫자 문자열과 영단어(Python)
    • [프로그래머스] 다리를 지나가는 트럭(Python)
    • [프로그래머스] 신규 아이디 추천(Python)
    • [프로그래머스] 신고 결과 받기(Java/Python)
    Jindory
    Jindory

    티스토리툴바