[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));