[Coding test] 0405_no.4 (java)

2020-04-05

Coding test / 0405_no.4

문제설명

유출 x

풀이

package T0405;

import java.util.*;

//50min
public class t4 {
    public static String[][] solution(String[][] snapshots, String[][] transactions) {
        TreeMap<String, String> tran = new TreeMap<>();
        TreeMap<String, Integer> snap = new TreeMap<>();
        
        
        for(int i=0; i<snapshots.length; i++)
        	snap.put(snapshots[i][0], Integer.parseInt(snapshots[i][1]));
        
        
        for(int i=0; i<transactions.length; i++) {
        	if(tran.containsKey(transactions[i][0]))
        		continue;
        	else {
        		String s = "";
        		for(int j=1; j<transactions[i].length; j++)
        			s += transactions[i][j] + ",";
        		tran.put(transactions[i][0], s);
        	}
        }
        
       for(String key:tran.keySet()) {
    	   String re[] = tran.get(key).split(",");
    	   
    	   if(re[0].equals("SAVE")) {
    		   if(snap.containsKey(re[1]))
    			   snap.put(re[1], Integer.parseInt(re[2]) + snap.get(re[1]));
    		   else
    			   snap.put(re[1], Integer.parseInt(re[2]));
    	   }
    	   
    	   if(re[0].equals("WITHDRAW")) {
    		   if(snap.containsKey(re[1]))
    			   snap.put(re[1], snap.get(re[1]) - Integer.parseInt(re[2]));
    	   }
    	   
       }
       
       String real = "";
       for(String key:snap.keySet()) {
    	   System.out.println(key + " " + snap.get(key));
    	   real += key + "," + snap.get(key)+",";
       }
       
       String[][] answer = new String[snap.size()][2];
       String rs[] = real.split(",");
       
       int idx = 0;
       for(int i=0; i<answer.length; i++) {
    	   answer[i][0] = rs[idx++];
    	   answer[i][1] = rs[idx++];
       }
       
       return answer;
    }
	
	public static void main(String[] args) {
		String t[][] = {
				{"ACCOUNT1", "100"}, 
		                {"ACCOUNT2", "150"}
		};
		String s[][] = {
		                {"1", "SAVE", "ACCOUNT2", "100"},
		                {"2", "WITHDRAW", "ACCOUNT1", "50"}, 
		                {"1", "SAVE", "ACCOUNT2", "100"}, 
		                {"4", "SAVE", "ACCOUNT3", "500"}, 
		                {"3", "WITHDRAW", "ACCOUNT2", "30"}
		                };
		
		System.out.println(solution(t,s));
	}
}

후기 (50min)

쓸데 없는 곳에서 시간을 너무 많이 쏟았다…

save할 때, 새로 들어온 값이면 put(re[1], Integer.parseInt(re[2])) 해야하는데 엉뚱한 값을 넣어놔서 계속 null 로 뜬 것도 그렇고

키 값을 오름차순으로 정렬하기 위해서 HashMap(값의 정렬 X)을 쓰고 어버버 하다가 사전 순으로 정렬해준다는 TreeMap(키 값으로 정렬 O)을 사용해 쉽게 풀 수 있었다.

key value 가져오는 법, 매번 검색하지말고 이참에 좀 익혀두자!

    TreeMap<String, Integer> snap = new TreeMap<>();    

	for(String key:snap.keySet())
    	   System.out.println(key + " " + snap.get(key));