hoon's bLog

[Java] 프로그래머스 로또의 최고 순위와 최저순위 자바 본문

코딩테스트/프로그래머스

[Java] 프로그래머스 로또의 최고 순위와 최저순위 자바

개발한기발자 2022. 7. 8. 19:23
반응형

문제 출처 : https://school.programmers.co.kr/learn/courses/30/lessons/77484

 

프로그래머스

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

programmers.co.kr


[나의 풀이]

public class Solution20 {
    public int[] solution(int[] lottos, int[] win_nums) {
        int[] answer = new int[2];
        int winCnt = 0; //당첨번호 개수 체크
        int _0cnt = 0;  //0개수 체크
        int sum = 0;
        for (int i=0; i<win_nums.length; i++) {
            if(lottos[i] == 0){
                _0cnt++;
            }
            for(int j=0; j<lottos.length ; j++) {
                if(win_nums[i] == lottos[j]){
                    winCnt++;
                }
            }
        }
        sum = winCnt + _0cnt;
        answer[0] = rankChk(sum);
        answer[1] = rankChk(winCnt);
        return answer;
    }

	//순위 계산을 위한 메서드를 따로 선언
    public int rankChk(int no) {
        switch (no){
            case 6: return 1;
            case 5: return 2;
            case 4: return 3;
            case 3: return 4;
            case 2: return 5;
            default: return 6;
        }
    }
}

[다른 사람의 풀이-1]

public class Solution{
	public int[] solution(int[] lottos, int[] winNums) {
        return LongStream.of(
                (lottos.length + 1) - Arrays.stream(lottos).filter(l -> Arrays.stream(winNums).anyMatch(w -> w == l) || l == 0).count(),
                (lottos.length + 1) - Arrays.stream(lottos).filter(l -> Arrays.stream(winNums).anyMatch(w -> w == l)).count()
        ).mapToInt(op -> (int) (op > 6 ? op - 1 : op))
         .toArray();
    }
}

[다른 사람의 풀이-2]

public int[] solution(int[] lottos, int[] win_nums) {
    Map<Integer, Boolean> map = new HashMap<Integer, Boolean>();
    int zeroCount = 0;

    for(int lotto : lottos) {
        if(lotto == 0) {
            zeroCount++;
            continue;
        }
        map.put(lotto, true);
    }


    int sameCount = 0;
    //map의 해당 key값이 존재하면 true return하며 당첨번호 변수 count up!
    for(int winNum : win_nums) {
        if(map.containsKey(winNum)) sameCount++;
    }
    
    //당첨 개수를 차감해서 순위 setting
    int maxRank = 7 - (sameCount + zeroCount);
    int minRank = 7 - sameCount;
    if(maxRank > 6) maxRank = 6;
    if(minRank > 6) minRank = 6;

    return new int[] {maxRank, minRank};
}

[정리]

- 배열과 반복문을 통해 데이터 처리하는 것이 관건

- Stream은 볼 때마다 놀랍지만, 성능은 역시 최악.... Stream은 그저 낭만 있는 소스 정도ㅎㅎㅎ

 

개인 피셜 난이도 : ★☆☆

소스 코딩만큼 어려운 마무리 멘트...

난이도가 그렇게 어렵지 않을 때는 난감쓰....

푸는 방식도 완전 새롭게 다른 것이 아니면 더더욱 난감쓰ㅋㅋㅋㅋㅋ

 

끝!

728x90
반응형