Problem ๐Ÿ’ป

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

๋ฌธ์ œ ์„ค๋ช…

๋‘ ๋ฐฐ์—ด์ด ์–ผ๋งˆ๋‚˜ ์œ ์‚ฌํ•œ์ง€ ํ™•์ธํ•ด๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๋ฌธ์ž์—ด ๋ฐฐ์—ด s1๊ณผ s2๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ ๊ฐ™์€ ์›์†Œ์˜ ๊ฐœ์ˆ˜๋ฅผ returnํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด์ฃผ์„ธ์š”.


์ œํ•œ์‚ฌํ•ญ
  • 1 ≤ s1, s2์˜ ๊ธธ์ด ≤ 100
  • 1 ≤ s1, s2์˜ ์›์†Œ์˜ ๊ธธ์ด ≤ 10
  • s1๊ณผ s2์˜ ์›์†Œ๋Š” ์•ŒํŒŒ๋ฒณ ์†Œ๋ฌธ์ž๋กœ๋งŒ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค
  • s1๊ณผ s2๋Š” ๊ฐ๊ฐ ์ค‘๋ณต๋œ ์›์†Œ๋ฅผ ๊ฐ–์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ: s1s2
result
["a", "b", "c"] ["com", "b", "d", "p", "c"] 2
["n", "omg"] ["m", "dot"] 0


Approach 1 โŒ - ๋‚˜์˜ ์ดˆ๊ธฐ ์ ‘๊ทผ๋ฒ•

1. ๊ฐ ๋ฐฐ์—ด์˜ ์š”์†Œ๋“ค์„ ํ•˜๋‚˜์”ฉ ๊ฒ€ํ† ํ•ด์•ผ ํ•œ๋‹ค. - for๋ฌธ์„ ์ด์šฉํ•ด์„œ ์ธ๋ฑ์Šค0๋ถ€ํ„ฐ ์ฐจ๋ก€๋Œ€๋กœ ์š”์†Œ๋ฅผ ๊บผ๋‚ด์„œ ์ถœ๋ ฅ์‹œํ‚จ๋‹ค.

2. ์ธ๋ฑ์Šค ์ˆœ์„œ์— ์ƒ๊ด€์—†์ด ์ƒ๋Œ€ ๋ฐฐ์—ด์˜ ์š”์†Œ์™€ ๋น„๊ต๋ฅผ ์‹œ์ผœ์•ผ ํ•œ๋‹ค. ๊ฐ™์€์ง€ ์ฐพ๋Š” ๋ฌธ๋ฒ•์„ ๋ชจ๋ฅธ๋‹ค.

3. ๊ฐ™์€ ์š”์†Œ์˜ ๊ฐœ์ˆ˜๋ฅผ ์„ธ์•ผ ํ•œ๋‹ค. - ์š”์†Œ๋ฅผ ์„ธ๋Š” ๋ฌธ๋ฒ•์ด ๋– ์˜ค๋ฅด์ง€ ์•Š๋Š”๋‹ค 


Approach 2 โญ• - ๋‚˜์˜ ์ ‘๊ทผ๋ฒ•์— ๋Œ€ํ•œ ๊ต์ •

1. ๋ฌธ์ œ ์ดํ•ด

- ๋ฌธ์ž์—ด ๋ฐฐ์—ด s1๊ณผ s2๊ฐ€ ์ฃผ์–ด์ง„๋‹ค.

- ๋‘ ๋ฐฐ์—ด์— ๊ณตํ†ต์œผ๋กœ ์กด์žฌํ•˜๋Š” ๋ฌธ์ž์—ด์˜ ๊ฐœ์ˆ˜๋ฅผ ์ฐพ์•„์•ผ ํ•œ๋‹ค.

 

1. ๋ฐฐ์—ด์˜ ์š”์†Œ๋ฅผ ํ•˜๋‚˜์”ฉ ๊ฒ€ํ† ํ•ด์•ผ ํ•œ๋‹ค.
for ๋ฌธ์„ ์ด์šฉํ•ด ๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค 0๋ถ€ํ„ฐ ๋๊นŒ์ง€ ๋ฐ˜๋ณตํ•˜๋ฉฐ ๋ชจ๋“  ์š”์†Œ๋ฅผ ์ถœ๋ ฅํ•˜๊ฑฐ๋‚˜ ์‚ฌ์šฉํ•  ๊ฒƒ์„ ์ƒ๊ฐํ–ˆ์—ˆ๋‹ค.
์ด๋Š” ๊ธฐ๋ณธ์ ์ธ ์ ‘๊ทผ๋ฒ•์ด๋‹ค. ๋ฐฐ์—ด์˜ ๋ชจ๋“  ์š”์†Œ๋ฅผ ์ˆœํšŒํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ˜๋“œ์‹œ ํ•„์š”ํ•œ ๊ณผ์ •์ด๋‹ค.

2. ์ธ๋ฑ์Šค ์ˆœ์„œ์— ์ƒ๊ด€์—†์ด ์ƒ๋Œ€ ๋ฐฐ์—ด์˜ ์š”์†Œ์™€ ๋น„๊ตํ•œ๋‹ค.

๋ฐฐ์—ด ๊ฐ„์˜ ๋น„๊ต๋ฅผ ์œ„ํ•ด ์ธ๋ฑ์Šค ์ˆœ์„œ๋ฅผ ๋ฌด์‹œํ•˜๊ณ  ์š”์†Œ๋งŒ ๋น„๊ตํ•ด์•ผ ํ•œ๋‹ค๋Š” ์ ์„ ์ •ํ™•ํžˆ ์ดํ•ดํ–ˆ์—ˆ๋‹ค.
ํ•˜์ง€๋งŒ ๋ฐฐ์—ด์—๋Š” contains() ๊ฐ™์€ ํŽธ๋ฆฌํ•œ ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ๋‹ค๋Š”๊ฑธ ๋ชฐ๋ž๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ ‡๊ฒŒ ์ƒ๊ฐํ•œ๊ฑฐ๋‹ค.

3. ๊ฐ™์€ ์š”์†Œ์˜ ๊ฐœ์ˆ˜๋ฅผ ์„ธ์•ผ ํ•œ๋‹ค.
๊ณตํ†ต ์š”์†Œ๋ฅผ ์ฐพ๊ณ  ์ด๋ฅผ ์นด์šดํŠธํ•ด์•ผ ํ•œ๋‹ค๋Š” ๋ชฉํ‘œ๋ฅผ ๋ช…ํ™•ํžˆ ์„ค์ •ํ–ˆ๋‹ค.
“์š”์†Œ๋ฅผ ์„ธ๋Š” ๋ฌธ๋ฒ•”์ด ๋– ์˜ค๋ฅด์ง€ ์•Š๋Š”๋‹ค๋Š” ์ ์—์„œ ํ•„์š”ํ•œ ๋„๊ตฌ๋‚˜ ๋ฉ”์„œ๋“œ์— ๋Œ€ํ•œ ์ง€์‹์ด ๋ถ€์กฑํ–ˆ์Œ์„ ์ธ์ง€ํ–ˆ๋‹ค.
-----
ํ‰๊ฐ€
1. ๋…ผ๋ฆฌ์  ํ๋ฆ„: ๋ฌธ์ œ๋ฅผ ์ดํ•ดํ•˜๊ณ  ๋‚˜๋ฆ„์˜ ํ•ด๊ฒฐ ์ „๋žต์„ ์„ธ์šฐ๋Š” ๊ณผ์ •์€ ๋…ผ๋ฆฌ์ ์ด์—ˆ๋‹ค
๋ชจ๋“  ์š”์†Œ๋ฅผ ์ˆœํšŒํ•˜๊ณ , ๊ณตํ†ต ์š”์†Œ๋ฅผ ํ™•์ธํ•˜๋ฉฐ, ์ด๋ฅผ ์นด์šดํŠธํ•˜๋Š” ๋‹จ๊ณ„์  ์ ‘๊ทผ์€ ์˜ณ์•˜๋‹ค.
๋ฐฐ์—ด์˜ ํ•œ๊ณ„๋ฅผ ์ดํ•ดํ•˜๊ณ  ํ•„์š”ํ•œ ๋ฉ”์„œ๋“œ๊ฐ€ ์—†๋‹ค๋Š” ์ ์„ ์ธ์‹ํ•œ ๊ฒƒ๋„ ๊ดœ์ฐฎ์•˜๋‹ค.
2. ํ•œ๊ณ„: ๋ฐฐ์—ด์˜ ๊ธฐ๋ณธ์ ์ธ ํ•œ๊ณ„๋ฅผ ๋„˜์–ด์„œ ํšจ์œจ์ ์ธ ํ•ด๊ฒฐ ๋ฐฉ์‹์„ ์ฐพ๋Š” ๋ฐ ์žˆ์–ด ์–ด๋ ค์›€์„ ๊ฒช๊ณ  ์žˆ์—ˆ๋‹ค.
• ๋ฐฐ์—ด์„ Set์œผ๋กœ ๋ณ€ํ™˜ํ•˜๊ฑฐ๋‚˜, contains()๋ฅผ ์ง์ ‘ ๊ตฌํ˜„ํ•˜๋Š” ๋“ฑ์˜ ๋ฐฉ๋ฒ•์„ ๊ณ ๋ คํ•˜์ง€ ๋ชปํ–ˆ๋‹ค.

----
๊ฐœ์„ ํ•  ์ ๊ณผ ๋ฐฉ๋ฒ•
1. ํšจ์œจ์„ฑ์— ๋Œ€ํ•œ ๊ณ ๋ ค
• ๋ฐฐ์—ด๋กœ ์ง์ ‘ ๋น„๊ตํ•˜๋ฉด ๊ฐ ์š”์†Œ๋งˆ๋‹ค ๋‹ค๋ฅธ ๋ฐฐ์—ด์„ ๋ฐ˜๋ณต ๋น„๊ตํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ O(n * m)์ด๋‹ค.
• ์ด๋ฅผ ๊ฐœ์„ ํ•˜๋ ค๋ฉด ๋ฐฐ์—ด์„ Set์œผ๋กœ ๋ณ€ํ™˜ํ•ด์•ผ ํ•œ๋‹ค. Set์€ ์š”์†Œ์˜ ํฌํ•จ ์—ฌ๋ถ€๋ฅผ ํ‰๊ท  O(1)์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
• ๊ฐœ์„  ๋ฐฉ๋ฒ•:
Set<String> set = new HashSet<>(Arrays.asList(s2));โ€‹
2. ๋ชจ๋ฅด๋Š” ๋ฌธ๋ฒ•๊ณผ ๋ฉ”์„œ๋“œ ํƒ๊ตฌ
• ๋ฐฐ์—ด๊ณผ ๊ด€๋ จ๋œ ์ž๋ฐ” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฉ”์„œ๋“œ(Arrays, Set, HashSet)๋ฅผ ํ•™์Šตํ•˜๋ฉด ๋ฌธ์ œ ํ•ด๊ฒฐ์— ํ•„์š”ํ•œ ๋„๊ตฌ๋ฅผ ๋” ์ž˜ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
• ์ถ”์ฒœ ํ•™์Šต ํ•ญ๋ชฉ:
  -  Arrays.asList()๋ฅผ ์ด์šฉํ•œ ๋ฐฐ์—ด์„ ๋ฆฌ์ŠคํŠธ๋กœ ๋ณ€ํ™˜
  - HashSet๊ณผ ๊ฐ™์€ ์ปฌ๋ ‰์…˜ ํ™œ์šฉ๋ฒ•
  - Set.contains() ๋ฉ”์„œ๋“œ ์‚ฌ์šฉ๋ฒ•
3. ๋…ผ๋ฆฌ ๋‹จ์ˆœํ™”
• ๋ฐฐ์—ด์„ ๋‹จ์ˆœํžˆ for ๋ฌธ์œผ๋กœ ์ˆœํšŒํ•˜๊ณ  ๋˜ ๋‹ค๋ฅธ for ๋ฌธ์„ ๋Œ๋ ค ๋น„๊ตํ•˜๋ฉด ์ฝ”๋“œ๊ฐ€ ๋ณต์žกํ•ด์งˆ ์ˆ˜ ์žˆ๋‹ค.
• Set์„ ํ™œ์šฉํ•˜๋ฉด ๊ณตํ†ต ์š”์†Œ ํƒ์ƒ‰์ด ๊ฐ„๊ฒฐํ•ด์ง„๋‹ค.
• ๊ฐœ์„ ๋œ ์ฝ”๋“œ:
Set<String> set = new HashSet<>(Arrays.asList(s2));
long count = Arrays.stream(s1).filter(set::contains).count();โ€‹

 

2. ํ’€์ด ๋…ผ๋ฆฌ

  2.1 ๋ฐฐ์—ด ์ˆœํšŒ : ๋‘ ๋ฐฐ์—ด์˜ ๋ชจ๋“  ์š”์†Œ๋ฅผ ๊ฒ€ํ† ํ•˜๊ธฐ. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋ฐฐ์—ด s1์˜ ๊ฐ ์š”์†Œ๋ฅผ ๊บผ๋‚ด๋ฉด์„œ s2์˜ ์š”์†Œ๋“ค๊ณผ ๋น„๊ตํ•œ๋‹ค.

  2.2 ํšจ์œจ์ ์ธ ๋น„๊ต : ๋ฐฐ์—ด์„ ์ˆœํšŒํ•˜๋ฉฐ ์š”์†Œ๋ฅผ ๋น„๊ตํ•  ๋•Œ, ๋ฐฐ์—ด๋ณด๋‹ค Set ์ž๋ฃŒ ๊ตฌ์กฐ๋ฅผ ํ™œ์šฉํ•˜๋ฉด ๋” ํšจ์œจ์ ์œผ๋กœ ์š”์†Œ์˜ ํฌํ•จ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. 

  2.3 ๊ณตํ†ต ์š”์†Œ ์นด์šดํŠธ : ๊ณตํ†ต ์š”์†Œ๋ฅผ ํ™•์ธํ•  ๋•Œ๋งˆ๋‹ค ์นด์šดํŠธ๋ฅผ ์ฆ๊ฐ€์‹œํ‚จ๋‹ค. 


Solution ๐Ÿ’ก

import java.util.HashSet;
import java.util.Set;

public class CommonElements {
  public static int solution(String[] s1, String[] s2) {
     //s2๋ฅผ Set์œผ๋กœ ๋ณ€ํ™˜ (๋น ๋ฅธ ํฌํ•จ ์—ฌ๋ถ€ ํ™•์ธ)
     Set<String> set = new HashSet<>();
     for (String elelment : s2) {
         set.add(element);
     }
     
     // s1์˜ ๊ฐ ์š”์†Œ๊ฐ€ s2(Set)์— ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธ
     int count = 0;
     for (String element : s1) {
         if (set.contains(element)) {
             count++;
             }
     }
     return count;
}

public static void main(String[] args) {
     // ํ…Œ์ŠคํŠธ ์˜ˆ์ œ
     String[] s1 = {"a", "b", "c"};
     String[] s2 = {"com", "b", "d", "p", "c"};
     System.out.println(solution(s1, s2)); // ์ถœ๋ ฅ: 2
  }
}

 

 

๋‹จ๊ณ„๋ณ„ ๋…ผ๋ฆฌ์  ์‚ฌ๊ณ  ๊ณผ์ •
1. ๋ฌธ์ œ ๋ถ„ํ•ด
  - ๋ฐฐ์—ด์„ ๋น„๊ตํ•˜๊ณ  ๊ณตํ†ต ์š”์†Œ๋ฅผ ํ™•์ธํ•œ ๋’ค, ์นด์šด๋“œํ•ด์•ผ ํ•œ๋‹ค๋Š” ๋ฌธ์ œ๋ฅผ ์„ธ๋‹จ๊ณ„๋กœ ๋‚˜๋ˆˆ๋‹ค:
   1. ๋ฐฐ์—ด ์ˆœํšŒ
   2. ๊ณตํ†ต ์š”์†Œ ํ™•์ธ
   3. ์นด์šดํŠธ

2. ํšจ์œจ์„ฑ ๊ณ ๋ ค
  - ๋ฐ˜๋ณต๋ฌธ๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€์‹ , ํšจ์œจ์ ์ธ ์ž๋ฃŒ๊ตฌ์กฐ์ธ Set์„ ํ™œ์šฉํ•œ๋‹ค.

3. ๊ตฌํ˜„ ๋‹จ๊ณ„
  - ์ž‘์€ ๊ธฐ๋Šฅ๋ถ€ํ„ฐ ํ•˜๋‚˜์”ฉ ์ถ”๊ฐ€ํ•œ๋‹ค. 
     1. Set์œผ๋กœ ๋ณ€ํ™˜.
     2. contains()๋กœ ๊ณตํ†ต ์š”์†Œ ํ™•์ธ.
     3. ์นด์šดํŠธ ์ฆ๊ฐ€. 

 

1. Set์œผ๋กœ ๋ณ€ํ™˜

Set<String> set = new HashSet<>();
for (String element : s2) {
    set.add(element);
}

- ๋ฐฐ์—ด s2๋ฅผ HashSet์œผ๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.

- Set์€ ์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๊ณ , ํฌํ•จ ์—ฌ๋ถ€๋ฅผ ๋น ๋ฅด๊ฒŒ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค.

 

2. ํฌํ•จ ์—ฌ๋ถ€ ํ™•์ธ

for (String element : s1) {
    if (set.contains(element)) {
        count++;
    }
}

- s1์˜ ๊ฐ ์š”์†Œ๋ฅผ set.contains()๋กœ ํ™•์ธํ•œ๋‹ค.

- ๊ณตํ†ต ์š”์†Œ๊ฐ€ ์žˆ์œผ๋ฉด count๋ฅผ ์ฆ๊ฐ€์‹œํ‚จ๋‹ค. 

 

3. ์‹œ๊ฐ„ ๋ณต์žก๋„

s2๋ฅผ Set์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฐ O(m)

s1์„ ์ˆœํšŒํ•˜๋ฉฐ ํฌํ•จ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜๋Š” ๋ฐ O(n)

์ „์ฒด ์‹œ๊ฐ„ ๋ณต์žก๋„: O(n + m)


Reference ๐Ÿ“„

 

HashSet๊ณผ HashMap

 

1 . HashSet์ด๋ž€?

HashSet์€ ์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š” ์ง‘ํ•ฉ(Set)์ด๋‹ค.

๋‚ด๋ถ€์ ์œผ๋กœ HashMap์„ ์ด์šฉํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜์ง€๋งŒ, ํ‚ค(key)๋งŒ ์‚ฌ์šฉํ•˜๊ณ  ๊ฐ’(value)์€ ์—†๋‹ค.

์‰ฝ๊ฒŒ ๋งํ•ด, HashSet์€ "๋ฐ์ดํ„ฐ์˜ ์กด์žฌ ์—ฌ๋ถ€๋งŒ ํ™•์ธํ•˜๋Š” "๋ฐ ์ตœ์ ํ™”๋œ ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค. 

 

2. HashSet์˜ ํŠน์ง•

 2.1 ์ค‘๋ณต ํ—ˆ์šฉ ์•ˆ ํ•จ

     - ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋‘ ๋ฒˆ ๋„ฃ์œผ๋ฉด ํ•˜๋‚˜๋งŒ ์ €์žฅ๋œ๋‹ค.

Set<String> set = new HashSet<>();
set.add("a");
set.add("a");
System.out.println(set.size()); //์ถœ๋ ฅ: 1 (์ค‘๋ณต ์ œ๊ฑฐ๋จ)

 

set.size()๋Š” HashSet์ด๋‚˜ ๋‹ค๋ฅธ Set ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋ฉ”์„œ๋“œ๋กœ, Set์— ์ €์žฅ๋œ ์š”์†Œ์˜ ๊ฐœ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
• size()๋Š” O(1)์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ€์ง€๋ฏ€๋กœ ๋งค์šฐ ๋น ๋ฅด๊ฒŒ ๋™์ž‘ํ•œ๋‹ค.

 

  2.2 ์ˆœ์„œ๊ฐ€ ์—†์Œ 

    - ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ์˜ ์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค.

set.add("b");
set.add("c");
System.out.println(set); // ์ถœ๋ ฅ: [a, c, b] (์ˆœ์„œ ๋ณด์žฅ ์•ˆ ๋จ)

 

 

  2.3. ํฌํ•จ ์—ฌ๋ถ€ ํ™•์ธ

set.contains(element) ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ํŠน์ • ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋Š”์ง€ ๋น ๋ฅด๊ฒŒ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

๋‚ด๋ถ€์ ์œผ๋กœ๋Š” ํ•ด์‹ฑ(hash)์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ํ•œ๋‹ค.

 

3. HashSet๊ณผ HashMap์˜ ์ฐจ์ด

 

์˜ˆ์‹œ๋กœ ์ฐจ์ด ์ดํ•ดํ•˜๊ธฐ

HashSet

Set<String> set = new HashSet<>();
set.add("apple");
set.add("banana");
System.out.println(set.contains("apple")); //true
System.out.println(set.contains("orange")); //false

๋ฐ์ดํ„ฐ๊ฐ€ "์กด์žฌํ•˜๋Š”์ง€"๋งŒ ํ™•์ธ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

HashMap

Map<String, String> map = new HashMap<>();
map.put("apple", "fruit");
map.put"carrot", "vegetable");
System.out.println(map.get("apple")); // fruit
System.out.println(map.containsKey("carrot")); // true

Key์™€ Value์˜ ์ง์„ ์ €์žฅํ•œ๋‹ค. - HashMap์ด Key์™€ Value๋ฅผ ์ €์žฅํ•˜๋Š” ์›๋ฆฌ๋Š” ๋ฐ‘์— ...

 

4. HashSet์—์„œ contains()๊ฐ€ ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹

set.contains(element) ๋ฉ”์„œ๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์›๋ฆฌ๋กœ ์ž‘๋™ํ•œ๋‹ค:

1. ํ•ด์‹ฑ(Hashing)

HashSet ๋‚ด๋ถ€์—์„œ ์ €์žฅ๋œ ์š”์†Œ๋Š” ํ•ด์‹œ๊ฐ’(๊ณ ์œ  ์ˆซ์ž ๊ฐ’)์œผ๋กœ ๊ด€๋ฆฌ๋œ๋‹ค.

ํŠน์ • ์š”์†Œ๋ฅผ ์ฐพ์„ ๋•Œ๋„ ๋™์ผํ•œ ํ•ด์‹œ๊ฐ’์„ ๊ณ„์‚ฐํ•˜์—ฌ ์ €์žฅ๋œ ํ•ด์‹œ๊ฐ’๊ณผ ๋น„๊ตํ•œ๋‹ค.

ํ•ด์‹ฑ ๋•๋ถ„์— ํฌํ•จ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜๋Š” ์†๋„๊ฐ€ ๋งค์šฐ ๋น ๋ฅด๋‹ค.

2. ์‹œ๊ฐ„ ๋ณต์žก๋„

set.contains(element)์˜ ํ‰๊ท  ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(1)์ด๋‹ค.

์ด๋Š” ํ•ด์‹œ๊ฐ’์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ฆ‰์‹œ ํ™•์ธํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

Set<String> set = new HashSet<>();
set.add("a");
set.add("b");
set.add("c");

// "b"๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธ
if (set.contains("b")) {
    System.out.println("b๋Š” HashSet์— ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.");
} else {
    System.out.println("b๋Š” HashSet์— ํฌํ•จ๋˜์–ด ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.");
}

 

5.. HashSet์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

๋น ๋ฅธ ๊ฒ€์ƒ‰ ์†๋„: ํฌํ•จ ์—ฌ๋ถ€ ํ™•์ธ์ด ๋น ๋ฅด๋ฉฐ, ๋ฐ˜๋ณต๋ฌธ์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์ ํ•ฉํ•˜๋‹ค.

์ค‘๋ณต ์ œ๊ฑฐ: ์ค‘๋ณต๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ž๋™์œผ๋กœ ์ œ๊ฑฐํ•œ๋‹ค.

์ด ๋ฌธ์ œ์—์„œ๋Š” HashSet์„ ์‚ฌ์šฉํ•ด s2 ๋ฐฐ์—ด์„ ๋ณ€ํ™˜ํ•œ ํ›„, s1์˜ ์š”์†Œ์™€ ๋น„๊ตํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ณตํ†ต ์š”์†Œ๋ฅผ ๋น ๋ฅด๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

 

HashSet์ด ์™œ ํ•„์š”ํ•œ๊ฐ€?
1. ํšจ์œจ์ : ๋ฐฐ์—ด๋กœ ์ง์ ‘ ๋น„๊ตํ•˜๋ ค๋ฉด ์ค‘์ฒฉ ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ์ธํ•ด ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฐ๋‹ค.
2. ๊ฐ„๋‹จํ•œ ์ฝ”๋“œ: contains() ๋ฉ”์„œ๋“œ๋กœ ํฌํ•จ ์—ฌ๋ถ€๋ฅผ ์‰ฝ๊ฒŒ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
3. ์ค‘๋ณต ์ œ๊ฑฐ: ์ž๋™์œผ๋กœ ์ค‘๋ณต์„ ์ œ๊ฑฐํ•ด ๋ฐ์ดํ„ฐ์˜ ์œ ํšจ์„ฑ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.

 


ํ•ด์‹ฑ(Hashing)์ด๋ž€?

ํ•ด์‹ฑ์€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณ ์œ ํ•œ ์ˆซ์ž ๊ฐ’(ํ•ด์‹œ๊ฐ’)์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ธฐ์ˆ ์ด๋‹ค.

์ด ๊ณ ์œ ํ•œ ์ˆซ์ž ๊ฐ’์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๋น ๋ฅด๊ฒŒ ๊ฒ€์ƒ‰, ์‚ฝ์ž…, ์‚ญ์ œํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.

 

ํ•ด์‹ฑ์€ ์ฃผ๋กœ HashMap, HashSet, HashTable๊ณผ ๊ฐ™์€ ์ž๋ฃŒ๊ตฌ์กฐ์—์„œ ์‚ฌ์šฉ๋˜๋ฉฐ, ๋ฐ์ดํ„ฐ ๊ฒ€์ƒ‰์„ ๋น ๋ฅด๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•œ ํ•ต์‹ฌ ๊ธฐ์ˆ ์ด๋‹ค.

 

ํ•ด์‹ฑ์˜ ์›๋ฆฌ

1. ์ž…๋ ฅ ๋ฐ์ดํ„ฐ → ํ•ด์‹œ ํ•จ์ˆ˜ → ํ•ด์‹œ

   ๋ฐ์ดํ„ฐ๋ฅผ ํ•ด์‹œ ํ•จ์ˆ˜(Hash Function)์— ์ž…๋ ฅํ•˜๋ฉด ๊ณ ์œ ํ•œ ํ•ด์‹œ๊ฐ’(Hash Value)์ด ์ƒ์„ฑ๋œ๋‹ค.

   ์˜ˆ: "apple"  hash("apple")  42

2. ํ•ด์‹œ๊ฐ’์„ ์‚ฌ์šฉํ•ด ์ €์žฅ ์œ„์น˜ ๊ฒฐ์ •

   ํ•ด์‹œ๊ฐ’์€ ๋ณดํ†ต ๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค๋กœ ์‚ฌ์šฉ๋˜๊ฑฐ๋‚˜ ๋ฐ์ดํ„ฐ์˜ ์ €์žฅ ์œ„์น˜๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค

   ์˜ˆ: "apple"์€ ํ•ด์‹œ๊ฐ’ 42๋ฅผ ์–ป๊ณ , ๋ฐฐ์—ด์˜ 42๋ฒˆ ์œ„์น˜์— ์ €์žฅ๋œ๋‹ค.

3. ๊ฒ€์ƒ‰ ์‹œ์—๋„ ํ•ด์‹œ ํ•จ์ˆ˜ ํ™œ์šฉ

  ํŠน์ • ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ํ•  ๋•Œ๋„ ํ•ด์‹œ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๋‹น ๋ฐ์ดํ„ฐ์˜ ์œ„์น˜๋ฅผ ๋ฐ”๋กœ ์ฐพ์•„๋‚ธ๋‹ค.

  ์˜ˆ: "apple"์„ ๊ฒ€์ƒ‰ํ•˜๋ฉด hash("apple") → 42๋กœ ๊ณ„์‚ฐํ•˜๊ณ , 42๋ฒˆ ์œ„์น˜๋ฅผ ํ™•์ธํ•œ๋‹ค.

 

 

ํ•ด์‹ฑ์ด ์ค‘์š”ํ•œ ์ด์œ 

ํ•ด์‹ฑ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ด์œ ๋กœ ํšจ์œจ์ ์ด๋‹ค:

1. ๋น ๋ฅธ ๋ฐ์ดํ„ฐ ๊ฒ€์ƒ‰

  • ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฐฐ์—ด์ด๋‚˜ ๋ฆฌ์ŠคํŠธ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋ ค๋ฉด ์š”์†Œ๋ฅผ ํ•˜๋‚˜์”ฉ ํ™•์ธํ•ด์•ผ ํ•˜๋ฏ€๋กœ O(n)์˜ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฐ๋‹ค.

     ๋ฐ˜๋ฉด ํ•ด์‹ฑ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐ์ดํ„ฐ์˜ ์œ„์น˜๋ฅผ ํ•ด์‹œ๊ฐ’์œผ๋กœ ๊ณ„์‚ฐํ•ด ๋ฐ”๋กœ ์ ‘๊ทผํ•˜๋ฏ€๋กœ, ํ‰๊ท  O(1)์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ€์ง„๋‹ค.

2. ํšจ์œจ์ ์ธ ๋ฐ์ดํ„ฐ ์ €์žฅ

๋ฐ์ดํ„ฐ๊ฐ€ ๊ณ ์œ ํ•œ ์œ„์น˜(ํ•ด์‹œ๊ฐ’)๋กœ ์ €์žฅ๋˜๋ฏ€๋กœ, ์ค‘๋ณต ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ฑฐํ•˜๊ฑฐ๋‚˜ ๊ณ ์œ ํ•œ ๋ฐ์ดํ„ฐ๋งŒ ์œ ์ง€ํ•˜๊ธฐ ์‰ฌ์›Œ์ง„๋‹ค.

 

 

ํ•ด์‹œ ํ•จ์ˆ˜๋ž€?

ํ•ด์‹œ ํ•จ์ˆ˜(Hash Function)๋Š” ์ž…๋ ฅ ๋ฐ์ดํ„ฐ๋ฅผ ํŠน์ • ๊ทœ์น™์— ๋”ฐ๋ผ ๊ณ ์œ ํ•œ ์ˆซ์ž(ํ•ด์‹œ๊ฐ’)๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค.

 

์ข‹์€ ํ•ด์‹œ ํ•จ์ˆ˜์˜ ์กฐ๊ฑด:

1. ๋น ๋ฅธ ๊ณ„์‚ฐ: ์ž…๋ ฅ ๋ฐ์ดํ„ฐ์—์„œ ํ•ด์‹œ๊ฐ’์„ ๋น ๋ฅด๊ฒŒ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

2. ๊ณ ์œ ์„ฑ: ์„œ๋กœ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๋Š” ๋‹ค๋ฅธ ํ•ด์‹œ๊ฐ’์„ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค.

3. ๊ท ๋“ฑ ๋ถ„ํฌ: ํ•ด์‹œ๊ฐ’์ด ๊ฐ€๋Šฅํ•œ ํ•œ ๊ณ ๋ฅด๊ฒŒ ๋ถ„ํฌ๋˜์–ด์•ผ ํ•œ๋‹ค. (ํ•œ ์œ„์น˜์— ๋ฐ์ดํ„ฐ๊ฐ€ ๋ชฐ๋ฆฌ์ง€ ์•Š๋„๋ก)

 

 

ํ•ด์‹ฑ์˜ ๋ฌธ์ œ์ : ์ถฉ๋Œ(Hash Collision)

์ถฉ๋Œ์ด๋ž€ ์„œ๋กœ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฐ™์€ ํ•ด์‹œ๊ฐ’์„ ๊ฐ€์ง€๋Š” ๊ฒฝ์šฐ๋ฅผ ๋งํ•œ๋‹ค.

์˜ˆ:

"apple" → ํ•ด์‹œ๊ฐ’ 42

"banana" → ํ•ด์‹œ๊ฐ’ 42

 

์ถฉ๋Œ์€ ํ•ด์‹œ ํ•จ์ˆ˜๊ฐ€ ์™„๋ฒฝํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.

 

 

์ถฉ๋Œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

1. ์ฒด์ด๋‹(Chaining)

   ๋™์ผํ•œ ํ•ด์‹œ๊ฐ’์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋กœ ๊ด€๋ฆฌํ•œ๋‹ค.

   ์˜ˆ: ๋ฐฐ์—ด์˜ 42๋ฒˆ ์œ„์น˜์— "apple"๊ณผ "banana"๊ฐ€ ๋ชจ๋‘ ์ €์žฅ๋˜์ง€๋งŒ, ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋กœ ์ด์–ด ๋ถ™์ธ๋‹ค.

2. ์˜คํ”ˆ ์–ด๋“œ๋ ˆ์‹ฑ(Open Addressing)

   ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜๋ฉด ๋‹ค์Œ ๋นˆ ๊ณต๊ฐ„(๋ฐฐ์—ด์˜ ๋‹ค๋ฅธ ์œ„์น˜)์„ ์ฐพ์•„ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•œ๋‹ค.

   ์˜ˆ: 42๋ฒˆ์ด ์ถฉ๋Œ๋˜๋ฉด 43๋ฒˆ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•œ๋‹ค.

 

 

HashSet์—์„œ ํ•ด์‹ฑ์˜ ์—ญํ• 

HashSet์€ ํ•ด์‹ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌํ•œ๋‹ค.

์š”์†Œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ๊ฒ€์ƒ‰ํ•  ๋•Œ, ํ•ด์‹œ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋น ๋ฅด๊ฒŒ ๋ฐ์ดํ„ฐ์˜ ์œ„์น˜๋ฅผ ๊ณ„์‚ฐํ•˜๊ณ  ํฌํ•จ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•œ๋‹ค.

์˜ˆ: set.contains("apple")๋Š” "apple"์˜ ํ•ด์‹œ๊ฐ’์„ ๊ณ„์‚ฐํ•˜๊ณ , ํ•ด๋‹น ์œ„์น˜์— ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.

 

 

ํ•ด์‹ฑ์˜ ์‚ฌ์šฉ ์˜ˆ์‹œ

 

1. HashSet

Set<String> set = new HashSet<>();
set.add("apple"); // "apple"์˜ ํ•ด์‹œ๊ฐ’์„ ๊ณ„์‚ฐํ•˜์—ฌ ์ €์žฅ
set.add("banana");

System.out.println(set.contains("apple")); // ํ•ด์‹œ๊ฐ’์„ ๊ณ„์‚ฐํ•˜์—ฌ ์กด์žฌ ์—ฌ๋ถ€ ํ™•์ธ

 

 

2. HashMap

Map<String, Integer> map = new HashMap<>();
map.put("apple", 5); // "apple"์˜ ํ•ด์‹œ๊ฐ’์„ ๊ณ„์‚ฐํ•ด ์ €์žฅ
map.put("banana", 3);

System.out.println(map.get("apple")); // ํ•ด์‹œ๊ฐ’์„ ๊ณ„์‚ฐํ•˜์—ฌ "apple"์˜ ๊ฐ’(5)์„ ๋ฐ˜ํ™˜

 

 

 

์ •๋ฆฌ

1. ํ•ด์‹ฑ์˜ ์ •์˜
  • ๋ฐ์ดํ„ฐ๋ฅผ ๊ณ ์œ ํ•œ ์ˆซ์ž(ํ•ด์‹œ๊ฐ’)๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋น ๋ฅด๊ฒŒ ์ €์žฅ/๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๊ธฐ์ˆ .
2. HashSet๊ณผ ํ•ด์‹ฑ
  • ๋ฐ์ดํ„ฐ์˜ ์ค‘๋ณต ์ œ๊ฑฐ์™€ ํฌํ•จ ์—ฌ๋ถ€ ํ™•์ธ์„ ๋น ๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.
  • set.contains()๋Š” ํ•ด์‹ฑ์„ ์‚ฌ์šฉํ•ด ํ‰๊ท  O(1)๋กœ ๋™์ž‘ํ•œ๋‹ค.
3. HashMap๊ณผ ํ•ด์‹ฑ
  • ๋ฐ์ดํ„ฐ๋ฅผ ํ‚ค-๊ฐ’ ์Œ์œผ๋กœ ๊ด€๋ฆฌํ•˜๋ฉฐ, ํ•ด์‹œ๊ฐ’์„ ์‚ฌ์šฉํ•ด ํ‚ค์˜ ์œ„์น˜๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค.
4. ํ•ด์‹ฑ์˜ ์ด์ 
  • ๋น ๋ฅธ ๋ฐ์ดํ„ฐ ์ ‘๊ทผ(O(1) ๋ณต์žก๋„)
  • ํšจ์œจ์ ์ธ ๋ฐ์ดํ„ฐ ์ €์žฅ ๋ฐ ๊ฒ€์ƒ‰

 

 


HashMap์—์„œ Key์™€ Value๊ฐ€ ์–ด๋–ป๊ฒŒ ์ง์„ ์ด๋ฃจ์–ด ์ €์žฅ๋˜๊ณ , ์ด๋ฅผ ์–ด๋–ป๊ฒŒ ๊ฒ€์ƒ‰ํ•˜๋Š”์ง€. 

 

HashMap์€ ํ•ด์‹ฑ(Hashing) ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•ด Key๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ Value๋ฅผ ์ €์žฅํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค.

Key๋Š” ๊ณ ์œ ํ•œ ์‹๋ณ„์ž ์—ญํ• ์„ ํ•˜๊ณ , Value๋Š” Key์™€ ์—ฐ๊ฒฐ๋œ ๋ฐ์ดํ„ฐ์ด๋‹ค.

 

HashMap์˜ ๋™์ž‘ ๊ณผ์ •

1. Key์˜ ํ•ด์‹œ๊ฐ’ ๊ณ„์‚ฐ

  • map.put(Key, Value)๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด, HashMap์€ ๋จผ์ € Key์— ๋Œ€ํ•ด  ํ•ด์‹œ ํ•จ์ˆ˜(Hash Function)๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ํ•ด์‹œ๊ฐ’(Hash Code)์„ ๊ณ„์‚ฐํ•œ๋‹ค.

  • ์˜ˆ๋ฅผ ๋“ค์–ด, "apple"์˜ ํ•ด์‹œ๊ฐ’์ด 42๋ผ๊ณ  ๊ฐ€์ •ํ•œ๋‹ค.

2. ์ €์žฅ ์œ„์น˜ ๊ฒฐ์ •

  • ๊ณ„์‚ฐ๋œ ํ•ด์‹œ๊ฐ’์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค.

  • ์˜ˆ๋ฅผ ๋“ค์–ด, ํ•ด์‹œ๊ฐ’ 42๋ฅผ ๋ฐฐ์—ด์˜ 42๋ฒˆ ์œ„์น˜๋กœ ๋งคํ•‘ํ•œ๋‹ค.

3. Key-Value ์Œ ์ €์žฅ

  • ๊ฒฐ์ •๋œ ์œ„์น˜์— Key์™€ Value๋ฅผ ํ•จ๊ป˜ ์ €์žฅํ•œ๋‹ค.

  • ์˜ˆ๋ฅผ ๋“ค์–ด, "apple"๊ณผ "fruit"๋ฅผ ๋ฐฐ์—ด์˜ 42๋ฒˆ ์œ„์น˜์— ์ €์žฅํ•œ๋‹ค.

4. ๊ฒ€์ƒ‰ ์‹œ์—๋„ ๊ฐ™์€ ๊ณผ์ • ๋ฐ˜๋ณต

  • map.get(Key)๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด HashMap์€ Key์˜ ํ•ด์‹œ๊ฐ’์„ ๊ณ„์‚ฐํ•˜๊ณ , ํ•ด๋‹น ์œ„์น˜์—์„œ Key๋ฅผ ์ฐพ์•„ Value๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค

 

์ฝ”๋“œ ์˜ˆ์ œ์˜ ์ž‘๋™ ์›๋ฆฌ

Map<String, String> map = new HashMap<>();
map.put("apple", "fruit");
map.put("carrot", "vegetable");

System.out.println(map.get("apple")); // ์ถœ๋ ฅ: fruit
System.out.println(map.containKey("carrot")); //์ถœ๋ ฅ: true

์ž‘๋™ ๊ณผ์ • ์ƒ์„ธ ์„ค๋ช…

1. Key “apple”๊ณผ Value “fruit” ์ €์žฅ

   map.put("apple", "fruit")๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉด:

      1. "apple"์˜ ํ•ด์‹œ๊ฐ’์„ ๊ณ„์‚ฐํ•œ๋‹ค.

      2. ๊ณ„์‚ฐ๋œ ํ•ด์‹œ๊ฐ’์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฐฐ์—ด์˜ ํŠน์ • ์œ„์น˜๋ฅผ ์ฐพ๋Š”๋‹ค.

      3. ๋ฐฐ์—ด์˜ ํ•ด๋‹น ์œ„์น˜์— "apple"๊ณผ "fruit"๋ฅผ Key-Value ์Œ์œผ๋กœ ์ €์žฅํ•œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ํ•ด์‹œ๊ฐ’ 42 → ๋ฐฐ์—ด์˜ 42๋ฒˆ ์œ„์น˜์— ์ €์žฅ๋œ๋‹ค.

 

2. Key “carrot”๊ณผ Value “vegetable” ์ €์žฅ

    map.put("carrot", "vegetable")๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉด:

     1. "carrot"์˜ ํ•ด์‹œ๊ฐ’์„ ๊ณ„์‚ฐํ•œ๋‹ค.

     2. ๊ณ„์‚ฐ๋œ ํ•ด์‹œ๊ฐ’์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฐฐ์—ด์˜ ๋˜ ๋‹ค๋ฅธ ์œ„์น˜๋ฅผ ์ฐพ๋Š”๋‹ค.

     3. ๋ฐฐ์—ด์˜ ํ•ด๋‹น ์œ„์น˜์— "carrot"๊ณผ "vegetable"๋ฅผ Key-Value ์Œ์œผ๋กœ ์ €์žฅํ•œ๋‹ค.

     • ์˜ˆ๋ฅผ ๋“ค์–ด, ํ•ด์‹œ๊ฐ’ 53 → ๋ฐฐ์—ด์˜ 53๋ฒˆ ์œ„์น˜์— ์ €์žฅ๋œ๋‹ค.

 

3. Value ๊ฒ€์ƒ‰: map.get(“apple”)

   map.get("apple")์ด ํ˜ธ์ถœ๋˜๋ฉด:

     1. "apple"์˜ ํ•ด์‹œ๊ฐ’์„ ๋‹ค์‹œ ๊ณ„์‚ฐํ•œ๋‹ค.

     2. ํ•ด๋‹น ํ•ด์‹œ๊ฐ’์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฐฐ์—ด์˜ ์œ„์น˜(์˜ˆ: 42๋ฒˆ)๋ฅผ ์ฐพ๋Š”๋‹ค.

     3. ๋ฐฐ์—ด์˜ 42๋ฒˆ ์œ„์น˜์—์„œ Key "apple"๊ณผ ์—ฐ๊ฒฐ๋œ Value "fruit"๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

4. Key ์กด์žฌ ์—ฌ๋ถ€ ํ™•์ธ: map.containsKey(“carrot”)

   map.containsKey("carrot")๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉด:

     1. "carrot"์˜ ํ•ด์‹œ๊ฐ’์„ ๊ณ„์‚ฐํ•œ๋‹ค.

     2. ํ•ด๋‹น ํ•ด์‹œ๊ฐ’์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฐฐ์—ด์˜ ์œ„์น˜(์˜ˆ: 53๋ฒˆ)๋ฅผ ์ฐพ๋Š”๋‹ค.

     3. ๋ฐฐ์—ด์˜ 53๋ฒˆ ์œ„์น˜์—์„œ Key "carrot"์ด ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.

     4. Key๊ฐ€ ์กด์žฌํ•˜๋ฏ€๋กœ true๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

 

HashMap์˜ ๋‚ด๋ถ€ ๊ตฌ์กฐ

HashMap์€ ๋‚ด๋ถ€์ ์œผ๋กœ ๋ฐฐ์—ด + ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ ๋˜๋Š” ๋ฐฐ์—ด + ํŠธ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•œ๋‹ค.

1. ๋ฐฐ์—ด(Bucket)

  • ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ๊ธฐ๋ณธ ๊ตฌ์กฐ์ด๋‹ค.

  • ํ•ด์‹œ๊ฐ’์— ๋”ฐ๋ผ Key-Value ์Œ์ด ์ €์žฅ๋œ๋‹ค.

2. ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ(Linked List)

  • ํ•ด์‹œ๊ฐ’์ด ๊ฐ™์€ Key๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ ์žˆ๋Š” ๊ฒฝ์šฐ, ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•œ๋‹ค.

  • ์ด๋•Œ, ์ถฉ๋Œ๋œ Key-Value ์Œ์„ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋กœ ์ €์žฅํ•œ๋‹ค.

3. ํŠธ๋ฆฌ ๊ตฌ์กฐ(Tree)

  • ๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ์•„์ง€๋ฉด ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ ๋Œ€์‹  ํŠธ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒ€์ƒ‰ ์†๋„๋ฅผ ์œ ์ง€ํ•œ๋‹ค.

 

 

HashMap์˜ ์žฅ์ 

1. ๋น ๋ฅธ ๋ฐ์ดํ„ฐ ๊ฒ€์ƒ‰

   • ํ•ด์‹œ๊ฐ’์„ ์‚ฌ์šฉํ•ด ๋ฐฐ์—ด ์ธ๋ฑ์Šค๋ฅผ ๊ณ„์‚ฐํ•˜๋ฏ€๋กœ, ๋ฐ์ดํ„ฐ ๊ฒ€์ƒ‰ ์†๋„๊ฐ€ ํ‰๊ท ์ ์œผ๋กœ O(1)์ด๋‹ค.

2. Key-Value ๊ด€๊ณ„ ๊ด€๋ฆฌ

   • Key๋ฅผ ํ†ตํ•ด ๊ด€๋ จ๋œ Value๋ฅผ ๋น ๋ฅด๊ฒŒ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋‹ค.

3. ์œ ์—ฐํ•œ Key

   • Key๋กœ ๋ฌธ์ž์—ด, ์ˆซ์ž, ๊ฐ์ฒด ๋“ฑ ๋‹ค์–‘ํ•œ ์ž๋ฃŒํ˜•์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

HashMap์˜ ์ฃผ์˜์ 

1. Key๋Š” ๊ณ ์œ ํ•ด์•ผ ํ•จ

Key๋Š” ์ค‘๋ณต๋  ์ˆ˜ ์—†์œผ๋ฉฐ, ์ค‘๋ณต๋œ Key๋ฅผ ๋„ฃ์œผ๋ฉด ๊ธฐ์กด Value๊ฐ€ ๋ฎ์–ด์”Œ์›Œ์ง„๋‹ค.

map.put("apple", "fruit");
map.put("apple", "snack");
System.out.println(map.get("apple")); // ์ถœ๋ ฅ: snack (๋ฎ์–ด์”Œ์›Œ์ง)

 

2. ํ•ด์‹œ ์ถฉ๋Œ

์„œ๋กœ ๋‹ค๋ฅธ Key๊ฐ€ ๊ฐ™์€ ํ•ด์‹œ๊ฐ’์„ ๊ฐ€์งˆ ๊ฒฝ์šฐ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•œ๋‹ค.

HashMap์€ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋‚˜ ํŠธ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ด ์ถฉ๋Œ์„ ํ•ด๊ฒฐํ•œ๋‹ค.

 

์š”์•ฝ
• HashMap์˜ ์›๋ฆฌ
Key์˜ ํ•ด์‹œ๊ฐ’์„ ๊ณ„์‚ฐํ•˜์—ฌ ์ €์žฅ ์œ„์น˜๋ฅผ ์ฐพ๊ณ , Key์™€ Value๋ฅผ ๋ฐฐ์—ด์— ํ•จ๊ป˜ ์ €์žฅํ•˜๋ฉฐ, ๊ฒ€์ƒ‰ ์‹œ์—๋„ ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ Value๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
• ์ฃผ์š” ๋ฉ”์„œ๋“œ
  - put(Key, Value): Key-Value ์Œ์„ ์ €์žฅํ•œ๋‹ค.
  - get(Key): Key์— ํ•ด๋‹นํ•˜๋Š” Value๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  - containsKey(Key): Key๊ฐ€ ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.

+ Recent posts