Algorithm/Java

프로그래머스 - 로또의 최고 순위와 최저 순위 java :: 2021 Dev-Matching: 웹 백엔드 개발자(상반기)

고고마코드 2022. 7. 9. 21:49
반응형
77484

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


풀이

📌로또의 수는 45개이고, 각 배열(lottos, win_nums)의 길이는 6개로 고정입니다. 

📌알아야 할 것은 "몇 개를 맞췄느냐?", "몇 개가 낙서되었느냐?" 입니다.

위 두 개의 핵심으로 생각해보면 

많이 맞춘 경우는 낙서된 수가 모두 당첨 번호라고 가정하고 [맞춘 개수 + 낙서된 수]

많이 맞추지 못한 경우는 낙서된 수가 모두 꽝이라고 가정하고 [맞춘 개수] 입니다.

 

 

📝풀이1

public int[] solution(int[] lottos, int[] win_nums) {
	int count_zero = 0, count_hit = 0; // 낙서된 수(zero), 당첨 번호 수(hit)
	for(int lotto : lottos) {
		if(lotto == 0) count_zero++; // 낙서된 수 증가
		
		for(int win_num : win_nums) {
			if(lotto == win_num) {
				count_hit++; // 당첨 번호 수 증가
			}
		}
	}
	
    return new int[] { getLottoRanking(count_hit+count_zero), getLottoRanking(count_hit) };
}

public int getLottoRanking(int hit) {
	switch(hit) {
		case 6: return 1;
		case 5: return 2;
		case 4: return 3;
		case 3: return 4;
		case 2: return 5;
		default: return 6;
	}
}

🔨getLottoRanking(int hit) : 당첨번호를 맞춘 개수에 따라 순위를 반환

 

배열 lottos를 순회하며 [낙서된 수]와 [당첨 번호 수]를 증가시킵니다.

🎈최고 순위는 낙서된 수가 모두 당첨 번호 수라고 가정해야 하기 때문에 [낙서된 수 + 당첨 번호 수] 입니다. 

🎈최저 순위는 낙서된 수가 모두 꽝이라고 가정해야 하기 때문에 [당첨 번호 수] 입니다.

 

⚡️테스트 케이스 처리속도: 0.01 ~ 0.02ms

 

 

📝풀이2

public int[] solution(int[] lottos, int[] win_nums) {
	int count_zero = 0, count_hit = 0; // 낙서된 수(zero), 당첨 번호 수(hit)
	for(int lotto : lottos) {
		if(lotto == 0) count_zero++; // 낙서된 수 증가
		
		for(int win_num : win_nums) {
			if(lotto == win_num) {
				count_hit++; // 당첨 번호 수 증가
			}
		}
	}
	
	int rank_high = 7 - (count_hit+count_zero);
	int rank_low = 7 - count_hit;
	
	rank_high = rank_high > 6 ? 6 : rank_high;
	rank_low = rank_low > 6 ? 6 : rank_low;
	
    return new int[] { rank_high, rank_low };
}

기본적으로 낙서된 수, 당첨 번호 수 체크하는 부분은 같습니다.

로또 순위는 당첨 번호 수에 일정하게 매칭됩니다.

정해진 패턴이 있다는 것은 공식화 시킬 수 있습니다.

1위 -> 6개
2위 -> 5개
...
5위 -> 2개
6위(나머지) -> 1개 이하
7-(당첨 번호 수) = 순위

7 - 6 = 1위
7 - 5 = 2위
...
7 - 2 = 5위
7 - 1 = 6위
7 - 0 = 7위

 

 

 

⚡️테스트 케이스 처리속도: 0.01 ~ 0.02ms

반응형