[알고리즘문제풀기] 전국 대회 선발 고사

silver's avatar
May 13, 2025
[알고리즘문제풀기] 전국 대회 선발 고사

문제

내가 작성한 정답

특징
HashMap
LinkedHashMap
TreeMap
Hashtable (참고)
목적
가장 빠른 키-값 매핑
삽입/접근 순서 유지
키 기준 자동 정렬
동기화된 키-값 매핑 (레거시)
내부 구현
해시 테이블
해시 테이블 + 이중 연결 리스트
레드-블랙 트리
해시 테이블
순서
보장 안됨
삽입 순서 보장 (또는 접근 순서)
키의 자연스러운 순서로 정렬
보장 안됨
null 키
허용 (1개)
허용 (1개)
불허용
불허용
null 값
허용
허용
허용
불허용
스레드 세이프티
아님 (비동기)
아님 (비동기)
아님 (비동기)
맞음 (동기화됨)
기본 성능
삽입/검색/삭제 O(1) 평균
삽입/검색/삭제 O(1) 평균
삽입/검색/삭제 O(logN)
삽입/검색/삭제 O(1) 평균 (느린 동기화)
주요 사용처
일반적인 빠른 키-값 조회
캐시(LRU), 순서 보존 매핑
정렬된 데이터, 범위 검색
레거시 또는 특별한 동기화 필요 시

1. Map이용

import java.util.*; class Solution { public int solution(int[] rank, boolean[] attendance) { int answer = 0; Map<Integer,Integer> map = new HashMap<>(); List<Integer> list = new ArrayList<>(); for(int i=0; i<rank.length; i++){ if(attendance[i]) { map.put(rank[i], i); list.add(rank[i]); } Collections.sort(list); } return 10000*map.get(list.get(0))+100*map.get(list.get(1))+map.get(list.get(2)); } }

2. 클래스 생성

import java.util.*; class Student { int num; int pla; public Student(int i, int p) { this.num = i; this.pla = p; } } class Solution { public int solution(int[] rank, boolean[] attendance) { int answer = 0; ArrayList<Student> list = new ArrayList(); for(int i=0; i<attendance.length; i++){ if(attendance[i]) list.add(new Student(i,rank[i])); } Collections.sort(list,(s1,s2)->s1.pla-s2.pla); return list.get(0).num*10000+list.get(1).num*100+list.get(2).num; } }

1. Map (인터페이스)

Map은 자바 컬렉션 프레임워크의 핵심 인터페이스 중 하나입니다.
  • 역할키(Key)와 값(Value)의 쌍으로 데이터를 저장하고 관리하는 자료구조의 명세(Specification)를 정의합니다.
  • 특징:
    • 키는 중복될 수 없습니다. 각 키는 정확히 하나의 값에만 매핑됩니다.
    • 값(Value)은 중복될 수 있습니다.
    • 대표적인 구현체로는 HashMapTreeMapLinkedHashMap 등이 있습니다.
  • 비유Map은 '사전' 또는 '전화번호부' 와 같습니다. 단어(키)와 그 의미(값), 또는 이름(키)과 전화번호(값)를 짝지어 관리하죠.

2. Map.Entry (정적 중첩 인터페이스)

Map.Entry는 Map 인터페이스 내부에 정의된 **정적 중첩 인터페이스(Static Nested Interface)**입니다.
  • 역할Map에 저장되는 하나의 키-값 쌍(Key-Value Pair)을 표현하는 인터페이스입니다.
  • 특징:
    • getKey(): 이 엔트리의 키를 반환합니다.
    • getValue(): 이 엔트리의 값을 반환합니다.
    • setValue(V value): 이 엔트리의 값을 변경합니다.
    • Map은 여러 개의 Key-Value 쌍을 가질 수 있는데, Map.Entry는 그 각각의 개별 쌍 하나하나를 나타냅니다.
  • 비유Map.Entry는 사전에서 '단어: 의미' 한 줄, 또는 전화번호부에서 '이름: 전화번호' 한 줄을 구성하는 개별 항목 하나하나라고 생각할 수 있습니다.

주요 차이점 요약

구분
Map
Map.Entry
역할
키-값 쌍들의 모음 (Collection)
하나의 키-값 쌍 (Pair)
단위
전체 사전/전화번호부
사전/전화번호부의 개별 항목 (한 줄)
메서드 예시
put()get()remove()keySet()values()entrySet()
getKey()getValue()setValue()
위치
컬렉션 프레임워크의 최상위 인터페이스
Map 인터페이스 안에 정의된 중첩 인터페이스
객체 생성
new HashMap<>() 등으로 구현체 생성
Map.entrySet()를 통해 Map에서 얻어옴

Map.Entry가 왜 필요한가? (예시)

Map은 키를 주면 값을 얻을 수 있지만, 때로는 모든 키-값 쌍을 동시에 탐색하거나, 값(Value)을 기준으로 정렬하고 싶을 때가 있습니다. 이럴 때 Map.Entry가 사용됩니다.
가장 흔하게 사용되는 경우는 Map의 entrySet() 메서드를 호출할 때입니다.
Share article

silver