로또의 최고 순위와 최저 순위문제
2021 Dev-Matching: 웹 백엔드 개발자(상반기) LEVEL 1 문제이다.
기존의 로또 방식과는 조금 다른 규칙을 가지고 있지만 어느 정도의 틀은 유지하고 있는 것 같다. 하지만 lottos, win_nums의 두 가지 배열을 넘겨주어 내가 가지고 있는 lottos와 실제 우승 숫자인 win_nums와 비교하는 것에서 조금 다른 점은 lottos안에 있는 0이라는 숫자에는 다른 가능성을 심어준다는 것이 있다.
즉, 0이라는 숫자는 누군가에 의해 지워져서 상상에 의해 win_nums에 있는 숫자를 넣을 수도, 아니면 일부로 넣지 않을 수도 있다는 것이다. 만약 모두 지워져서 [0, 0, 0, 0, 0, 0]이라는 숫자가 lottos에 있다면 모든 수를 틀리게 넣어 상상해도 되고, 모든 수를 당첨된 숫자라고 여겨도 된다는 것이다.
이러한 문제는 문제안에 있는 점수 표기방법에 대해 짚고 넘어가야 한다.
순위당첨 내용
1 | 6개 번호가 모두 일치 |
2 | 5개 번호가 일치 |
3 | 4개 번호가 일치 |
4 | 3개 번호가 일치 |
5 | 2개 번호가 일치 |
6(낙첨) | 그 외 |
다음과 같이 1개 번호가 일치하거나 모두 일치하지 않을 경우에는 6등이라고 친다.
어떠한 방법으로 풀었는지 살펴보도록 하자
int zero = 0;
int count = 0;
for(int i = 0; i < 6; i++) {
if(lottos[i] == 0) {
zero++;
continue;
}
for(int j = 0; j < 6; j++) {
if(lottos[i] == win_nums[j]) {
count++;
break;
}
}
}
zero는 lottos안에 있는 0의 개수, count는 lottos와 win_nums를 비교했을 때에 일치하는 숫자의 개수를 의미한다.
이중 for문을 이용하여 lottos와 win_nums를 비교하고, 만약 lottos의 원소가 0일 경우에는 zero++를 하며 반복문을 다시 돌린다. 또한, 서로 일치하는 경우에는 count++을 한 후에 for문을 반복시킨다.
int[] answer = new int[2];
if(count == 0 || count == 1) answer[1] = 6;
else answer[1] = 7 - count;
if(zero == 6) answer[0] = 1;
else answer[0] = answer[1] - zero;
return answer;
count가 0이거나 또는 1일 경우에는 6등을 의미하기 때문에 if구문을 넣어주었으며, 그 외의 경우에는 7에서 빼주면 그것이 등수가 된다. count만 일치하는 경우(0은 win_nums와 어떤 숫자도 일치하지 않음)는 최저 등수를 의미한다.
그러면 그 등수에 zero개수를 빼면 어떻게 될까. lottos에 0이 하나라도 있었다면 win_nums에 있는 숫자 하나라도 더 넣어 등수를 하나 줄일 수 있을 것이다. 이에 따라 answer[1]값에 zero를 빼주면 된다. 이 역시도 zero가 6일 경우에는 answer[1] - zero가 0이 나올 수 있는 가능성을 대비해 if 구문을 넣어준다. 최저 등수에 zero포인트를 빼준 값은(0이 win_nums안의 원소를 모두 일치한다고 가정) 최고 등수를 의미한다.
풀이
import java.util.*;
class Solution {
public int[] solution(int[] lottos, int[] win_nums) {
int zero = 0;
int count = 0;
for(int i = 0; i < 6; i++) {
if(lottos[i] == 0) {
zero++;
continue;
}
for(int j = 0; j < 6; j++) {
if(lottos[i] == win_nums[j]) {
count++;
break;
}
}
}
int[] answer = new int[2];
if(count == 0 || count == 1) answer[1] = 6;
else answer[1] = 7 - count;
if(zero == 6) answer[0] = 1;
else answer[0] = answer[1] - zero;
return answer;
}
}
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스/JAVA] H-Index - 정렬 (1) | 2022.02.07 |
---|---|
[프로그래머스/JAVA] 숫자 문자열과 영단어 - 2021 카카오 채용연계형 인턴십 (0) | 2022.02.07 |
[프로그래머스/JAVA] 오픈채팅방 - 2019 KAKAO BLIND RECRUITMENT (0) | 2022.01.30 |
[프로그래머스/JAVA] 실패율 - 2019 KAKAO BLIND RECRUITMENT (2) | 2022.01.28 |
[프로그래머스/JAVA] 가장 먼 노드(DFS/BFS) (1) | 2022.01.22 |