본문 바로가기

알고리즘/프로그래머스

[1일 1알고리즘] 프로그래머스 - 로또의 최고 순위와 최저 순위

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

 

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

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

programmers.co.kr

연말이어도 (쉬운)문제는 풀었습니다. 크흠;;

 

function(){
set 일치하는수 ,zero 수
set prize 배열 <- [6,6,5,4,3,2,1]
set win_nums 원소값이 들어있는 arraylist

for(0 to 6){
	if(lottos[i]가 win_nums에 포함되있으면)
    	일치하는수 + 1
    else if(lottos[i] is 0)
    	zero 수 + 1
}
set answer 배열
answer[0] <- prize(일치하는 수 + zero수)
answer[1] <- prize(일치하는 수)
return answer
}

영의 개수만큼 최대값이 변경된다는 컨셉만 잡으면 큰 문제 없이 풀 수 있음.

더보기
import java.util.*;
class Solution {
     
    public int[] solution(int[] lottos, int[] win_nums) {
        int[] prize = {6,6,5,4,3,2,1};
        int cnt = 0, zeroCnt = 0;
        ArrayList<Integer> list = new ArrayList<>();
        for(int i = 0; i<6; i++)
            list.add(win_nums[i]);
        for(int i = 0; i<6; i++){
            if(list.contains(Integer.valueOf(lottos[i]))){
                cnt++;
            }else if(lottos[i] == 0){
                zeroCnt++;
            }
        }
               
        int[] answer = new int[2];
        answer[0] = prize[cnt+zeroCnt];
        answer[1] = prize[cnt];       
        return answer;
    }
}

arraylist 의 contains 함수는 객체를 parameter로 받고 해당 객체값이 list에 있으면 true 없으면 boolean을 반환합니다.

remove 함수의 경우 parameter가 index또는 Object를 받기 때문에 Integer형을 저장하는 리스트라면 valueOf 함수를 반드시 써서 객체화 해야합니다. (contains는 위의 코드처럼 valueOf를 사용하지 않고 그냥 lottos[i]만 넣어도 바르게 동작함.)