ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [프로그래머스] 복서 정렬하기 #JAVA
    Algorithm Solving/Programmers 2021. 9. 7. 15:05

    [프로그래머스] 복서 정렬하기 #JAVA


    코드


    public class Solution  {
    
    	public static void main(String[] args) throws IOException{
    		
    		solution(new int[]{50,82,75,120}, new String[]{"NLWL","WNLL","LWNW","WWLN"});
    		solution(new int[]{145,92,86}, new String[]{"NLW","WNL","LWN"});
    		solution(new int[]{60,70,60}, new String[]{"NNN","NNN","NNN"});
    		
    	}
    	
    	 public static int[] solution(int[] weights, String[] head2head) {
            int[] answer = new int[weights.length];
            
            int[][] boxer = new int[weights.length][4];
            
            for (int i = 0; i < weights.length; i++) {
            	int weight = weights[i];
            	int cnt = 0;
            	int win = 0;
            	int winbigman = 0;
            	
            	for (int j = 0; j < weights.length; j++) {
    				char ch = head2head[i].charAt(j);
    				
    				if(ch != 'N') cnt++;
    				if(ch == 'W') {
    					win++;
    					if(weights[i] <weights[j]) {
    						winbigman++;
    					}
    				}
    				
    			}
            	
            	boxer[i][0] = i + 1 ; // 원본 인덱스 +1
            	boxer[i][1] = weights[i] ; // 몸무게
            	boxer[i][2] = cnt != 0 ? (int) ((1.0 *win/cnt) * 100000) : 0 ; // 승률
            	boxer[i][3] = winbigman; // 큰놈이랑 이긴 횟수
    			
    		}
    
            
            Arrays.sort(boxer, new Comparator<int[]>() {
    
    			@Override
    			public int compare(int[] o1, int[] o2) {
    				if(o1[2] != o2[2]) return o2[2]-o1[2]; //승률
    				if(o1[3] != o2[3]) return o2[3]-o1[3]; //큰놈이랑 싸움
    				if(o1[1] != o2[1]) return o2[1]-o1[1]; //몸무게
    				return o1[0] - o2[0];
    			}
    		});
            
            for (int i = 0; i < boxer.length; i++) {
    			answer[i] = (int)boxer[i][0]; //인덱스
    			
    		}
            return answer;
        }
    	
    }

     

     

    주의사항


     

    boxer[i][2] = cnt != 0 ? (int) ((1.0 *win/cnt) * 100000) : 0 ; // 승률

    여기서 큰수 100000을 곱하지 않으면 소숫점 자릿수가 int로 형변환 되면서 날라가는 문제가 생긴다.

     

     


    잘못된 코드나 내용이 있다면 댓글을 남겨주세요. 즉시 수정하도록 하겠습니다! :)

     

    댓글