CT

프로세스

응디 2023. 10. 18. 17:30
import java.util.*;

class Solution {
    public int solution(int[] pri, int loca) {
        int answer = 0;
        int max = pri[0];
        int idx = 0;

        ArrayList<Integer> arr = new ArrayList<>();
        while (arr.size() != pri.length) {
        	// 현재 배열에서의 최댓값
            int realMax = Arrays.stream(pri).max().getAsInt();
            
            // 구해진 idx 부터 배열 끝까지 중에 최댓값
            for (int i = idx; i < pri.length; i++) {
                if (max < pri[i]) {
                    max = pri[i];
                    idx = i;
                }
            }
            
            // 만약 배열 최댓값이 max 보다 크다면 배열 앞에서 부터 다시 조회 해봐야함 따라서 
            // else 일시 idx 를 0으로 초기화 ( 처음부터 조회 )
            // max 가 크면 arr에 idx 추가 
            if (max >= realMax) {
                arr.add(idx);
                pri[idx] = 0;
                max = 0;
            }else{
                idx = 0;
            }
            
            // 만약 배열의 끝까지 조회해봤다면다시 처음부터 조회
            if (idx == pri.length - 1) {
                idx = 0;
            }


        }
        
        // 저장된 arr에서 주어진 location 위치에 있는 알파벳의 위치 구하기
        // char에서 대문자 A는 65부터 시작한다.
        // 따라서 굳이 문자로 변환할 필요 없이 (65 + arr)의 값이 (loca + 65) 와 값이 같으면
        // 그 값의 인덱스만 반환해 주면 된다. 하지만 배열 인덱스는 0부터 시작하기 때문에 + 1  
        for (int i = 0; i < arr.size(); i++) {
            int n = 65 + arr.get(i);
            if (n == (65 + loca)) {
                return i + 1;
            }

        }

        return answer;
    }
}

 

 

좋은 방법은 아닌듯 다음엔 queue를 이용해서 수정해보자

'CT' 카테고리의 다른 글

문자열 내 마음대로 정렬하기  (0) 2022.08.25
폰켓몬  (0) 2022.05.26
신규아이디 추천  (0) 2022.04.19
완주하지 못한 선수(해시)  (0) 2022.04.14