[Java] 로또의 최대 순위와 최저 순위 Lv1
로또의 최고 순위와 최저 순위
문제 프로그래머스 FAQ 내용을 보니 카카오나 기업의 문제들은 저작권이 있으니 풀이를
github나 개인블로그에 올리지 말라고 되어 있어서 링크로 대체합니다.
출처: Programmers
로또의 최고 순위와 최저 순위
문제의 이해
저번에 살짝 봤을 때는 어려워 보였는데 자세히 보니까 엄청나게 쉬운 문제였다. 다만 푸는 방법은 여러개가 있을 것 같았는데 나는 내가 생각한 가장 기본적인 방법, 2중 반복문으로 풀었다.
내가 생각한 풀이 방법
- 0개와 1개를 맞췄을 때는 모두 6등이지만 계산을 할 때는 0개인지 1개인지 판별해야 하기 때문에 최저 순위를 7로 변수에 저장
- lottos 배열과 win_nums를 비교해서 같은 번호가 있으면 7에서 -1씩 하고
- 만약 lottos배열에 0이 존재한다면 0만 따로 세는 cnt를 만들어 +1씩 저장해둠.
- 만약 0이 한개도 없다면 최저값을 7이므로 6으로 바꿔주고, 0이 한개도 없고 맞춘 숫자도 1개도 없다면 역시 7이므로 6으로 바꿔준다.
- 구한 값을 answer배열에 저장해서 출력
풀이
첫번째 풀이
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Solution {
public int[] solution(int[] lottos, int[] win_nums) {
int[] answer = new int[2];
int lottosRanking = 7; //6등은 1개와 0개 당첨이기 때문에 랭킹은 7부터 시작하도록 지정
int zeroCount = 0; //0의 갯수를 세는 변수
for(int i = 0; i < lottos.length; i++){
if(lottos[i] == 0 ){ //반복문을 돌다가 0을 발견하면 zeroCount를 증가시키고 continue
zeroCount++;
continue;
}
for(int j = 0; j < win_nums.length; j++){
if(lottos[i] == win_nums[j]){ //같은 숫자를 발견했을 시 lottosRanking을 -1시켜서 순위를 증가시킴
lottosRanking--;
}
}
}
//0이 아예 없어거나 0만 있을 경우는 lottosRanking이 7이기 때문에 삼항연산자로 6으로 조정해줌
answer[0] = lottosRanking - zeroCount > 6 ? 6 : lottosRanking - zeroCount ;
answer[1] = lottosRanking > 6 ? 6 : lottosRanking;
return answer;
}
}
뭔가 처음에 생각한대로 풀것은 맞는 것 같은데 코드의 가독성과 코드를 효율적으로 썼는가에 대해서는 아주 회의적이다. 특히 다른 분들의 코드를 봤을 때 내 코드가 너무 조악해보인다. 가독성과 효율성을 좀 생각하면서 작성하자. 특히 가독성이 제일 중요하다.
Leave a comment