import java.util.*;
class Solution {
public int solution(int[] nums) {
HashSet<Integer> set = new HashSet<>();
int n = nums.length / 2;
for(int num : nums) {
set.add(num); // 중복 제거되며 추가됨
}
// 중복 제거하고나서 set의 크기가 nums.length / 2보다 크면 nums.length / 2를 리턴 작으면 set의 size를 리턴
if(set.size() > n) {
return n;
} else {
return set.size();
}
}
}
HashSet 자료구조를 이용하여 입력받은 데이터를 HashSet에 추가한뒤 크기를 비교하면 손쉽게 해결할 수 있는 문제다.
import java.util.*;
class Solution {
public String solution(String[] participant, String[] completion) {
String answer = "";
HashMap<String, Integer> map = new HashMap<>();
for(String p : participant) {
map.put(p, map.getOrDefault(p, 0) + 1);
}
for(String p : completion) {
map.put(p, map.get(p) - 1);
}
for(String p : participant) {
if(map.get(p) > 0) {
answer += p;
map.put(p, map.get(p) - 1);
}
}
return answer;
}
}
HashMap 자료구조를 이용해서 participant에 있는 명단 데이터를 해시맵에 추가시킨다. key값이 있는 경우에는 그값에서 +1해서 put하게 한다. 그런 다음 completion에 있는 데이터를 해시맵에서 -1해준다. 그런다음 participant 명단을 key값으로 해서 해시맵에 값이 0보다 큰 경우 정답값에 key값을 추가시켜주고 그다음 해당 key값의 value를 -1해준다. (중복 없애기 위함)
import java.util.*;
class Solution {
public boolean solution(String[] phone_book) {
Arrays.sort(phone_book);
// 앞 번호가 뒷 번호의 접두어인지 확인
for (int i = 0; i < phone_book.length - 1; i++) {
if(phone_book[i + 1].startsWith(phone_book[i])) {
return false;
}
}
return true;
}
}
for문을 돌면서 startWith 메소드를 이용해서 뒷번호가 앞번호로 시작하는지 여부를 확인하여 시작한다면 false를 리턴하면 된다.
import java.util.*;
class Solution {
public int solution(String[][] clothes) {
int answer = 1;
HashMap<String, Integer> map = new HashMap<>();
for (String[] c : clothes) {
map.put(c[1], map.getOrDefault(c[1], 0) + 1); // 종류별로 구분
}
Iterator<Integer> it = map.values().iterator(); // 반복자 생성
while(it.hasNext()) {
answer *= it.next().intValue() + 1; // 입지 않는 경우를 고려하기 위해 +1 해줌
}
return answer - 1; // 어떤 종류도 입지 않은 경우가 1가지 있기 때문에 -1 해줌
}
}
import java.util.*;
class Solution {
public int[] solution(String[] genres, int[] plays) {
ArrayList<Integer> answer = new ArrayList<>();
HashMap<String, Integer> gmap = new HashMap<>(); // 장르별 총 개수
HashMap<String, HashMap<Integer, Integer>> mmap = new HashMap<>(); // 장르에 속하는 노래와 재생횟수
for(int i = 0; i < plays.length; i++) {
if(!gmap.containsKey(genres[i])) { // 장르가 해시맵에 없다면
HashMap<Integer, Integer> map = new HashMap<>();
map.put(i, plays[i]); // 고유번호, 재생횟수 저장
mmap.put(genres[i], map);
gmap.put(genres[i], plays[i]);
} else {
mmap.get(genres[i]).put(i, plays[i]);
gmap.put(genres[i], gmap.get(genres[i]) + plays[i]);
}
}
List<String> keySet = new ArrayList(gmap.keySet());
Collections.sort(keySet, (s1, s2) -> gmap.get(s2) - (gmap.get(s1))); // 내림차순 정렬
for(String key : keySet) {
HashMap<Integer, Integer> map = mmap.get(key);
List<Integer> genre_key = new ArrayList(map.keySet());
Collections.sort(genre_key, (s1, s2) -> map.get(s2) - (map.get(s1))); // 내림차순 정렬
answer.add(genre_key.get(0));
if(genre_key.size() > 1)
answer.add(genre_key.get(1));
}
return answer.stream().mapToInt(i -> i).toArray();
}
}