본문 바로가기
코딩 테스트

프로그래머스 - 다단계 칫솔 판매 자바 java

by 주용사 2023. 1. 9.
728x90

10번부터 시간초과로 고생한 문제. 밑에 함수를 사용해서 index를 가져왔는데 시간초과 계속발생.

hashmap으로 만들어서 서치하는게 훨씬빠른가보다..

 public static int searchIndex(String[] enroll, String target)
	    {
	        int index = -1;
	        
	        for(int ii = 0; ii < enroll.length ; ii++)
	        {
	            if(target.equals(enroll[ii]))
	                index = ii;
	        }
	    
	        return index;
	    }

정답소스코드

import java.util.*;

class Solution {
	public static int[] solution(String[] enroll, String[] referral, String[] seller, int[] amount) {
	        int[] answer = new int[enroll.length];
	       
	        HashMap<String, Integer> map_index = new HashMap<>();
	        for(int ii = 0 ; ii < enroll.length ; ii++)
	        	map_index.put(enroll[ii], ii);
	        
	        for(int ii = 0 ; ii < seller.length ; ii++)
	        {
	            int value = amount[ii]*100;
	            
	            String temp = seller[ii];
	           
	            while(true)
	            {
	            	int mine = 0;
	            	int index = map_index.get(temp);
	            	if(index == -1)
		                break;
		            String parent = referral[index];
		            temp = parent;
		                                  
	                mine = value - (value / 10);
	                value = value/10 ;
	                
	                if(index != -1)
	                    answer[index]+=mine;
	                
                    if(value == 0) /* 이것도 핵심. 나눠줄돈이 없을때 break */
                    	break;
                    
	                if(parent.equals("-"))
	                	break;
	            }
	        }
	    
	        
	        return answer;
	    }
}

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

728x90