끄적끄적 코딩일지

[Programmers]모의고사(난이도:★★★★) 본문

알고리즘

[Programmers]모의고사(난이도:★★★★)

BaekGyuHyeon 2022. 5. 16. 19:55

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

 

코딩테스트 연습 - 모의고사

수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다. 1번 수포자가 찍는

programmers.co.kr

// 배열을 사용해서 풀수도 있었으나 페턴을 분석하는 알고리즘을 시도해보고 싶었음
class Solution {
    int count = 1;
    int tmp = 0;
    public int[] solution(int[] answers) {
        int[] scores = new int[]{ getScore(answers,1),getScore(answers,2),getScore(answers,3)};
        return makeAnswerArry(scores);
    }
    // 정답 배열 만들기
    public int[] makeAnswerArry(int[] arry){
        int anscount = 0;
        int heighScore = 0;
        for(int i : arry){
            if(heighScore < i){
                heighScore = i;
                anscount = 1;
            }else if(heighScore == i)
                anscount++;
        }
        int[] ans = new int[anscount];
        int idx = 0;
        for(int i = 0; i < arry.length;i++){
            if(arry[i] == heighScore){
                ans[idx] = i+1;
                idx++;
            }
            if(idx == anscount)
                break;
        }
        return ans;
       
        
    }
    // 점수 얻기
    public int getScore(int[] answers,int num){
        int nextAns = num;
        int score = 0;
        for(int i : answers){
            if (i == nextAns)
                score++;
            if(num == 1)
                nextAns = nextPatternA(nextAns);
            else if(num == 2)
                nextAns = nextPatternB(nextAns);
            else
                nextAns = nextPatternC(nextAns);
        }
        return score;
        
    }
    // 페턴 분석
     public int nextPatternA(int num){
	        return num == 5 ? 1 : ++num;
	    }
	    public int nextPatternB(int num){
	        if (num == 2){
	            if(count == 2)
	                count++;
	            return count;
	        }else{
	            count++;
	            if(count == 6)
	                count = 1;
	            return 2;
	        }
	    }
	    public int nextPatternC(int num){
	        if(num != tmp){
	            tmp = num;
	            return num;
	        }else{
	        	if(num == 3) {
	        		num = 1;
	        	}else {
	        		num++;
	        		if(num == 3)
	        			num = 4;
	    	        if(num == 6)
	    	            num = 3;
	        	}
	            return num;
	        }
	    
	    }
}