inblog logo
|
silver
    알고리즘문제풀기

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

    silver's avatar
    silver
    May 13, 2025
    [알고리즘문제풀기] 전국 대회 선발 고사
    Contents
    문제내가 작성한 정답

    문제

    school.programmers.co.kr
    https://school.programmers.co.kr/learn/courses/30/lessons/181851

    내가 작성한 정답

    특징
    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)은 중복될 수 있습니다.
      • 대표적인 구현체로는 HashMap, TreeMap, LinkedHashMap 등이 있습니다.
    • 비유: 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

    RSS·Powered by Inblog