[Java] 기초 - List, Map 실습문제 모음집

이지연·2025년 12월 12일

Java 참조자료형 중 List, Map을 연습하기 위한 기본 예제 정리


1. List 관련 실습

프로그래머스 - n의 배수 고르기

문제 : URL

  • List.add()를 이용해 조건에 맞는 값만 추가.
  • 기본형 배열 → 래퍼형 List로 다뤄야 함.
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의 선언, 추가, 출력 구조를 이해하기 좋음.


2. Map 관련 실습

프로그래머스 - 완주하지 못한 선수

문제 : URL

  • Map으로 이름별 등장 횟수를 관리.
  • 한 번 등장할 때마다 +1 / 완주 명단에서 -1
  • 값이 0이 되면 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

  • 책 이름을 key, 판매 수를 value로 저장.
  • 가장 큰 value 구하기 → 그 value를 가진 key만 모아 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. 정렬 후 가장 첫 번째 책 출력

ListMap을 함께 활용하는 복합 예제이자,
Collections.sort()keySet() 활용 패턴을 익히기에 좋음.

profile
Eazy하게

1개의 댓글

comment-user-thumbnail
2025년 12월 14일

완주를 못했다니 정말 아쉽네요…
다음에는 꼭 완주하시길 바라겠습니다

답글 달기