๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algoritm/Coding Interview

[1.๋ฐฐ์—ด/๋ฌธ์ž์—ด] HashTable, ArrayList(๊ฐ€๋ณ€๋ฐฐ์—ด), StringBuilder

by ๐Ÿ’œautumn 2020. 8. 23.

1. ๋ฐฐ์—ด๊ณผ ๋ฌธ์ž์—ด

 : ๋‘˜์˜ ๋ฌธ์ œํ’€์ด๋Š” ๋Œ€์ฒด ๊ฐ€๋Šฅ

 

2. ํ•ด์‹œํ…Œ์ด๋ธ”(HashTable)

 : ํšจ์œจ์ ์ธ ํƒ์ƒ‰์„ ์œ„ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ

 : ํ‚ค(Key)๋ฅผ ๊ฐ’(Value)์— ๋Œ€์‘

  <๊ตฌํ˜„๋ฐฉ๋ฒ•>     ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ(LinkedList) + ํ•ด์‹œ์ฝ”๋“œํ•จ์ˆ˜(HashCodeFuction)  
1 Key์˜ ํ•ด์‹œ์ฝ”๋“œ๋ฅผ ๊ณ„์‚ฐ : ๋ณดํ†ต int ๋˜๋Š” longํ˜• ์‚ฐ์ถœ
(์ด๋•Œ key๊ฐ’์€ ๋ฌดํ•œํ•˜์ง€๋งŒ int๋Š” ์œ ํ•œํ•˜๋ฏ€๋กœ ํ•ด์‹œ์ฝ”๋“œ์˜ ์ค‘๋ณต์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์  ์œ ์˜)
2 ํ•ด์‹œ์ฝ”๋“œ๋ฅผ ์ด์šฉํ•˜์—ฌ(e.g. hash(key)%array_length) ๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค ๊ตฌํ˜„
3 ๋ฐฐ์—ด์˜ ๊ฐ ์ธ๋ฑ์Šค์— ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ(ํ‚ค+๊ฐ’)๋ฅผ ์ €์žฅ
์ด๋•Œ, ์ถฉ๋Œ์— ๋Œ€๋น„ํ•˜์—ฌ ๋ฐ˜๋“œ์‹œ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋ฅผ ์ด์šฉํ•œ๋‹ค. 
 <๊ฐ’์„ ์ฐพ๋Š” ๋ฐฉ๋ฒ•>    * ์ถฉ๋Œ์ด ์ž์ฃผ ๋ฐœ์ƒํ•œ๋‹ค๋ฉด O(N), ์ตœ์ ํ™” ๋œ ๊ฒฝ์šฐ O(1)  
1 ์ฃผ์–ด์ง„ ํ‚ค๋กœ๋ถ€ํ„ฐ ํ•ด์‹œ์ฝ”๋“œ ๊ณ„์‚ฐ
2 ๊ณ„์‚ฐํ•œ ํ•ด์‹œ์ฝ”๋“œ๋กœ๋ถ€ํ„ฐ ์ธ๋ฑ์Šค ๊ณ„์‚ฐ
3 ์ธ๋ฑ์Šค ์•ˆ์— ์ €์žฅ๋œ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ ํƒ์ƒ‰

 : ๊ท ํ˜•์ด์ง„ํƒ์ƒ‰ํŠธ๋ฆฌ๋กœ ๊ตฌํ˜„์‹œ, ํƒ์ƒ‰์‹œ๊ฐ„ O(logN) - ์ฆ‰, ํฌ๊ธฐ๊ฐ€ ํฐ ๋ฐฐ์—ด์„ ๋ฏธ๋ฆฌ ํ• ๋‹นํ•ด๋‘์ง€์•Š๊ธฐ์— ์ž ์žฌ์ ์œผ๋กœ ์ ์€ ๊ณต๊ฐ„ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ์žฅ์ ๊ณผ ํ‚ค ์ง‘ํ•ฉ์„ ํŠน์ •์ˆœ์„œ ์ฐจ๋ก€๋Œ€๋กœ ์ ‘๊ทผ๊ฐ€๋Šฅํ•œ ํŠน์ง• ์กด์žฌ

 

 

3. ArrayList์™€ ๊ฐ€๋ณ€ํฌ๊ธฐ๋ฐฐ์—ด

 : ์–ธ์–ด์— ๋”ฐ๋ผ ๋ฐฐ์—ด(List)๋Š” ์ž๋™์œผ๋กœ ๊ธธ์ด๋ฅผ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ๊ธฐ๋„ํ•˜๊ณ  ์—†๊ธฐ๋„ ํ•จ - Java๋Š” ๋ฐฐ์—ด ์ƒ์„ฑ์‹œ ํฌ๊ธฐ ์ง€์ • ํ•„์ˆ˜

 : ๋™์ ๊ฐ€๋ณ€ํฌ๊ธฐ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์ฃผ๋กœ ArrayList ์‚ฌ์šฉ - ํฌ๊ธฐ ๋ณ€ํ™” ๊ฐ€๋Šฅ ๋ฐ ์ ‘๊ทผ์‹œ๊ฐ„ O(1)์œ ์ง€

 : ๋ฐฐ์—ด์ด ๊ฐ€๋“์ฐจ๋Š” ์ˆœ๊ฐ„ ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋ฅผ 2๋ฐฐ๋กœ ์ฆ๊ฐ€ (๊ธธ์ด๋ฅผ ๋Š˜๋ฆฌ๋Š” ์‹œ๊ฐ„์€ O(N)์ด์ง€๋งŒ, ์žฆ์€ ์ผ์ด ์•„๋‹ˆ๊ธฐ๋•Œ๋ฌธ์— ์ƒํ™˜์ž…๋ ฅ์‹œ๊ฐ„์œผ๋กœ ์ทจ๊ธ‰ํ•˜์—ฌ ๊ณ„์‚ฐ)

ArrayList merge(String[] words, String[] more) {
	ArrayList sentence=new ArrayList();
	for(String w:words) {
		sentence.add(w);
	}
	for(String m:more) {
		sentence.add(m);
	}
	return sentence;
}

 

4. ์ƒํ™˜์ž…๋ ฅ์‹œ๊ฐ„์€ ์™œ O(1)์ด ๋˜๋Š”๊ฐ€?

 : ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋ฅผ ๋Š˜๋ฆฐ๋‹ค๋Š” ๊ฒƒ์€ ๋ฐฐ์—ด ์•ˆ์˜ ์›์†Œ๋ฅผ ๋ณต์‚ฌํ•œ๋‹ค๋Š” ๊ฒƒ

  ์ฆ‰, ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋ฅผ K๋กœ ๋Š˜๋ฆฌ๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ ์ด์ „ ์›์†Œ์˜ ๊ฐœ์ˆ˜ K/2๊ฐœ ๋งŒํผ์˜ ์›์†Œ๋ฅผ ๋ณต์‚ฌํ•ด์•ผ ํ•จ

  ์ด ์ž‘์—…์„ ๋ฐ˜๋ณต์ ์œผ๋กœ ์ƒ๊ฐํ•ด๋ณด์•˜์„๋•Œ K/2+K/4+K/8+...+1 ์ด๊ณ  ์ฆ‰ K๋ณด๋‹ค ์ž‘๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Œ

  ๊ทธ๋Ÿฌ๋ฏ€๋กœ N๊ฐœ์˜ ์›์†Œ๋ฅผ ์‚ฝ์ž…ํ• ๋•Œ ์ž‘์—…์‹œ๊ฐ„์€ O(N)๋งŒํผ ์†Œ์š”๋˜๋ฉฐ ๊ฐ ์‚ฝ์ž…์€ ํ‰๊ท ์ ์œผ๋กœ O(1)๋งŒํผ ์†Œ์š”

 

 

5. StringBuilder

๋ฌธ์ž์—ด(String)์„ ์ด์–ด๋ถ™์ด๋Š” ๊ฒฝ์šฐ ๋‘๊ฐœ์˜ ๋ฌธ์ž์—ด์„ ์ฝ์–ด ๋ฌธ์ž๋ฅผ ํ•˜๋‚˜ํ•˜๋‚˜ ์ƒˆ๋กœ์šด ๋ฌธ์ž์—ด์— ๋ณต์‚ฌํ•ด์•ผํ•จ

๊ทธ๋Ÿฌ๋‚˜ StringBuilder๋Š” ๋‹จ์ˆœํ•˜๊ฒŒ ๊ฐ€๋ณ€ํฌ๊ธฐ์˜ ๋ฐฐ์—ด์„ ์ด์šฉํ•˜์—ฌ ํ•„์š”ํ•œ ๊ฒฝ์šฐ์—๋งŒ ๋ฌธ์ž์—ด์„ ๋ณต์‚ฌํ•จ

์ˆ˜ํ–‰์‹œ๊ฐ„์˜ ์ฐจ์ด๊ฐ€ ๋ฐœ์ƒ

 

 

 

 

๋Œ“๊ธ€