목록코딩테스트 풀이 (28)
Simple&Natural
import java.util.*; class Solution { public int solution(String[][] clothes) { int answer = 1; HashMap hashMap = new HashMap(); for (String[] cloth : clothes) { hashMap.put(cloth[1], hashMap.getOrDefault(cloth[1], 0) + 1); } for (Integer count : hashMap.values()) { answer *= count+1; } answer -= 1; return answer; } }
배열의 전체 크기가 1000 이하로 작기 때문에 시간복잡도를 O(n^2)으로 잡아도 매우 빠르게 통과가 가능했다. import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.stream.Collectors; class Solution { public int solution(int[] citations) { int answer = 0; List list = Arrays.stream(citations).boxed().collect(Collectors.toList()); // 각 논문을 조회수 순으로 정렬 Collections.sort(list, Collections.reverseOrder()); /..
Java 풀이 한 가지 개선할 점이 있다면, 내 코드에서는 set을 만들어 0 으로만 이루어져 있는지 확인하는 방법을 썼는데 0 으로만 이루어진 수를 체크할 때 단순히 첫 번째 원소가 0 인지만 확인하면 된다. 또한 우선순위 큐를 사용하는 방법도 있는데 로직상으로는 comparator와 유사하다. 내 코드들을 보면 메소드 내 임시 변수 사용량이 많아 불필요한 메모리 사용이 많아 보이는 것 같다. 일단 제한된 시간 안에 테스트를 통과하는 것이 목표인 만큼 효율성이나 깔끔한 코드보다는 직관적으로 떠오르는 풀이를 통해 정확도를 우선적으로 고려하고 있고 나중에 코드리뷰를 하며 개선 예정이다. import java.util.*; class Solution { public String solution(int[] n..
아무 생각없이 시간복잡도 O(N^2)으로 짰다가 효율성에서 실패. O(N)으로 개선하여 성공했다. 첫 번째 원소를 기준으로 나눈 두 배열의 초기 합을 각각 구한 뒤 구분선을 한 칸씩 옮겨주면서 한 쪽은 초기값에서 숫자를 빼고, 한 쪽은 초기값에 숫자를 더해주면서 그 둘의 절댓값의 차이를 계속 확인해주면 된다. 개선 전 import java.util.*; class Solution { public int solution(int[] A) { int answer = -1; int n = A.length; for (int i=1; i