Java 참조자료형 중 List, Map을 연습하기 위한 기본 예제 정리
문제 : URL
List의 .add()를 이용해 조건에 맞는 값만 추가.import java.util.*;
class Solution {
public List<Integer> solution(int n, int[] numList) {
List<Integer> result = new ArrayList<>();
for (int num : numList) {
if (num % n == 0) {
result.add(num);
}
}
return result;
}
}
List의 선언, 추가, 출력 구조를 이해하기 좋음.
문제 : URL
Map으로 이름별 등장 횟수를 관리. remove()로 제거.import java.io.*;
import java.util.*;
class Solution {
public String solution(String[] participant, String[] completion) {
Map<String, Integer> my_map = new HashMap<>();
String answer = "";
for (String a : participant) {
if (my_map.containsKey(a)) {
my_map.put(a, my_map.get(a) + 1);
} else {
my_map.put(a, 1);
}
}
for (String a : completion) {
if (my_map.containsKey(a)) {
if (my_map.get(a) == 1) {
my_map.remove(a);
} else {
my_map.put(a, my_map.get(a) - 1);
}
}
}
for (String a : my_map.keySet()) {
answer = a; // 완주하지 못한 1명 남음
}
return answer;
}
}
→ HashMap의 핵심 메서드인 put(), get(), remove(), keySet()을 다루기 좋은 예제임.
문제 : URL
Map<String, Integer>로 옷의 종류별 개수를 세기.(종류 수 + 1)을 곱해 조합의 경우의 수 계산.1을 빼서 “모두 안 입는 경우” 제외.import java.io.*;
import java.util.*;
class Solution {
public int solution(String[][] clothes) {
Map<String, Integer> my_map = new HashMap<>();
for (int i = 0; i < clothes.length; i++) {
if (!my_map.containsKey(clothes[i][1])) {
my_map.put(clothes[i][1], 1);
} else {
my_map.put(clothes[i][1], my_map.get(clothes[i][1]) + 1);
}
}
int answer = 1;
for (String a : my_map.keySet()) {
answer *= (my_map.get(a) + 1);
}
answer -= 1; // 아무것도 안 입는 경우 제거
return answer;
}
}
→ Map을 이용한 조합 계산 로직을 이해하기 좋은 예제임.
문제 : URL
List에 추가. Collections.sort()로 사전순 정렬 후 첫번째 값 출력.import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
Map<String, Integer> my_map = new HashMap<>();
for (int i = 0; i < n; i++) {
String name = br.readLine();
if (!my_map.containsKey(name)) {
my_map.put(name, 1);
} else {
my_map.put(name, my_map.get(name) + 1);
}
}
int max = Integer.MIN_VALUE;
String max_book_name = "";
List<String> my_list = new ArrayList<>();
for (String a : my_map.keySet()) {
if (max < my_map.get(a)) {
max = my_map.get(a);
}
}
for (String a : my_map.keySet()) {
if (my_map.get(a) == max) {
my_list.add(a);
}
}
Collections.sort(my_list);
System.out.println(my_list.get(0));
}
}
로직 정리
1. 입력으로 책 이름 n개 받음
2. Map에 넣으면서 등장 횟수 count
3. 최댓값 찾기
4. 값이 최댓값인 key(책 이름)들만 List에 저장
5. 정렬 후 가장 첫 번째 책 출력
→ List와 Map을 함께 활용하는 복합 예제이자,
Collections.sort()와 keySet() 활용 패턴을 익히기에 좋음.
완주를 못했다니 정말 아쉽네요…
다음에는 꼭 완주하시길 바라겠습니다