Leetcode Java Invalid Transactions
업데이트:
문제
코드
class Solution {
public List<String> invalidTransactions(String[] transactions) {
Map<String, List<String[]>> map = new HashMap<>();
for (String transaction : transactions) {
String[] split = transaction.split(",");
map.putIfAbsent(split[0], new ArrayList<>());
map.get(split[0]).add(split);
}
List<String> result = new ArrayList<>();
for (String transaction : transactions) {
String[] split = transaction.split(",");
if (Integer.parseInt(split[2]) > 1000) {
result.add(transaction);
} else {
for (String[] curr : map.get(split[0])) {
if (Math.abs(Integer.parseInt(split[1]) - Integer.parseInt(curr[1])) <= 60 && !split[3].equals(curr[3])) {
result.add(transaction);
break;
}
}
}
}
return result;
}
}
결과
설명
- 이름, 시간, 금액, 도시의 순서의 값을 쉼표(“,”)단위로 구분한 값들이 저장된 transactions 내 아래의 조건을 하나라도 만족하는 유효하지 않는 거래들을 찾는 문제이다.
- 금액이 $1000를 초과하는 경우.
- 60분 이내에 같은 이름의 다른 도시에서 거래가 발생한 경우.
- 문제 풀이에 필요한 변수를 정의한다.
- map은 transactions의 각 값을 이름 별 분리하여 저장한 변수로, transactions의 각 값의 이름에 대한 분리된 배열을 넣어준다.
- result는 유효하지 않는 거래를 저장할 변수로, ArrayList로 초기화한다.
- transactions를 순차적으로 transaction에 넣어 아래를 반복한다.
- split에 transaction를 쉼표(“,”) 단위로 분리하여 넣어준다.
- 금액인 split[2]가 1000을 초과하는 경우, result에 transction을 넣어준다.
- 위의 경우가 아니라면 map의 split[0]인 도시에 해당하는 값을 꺼내 curr에 넣은 후 모든 값을 아래를 반복한다.
- $split[1] - curr[1]$의 값이 60 이하인 다른 거래가 존재하면서 split[3]와 curr[3]의 값이 다른 도시인 경우, result에 transction을 넣고 반복을 중지한다.
- 반복이 완료되면 유효하지 않은 거래가 저장된 result를 주어진 문제의 결과로 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기