๐Ÿ“š[Java] ์ปฌ๋ ‰์…˜, ์ตœ๋นˆ๊ฐ’ ๊ตฌํ•˜๊ธฐ

ํ…ํ…ยท2025๋…„ 4์›” 11์ผ

์ปฌ๋ ‰์…˜ ํ”„๋ ˆ์ž„์›Œํฌ(collections framework)


  • ์ปฌ๋ ‰์…˜(collection)
    • ์—ฌ๋Ÿฌ ๊ฐ์ฒด(๋ฐ์ดํ„ฐ)๋ฅผ ๋ชจ์•„ ๋†“์€ ๊ฒƒ
  • ํ”„๋ ˆ์ž„์›Œํฌ(framework)
    • ํ‘œ์ค€ํ™”, ์ •ํ˜•ํ™”๋œ ์ฒด๊ณ„์ ์ธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹ == ํ‹€ ์ž‘์—…
  • ์ปฌ๋ ‰์…˜ ํ”„๋ ˆ์ž„์›Œํฌ
    • ์ปฌ๋ ‰์…˜(๋‹ค์ˆ˜์˜ ๊ฐ์ฒด)์„ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•œ ํ‘œ์ค€ํ™”๋œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹
    • ์ปฌ๋ ‰์…˜์„ ์‰ฝ๊ณ  ํŽธ๋ฆฌํ•˜๊ฒŒ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋Š” ๋‹ค์–‘ํ•œ ํด๋ž˜์Šค ์ œ๊ณต
    • java.util ํŒจํ‚ค์ง€์— ํฌํ•จ, JDK 1.2๋ถ€ํ„ฐ ์ œ๊ณต

Collection ์ธํ„ฐํŽ˜์ด์Šค์˜ ๋ฉ”์„œ๋“œ

๋ฉ”์„œ๋“œ์„ค๋ช…
boolean add(Object o)
boolean addAll(Collection c)
์ง€์ •๋œ ๊ฐ์ฒด(o) ๋˜๋Š” Collection(c) ์˜ ๊ฐ์ฒด๋“ค์„ Collection์— ์ถ”๊ฐ€ํ•œ๋‹ค.
void clear()Collection์˜ ๋ชจ๋“  ๊ฐ์ฒด๋ฅผ ์‚ญ์ œํ•œ๋‹ค.
boolean contains(Object o)
boolean containsAll(Collection c)
์ง€์ •๋œ ๊ฐ์ฒด ๋˜๋Š” Collection์˜ ๊ฐ์ฒด๋“ค์ด Collection์— ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.
boolean isEmpty()Colleciton์ด ๋น„์–ด์žˆ๋Š”์ง€ ํ™•์ธ
Iterator iterator()Collection์˜ Iterator๋ฅผ ์–ป์–ด์„œ ๋ฐ˜ํ™˜
boolean remove(Object o)
boolean removeAll(Collection c)
์ง€์ •๋œ ๊ฐ์ฒด ๋˜๋Š” Collection์— ํฌํ•จ๋œ ๊ฐ์ฒด๋“ค์„ ์‚ญ์ œ
boolean retainAll(Collection c)์ง€์ •๋œ Collection์— ํฌํ•จ๋œ ๊ฐ์ฒด๋งŒ์„ ๋‚จ๊ธฐ๊ณ  ๋‹ค๋ฅธ ๊ฐ์ฒด๋“ค์€ Collection ์—์„œ ์‚ญ์ œํ•œ๋‹ค. ์ด ์ž‘์—…์œผ๋กœ Collection์— ๋ณ€ํ™”๊ฐ€ ์žˆ์œผ๋ฉด true, ์•„๋‹ˆ๋ฉด false๋ฅผ ๋ฐ˜ํ™˜
int size()Collection์— ์ €์žฅ๋œ ๊ฐ์ฒด์˜ ๊ฐœ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜
Object[] toArray()Collection์— ์ €์žฅ๋œ ๊ฐ์ฒด๋ฅผ ๊ฐ์ฒด๋ฐฐ์—ด(Object[])๋กœ ๋ฐ˜ํ™˜
Object[] toArray(Object[] a)์ง€์ •๋œ ๋ฐฐ์—ด์— Collection์˜ ๊ฐ์ฒด๋ฅผ ์ €์žฅํ•ด์„œ ๋ฐ˜ํ™˜

์ปฌ๋ ‰์…˜ ํ”„๋ ˆ์ž„์›Œํฌ์˜ ํ•ต์‹ฌ ์ธํ„ฐํŽ˜์ด์Šค

  1. List
    • ์ˆœ์„œ๊ฐ€ ์žˆ๋Š” ๋ฐ์ดํ„ฐ์˜ ์ง‘ํ•ฉ
    • ๋ฐ์ดํ„ฐ์˜ ์ค‘๋ณต์„ ํ—ˆ์šฉํ•œ๋‹ค.
    • ex) ๋Œ€๊ธฐ์ž ๋ช…๋‹จ
    • ๊ตฌํ˜„ ํด๋ž˜์Šค : ArrayList, LinkedList, Stack, Vector ๋“ฑ
๋ฉ”์„œ๋“œ์„ค๋ช…
void add(int index, Object element)
boolean addAll(int index, Collection c)
์ง€์ •๋ˆ ์œ„์น˜์— ์žˆ๋Š” ๊ฐ์ฒด ๋˜๋Š” ์ปฌ๋ ‰์…˜์— ํฌํ•จ๋œ ๊ฐ์ฒด๋“ค์„ ์ถ”๊ฐ€ํ•œ๋‹ค.
Object get(int index)์ง€์ •๋œ ์œ„์น˜์— ์žˆ๋Š” ๊ฐ์ฒด ๋ฐ˜ํ™˜ (์™ผ>์˜ค)
int indexOf(Object O)์ง€์ •๋œ ๊ฐ์ฒด์˜ ์œ„์น˜๋ฅผ ๋ฐ˜ํ™˜ (์˜ค>์™ผ)
int lastindexOf(Object o)์ง€์ •๋œ ๊ฐ์ฒด
ListIteratior listIterator()
ListIterator listIterator(int index)
List์˜ ๊ฐ์ฒด์— ์ ‘๊ทผํ• ์ˆ˜ ์žˆ๋Š” ListIterator๋ฅผ ๋ฐ˜ํ™˜
Object remove(int index)์ง€์ •๋œ ์œ„์น˜์— ์žˆ๋Š” ๊ฐ์ฒด๋ฅผ ์‚ญ์ œํ•˜๊ณ  ์‚ญ์ œ๋œ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜
Object set(int index, Object element)์ง€์ •๋œ ์œ„์น˜์— ๊ฐ์ฒด๋ฅผ ์ €์žฅ
void sort(Comparator c)์ง€์ •๋œ ๋น„๊ต์ž๋กœ List๋ฅผ ์ •๋ ฌ
List subList(int fromIndex, int toIndex)์ง€์ •๋œ ๋ฒ”์œ„์— ์žˆ๋Š” ๊ฐ์ฒด ๋ฐ˜ํ™˜

  1. Set
    • ์ˆœ์„œ๋ฅผ ์œ ์ง€ํ•˜์ง€ ์•Š๋Š” ๋ฐ์ดํ„ฐ์˜ ์ง‘ํ•ฉ
    • ๋ฐ์ดํ„ฐ์˜ ์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.
    • ex) ์–‘์˜ ์ •์ˆ˜์ง‘ํ•ฉ, ์†Œ์ˆ˜์˜ ์ง‘ํ•ฉ
    • ๊ตฌํ˜„ํด๋ž˜์Šค : HashSet, TreeSet

      Set ์ธํ„ฐํŽ˜์ด์Šค์˜ ๋ฉ”์„œ๋“œ - Collection ์ธํ„ฐํŽ˜์ด์Šค์™€ ๋™์ผ


  1. Map
    • Key-Value ์˜ ์Œ(pair)์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฐ์ดํ„ฐ์˜ ์ง‘ํ•ฉ
    • ์ˆœ์„œ๋Š” ์œ ์ง€๋˜์ง€ ์•Š๋Š”๋‹ค.
    • ํ‚ค๋Š” ์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๊ณ  ๊ฐ’์€ ์ค‘๋ณต์„ ํ—ˆ์šฉํ•œ๋‹ค.
    • ex) ์šฐํŽธ๋ฒˆํ˜ธ, ์ง€์—ญ๋ฒˆํ˜ธ(์ „ํ™”๋ฒˆํ˜ธ)
๋ฉ”์„œ๋“œ์„ค๋ช…
void clear()Map์˜ ๋ชจ๋“  ๊ฐ์ฒด๋ฅผ ์‚ญ์ œ
boolean isEmpty()Map์ด ๋น„์–ด์žˆ๋Š”์ง€ ํ™•์ธ์ธ
boolean containsKey(Object key)์ง€์ •๋œ key ๊ฐ์ฒด์™€ ์ผ์น˜ํ•˜๋Š” Map์˜ key ๊ฐ์ฒด๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธ
boolean containsValue(Object value)์ง€์ •๋œ value ๊ฐ์ฒด์™€ ์ผ์น˜ํ•˜๋Š” map์˜ value ๊ฐ์ฒด๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธ
Object get(Object key)์ง€์ •ํ•œ key ๊ฐ์ฒด์— ๋Œ€์‘ํ•˜๋Š” value ๊ฐ์ฒด๋ฅผ ์ฐพ์•„์„œ ๋ฐ˜ํ™˜
Object put(Object Key, Object value)Map์— value ๊ฐ์ฒด๋ฅผ key ๊ฐ์ฒด์— ์—ฐ๊ฒฐ(mapping)ํ•˜์—ฌ ์ €์žฅ
void putAll(Map t)์ง€์ •๋œ Map์˜ ๋ชจ๋“  key-value ์Œ์„ ์ถ”๊ฐ€
Object remove(Object key)์ง€์ •ํ•œ key ๊ฐ์ฒด์™€ ์ผ์น˜ํ•˜๋Š” key-value๊ฐ์ฒด๋ฅผ ์‚ญ์ œ
Set entrySet()Map์— ์ €์žฅ๋˜์–ด ์žˆ๋Š” key-value ์Œ์„ Map.Entryํƒ€์ž…์˜ ๊ฐ์ฒด๋กœ ์ €์žฅํ•œ Set์œผ๋กœ ๋ฐ˜ํ™˜
Set keySet()Map์— ์ €์žฅ๋œ ๋ชจ๋“  Key ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜
Collection valuse()Map์— ์ €์žฅ๋œ ๋ชจ๋“  value ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜

์ตœ๋นˆ๊ฐ’ ๊ตฌํ•˜๊ธฐ

๋ฌธ์ œ ์„ค๋ช…
์ตœ๋นˆ๊ฐ’์€ ์ฃผ์–ด์ง„ ๊ฐ’ ์ค‘์—์„œ ๊ฐ€์žฅ ์ž์ฃผ ๋‚˜์˜ค๋Š” ๊ฐ’์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ •์ˆ˜ ๋ฐฐ์—ด array๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, ์ตœ๋นˆ๊ฐ’์„ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด๋ณด์„ธ์š”. ์ตœ๋นˆ๊ฐ’์ด ์—ฌ๋Ÿฌ ๊ฐœ๋ฉด -1์„ return ํ•ฉ๋‹ˆ๋‹ค.


์ œํ•œ์‚ฌํ•ญ
0 < array์˜ ๊ธธ์ด < 100
0 โ‰ค array์˜ ์›์†Œ < 1000


์ž…์ถœ๋ ฅ ์˜ˆ #1
[1, 2, 3, 3, 3, 4]์—์„œ 1์€ 1๊ฐœ 2๋Š” 1๊ฐœ 3์€ 3๊ฐœ 4๋Š” 1๊ฐœ๋กœ ์ตœ๋นˆ๊ฐ’์€ 3์ž…๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ #2
[1, 1, 2, 2]์—์„œ 1์€ 2๊ฐœ 2๋Š” 2๊ฐœ๋กœ ์ตœ๋นˆ๊ฐ’์ด 1, 2์ž…๋‹ˆ๋‹ค. ์ตœ๋นˆ๊ฐ’์ด ์—ฌ๋Ÿฌ ๊ฐœ์ด๋ฏ€๋กœ -1์„ return ํ•ฉ๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ #3
[1]์—๋Š” 1๋งŒ ์žˆ์œผ๋ฏ€๋กœ ์ตœ๋นˆ๊ฐ’์€ 1์ž…๋‹ˆ๋‹ค.


๋‚ด ์ฝ”๋“œ

  public static int solution(int[] array) {
      //array์™€ ๊ธธ์ด๊ฐ€ ๊ฐ™์€ ๋นˆ ๋ฐฐ์—ด ์ƒ์„ฑ
      int[] array1 = new int[array.length];

      //array์˜ ์›์†Œ ๋ณ„ ๋“ฑ์žฅํšŸ์ˆ˜๋ฅผ array1์— ์ €์žฅ
      for(int i=0; i<array.length; i++){
          int cnt = 0;
              for(int ii=0; ii<array.length; ii++){
                  if(array[i] == array[ii])
                      cnt++;
              }
          array1[i] = cnt;
      }

      //array1์˜ ์ตœ๋Œ“๊ฐ’ ๊ตฌํ•˜๊ธฐ == ์ตœ๋นˆ๊ฐ’
      int max = 0;
      for(int i=0; i<array1.length; i++){
          if(max < array1[i])
              max = array1[i];
      }

      //array์˜ ์›์†Œ ์ค‘ ์ตœ๋นˆ๊ฐ’์ธ ์ธ๋ฑ์Šค๋ฅผ ํ™•์ธํ•  ๋นˆ๋ฐฐ์—ด ์ƒ์„ฑ
      int[] array2 = new int[array.length];

      //์ตœ๋นˆ๊ฐ’์˜ ์ธ๋ฑ์Šค๋ฅผ ๋นˆ ๋ฐฐ์—ด์— ์ €์žฅ
      for(int i=0; i<array.length; i++){
          if(array1[i] == max) {
              array2[i] = 1;
          } else {
              array2[i] = 0;
          }
      }

      //array์—์„œ ์ตœ๋นˆ๊ฐ’์ด ๊ฐ€์žฅ ๋จผ์ €๋‚˜์˜ค๋Š” ์›์†Œ์˜ ๊ฐ’ ํ™•์ธ
      int max2 = 0;
      for(int i=0; i<array.length; i++){
          if(array1[i] == max) {
              max2 = array[i];
          }
      }

      //์ตœ๋นˆ๊ฐ’์ด ์—ฌ๋Ÿฌ ๊ฐœ์ธ์ง€ ํ™•์ธ
      int maxCount = 0;
      for(int i=0; i<array1.length; i++){
          if(array2[i] == 1) {
              if(array[i] != max2) {
                  maxCount++;
              }
          }
      }

      //์—ฌ๋Ÿฌ๊ฐœ์ผ ๊ฒฝ์šฐ -1 ์•„๋‹์‹œ ์ตœ๋นˆ๊ฐ’ ๋ฆฌํ„ด
      if(maxCount >= 1) {
          return -1;
      } else {
          return max2;
      }
  }

์ตœ๋นˆ๊ฐ’ ์ด๋ผ๋Š” ๋‹จ์–ด๋ฅผ ๋ณด์ž๋งˆ์ž '์•ˆ๋˜๊ฒ ๋Š”๋ฐ... ๊ตฌ๊ธ€๋ง ํ•ด์•ผํ•˜๋‚˜' ์ด๋Ÿฐ ํ‹€๋ ค๋จน์€ ์ƒ๊ฐ์„ ํ•˜๋‹ค ์ง„์งœ ๋น™๋น™ ๋Œ์•„ ๊ฐ€๋”๋ผ๋„ ์ง์ ‘ ํ’€์–ด๋ณด๊ณ  ์‹ถ์—ˆ๋‹ค.

GPT ์„ ์ƒ๋‹˜์˜ ํ•œ๋งˆ๋”” : ์ „ํ˜•์ ์ธ '์ฒ˜์Œ ๊ณต๋ถ€ํ–ˆ์„ ๋•Œ ๋‚˜์˜ค๋Š” ์Šคํƒ€์ผ' ์ฝ”๋“œ ๋А๋‚Œ์ด๋„ค ใ…‹ใ…‹
๋ญ”๊ฐ€ "๋  ๋•Œ๊นŒ์ง€ for๋ฌธ ๋Œ๋ฆฐ๋‹ค!" ๊ฐ์„ฑ ์•„์ฃผ ์ž˜ ์‚ด์•„์žˆ์Œ.


HashMap ์„ ์‚ฌ์šฉํ•œ ์ •์„์ ์ธ ํ’€์ด๋„ ์ฒจ๋ถ€ํ•˜๋ฉฐ ๋งˆ์นœ๋‹ค.
์ฃผ์„์œผ๋กœ ํ•˜๋‚˜ํ•˜๋‚˜ ์„ค๋ช…์„ ๋‹ฌ์•„์ฃผ์…”์„œ ๋„ˆ๋ฌด ๊ฐ์‚ฌํ•˜๋‹ค.

๋ชจ๋ฒ” ๋‹ต์•ˆ
ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ๊น€์ง€์•  ๋‹˜์˜ ๋‹ต๋ณ€

import java.util.*;
class Solution {
  public int solution(int[] array) {
      int maxCount = 0;
      int answer = 0;

      Map<Integer, Integer> map = new HashMap<>();

      // getOrDefault : ์ฐพ๋Š” ํ‚ค๊ฐ€ ์กด์žฌํ•œ๋‹ค๋ฉด ์ฐพ๋Š” ํ‚ค์˜ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๊ณ  ์—†๋‹ค๋ฉด ๊ธฐ๋ณธ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์„œ๋“œ
      // getPrDefault(Object key, V DefaultValue)
      // ๋งค๊ฐœ๋ณ€์ˆ˜ : ์ด ๋ฉ”์„œ๋“œ๋Š” ๋‘๊ฐœ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํ—ˆ์šฉ
      // key : ๊ฐ’์„ ๊ฐ€์ ธ์™€์•ผ ํ•˜๋Š” ์š”์†Œ์˜ ํ‚ค
      // defaultValue : ์ง€์ •๋œ ํ‚ค๋กœ ๋งคํ•‘๋œ ๊ฐ’์ด ์—†๋Š” ๊ฒฝ์šฐ ๋ฐ˜ํ™˜๋˜์–ด์•ผ ํ•˜๋Š” ๊ธฐ๋ณธ๊ฐ’
      // ๋ฐ˜ํ™˜๊ฐ’ : ์ฐพ๋Š” key๊ฐ€ ์กด์žฌํ•˜๋ฉด ํ•ด๋‹น key์— ๋งคํ•‘๋˜์–ด ์žˆ๋Š” ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๊ณ , ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋””ํดํŠธ ๊ฐ’์ด ๋ฐ˜ํ™˜

      for(int number : array) {
          int count = map.getOrDefault(number, 0) + 1;

          if(count > maxCount) {
              maxCount = count;
              answer = number;
          }

          else if(count == maxCount) {
              answer = -1;
          }

          map.put(number, count);
      }

      return answer;
  }
}

1์ฃผ์ฐจ ํ”„๋กœ์ ํŠธ ํŠœํ„ฐ๋‹˜๋“ค์˜ ํ”ผ๋“œ๋ฐฑ

  1. ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ… & ๋ฌธ์ œ ํ•ด๊ฒฐ๋ฐฉ์•ˆ์„ ๊ธฐ๋กํ•˜๋Š” ์Šต๊ด€
  2. ๋ณด์™„์ ์„ ๊ตฌ์ฒด์ ์œผ๋กœ ์„ค๋ช…ํ•ด์ฃผ๋ฉด ์ข‹๋‹ค.
  3. ๊ตฌ๋‘๋กœ ์„ค๋ช…ํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ ๊ฐ€๊ธ‰์ ์ด๋ฉด ๊ธ€๋กœ ๋ณด์—ฌ์ฃผ๊ณ  ์„ค๋ช…ํ•˜๋Š”๊ฒŒ ์ข‹๋‹ค.
  4. ์„œ๋น„์Šค์™€ ๊ฐœ๋ฐœ์˜ ์‹œ์ž‘์—” ํ•ญ์ƒ ๋ชฉ์  ์„ค์ •์ด ์žˆ์–ด์•ผํ•œ๋‹ค.
  5. ํŒ€์›๊ณผ์˜ ๋งŽ์€ ์†Œํ†ต์ด ์ข‹์€ ํ˜‘์—…๊ณผ ์˜ฌ๋ฐ”๋ฅธ ๋ฐฉํ–ฅ์„ฑ์„ ๋งŒ๋“ ๋‹ค.

java ๊ณต๋ถ€ ํŒ

  • ๊ณต๋ถ€ํ•ด ๋ณธ ๊ฒฝํ—˜์ด ์žˆ๋‹ค๋ฉด > ์กฐ๊ธˆ ๋” ๋”ฅํ•˜๊ฒŒ ๊ณต๋ถ€ํ•ด ๋ณด๊ธธ ๊ถŒ์žฅ
  • ์ ˆ๋Œ€๋กœ!! ํ•˜๋ฉด ์•ˆ๋จ => ๋™์˜์ƒ๋งŒ ์ผœ ๋†“๋Š” ํ–‰์œ„
  • ํ•œ๋ฒˆ๋งŒ ๋ณด์ง€๋ง๊ณ  ๋‘ ๋ฒˆ์”ฉ ๋น ๋ฅด๊ฒŒ ์ฃผํ–‰ํ•˜๋Š”๊ฑธ ์ถ”์ฒœ
  • ๋‚ด๊ฐ€ ๋งŒ๋“  ์ฝ”๋“œ์— ๋Œ€ํ•œ ๋น„๊ต๋ถ„์„ ์Šต๊ด€ํ™”
  • ์ž๋ฐ” ํ•™์Šต ์‹œ TIL ์ž‘์„ฑํ•˜๋ฉด์„œ ๊ณต๋ถ€ํ•˜๊ธฐ

๋‹ค์Œ์ฃผ๋„ ํ™”์ดํŒ…!

profile
์ฐจ๊ทผ์ฐจ๊ทผ

0๊ฐœ์˜ ๋Œ“๊ธ€