๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์ฝ”๋”ฉํ…Œ์ŠคํŠธ/์•Œ๊ณ ๋ฆฌ์ฆ˜&์ž๋ฃŒ๊ตฌ์กฐ

2. Arrays

by moon101 2024. 3. 2.

๋ฐฐ์—ด์ด๋ž€?

๊ฐ™์€ ํƒ€์ž…์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์—ฐ์†๋œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์— ์œ„์น˜ํ•ด ์ธ๋ฑ์Šค๋กœ ๊ฐ’์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค. ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋Š” ์ƒ์„ฑํ•  ๋•Œ ์ •ํ•ด์ง€๋ฉฐ ํ•œ ๋ฒˆ ์ƒ์„ฑํ•˜๋ฉด ์‚ฌ์ด์ฆˆ๋Š” ๊ณ ์ •์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋‹ค.

๋งŒ์•ฝ ๋™์  ๋ฐฐ์—ด์ด ํ•„์š”ํ•  ๊ฒฝ์šฐ, ์ž๋ฐ”์—์„œ๋Š” ArrayList๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค(c++์—์„œ๋Š” vector). 

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ํŒ ๐Ÿ—๏ธ

๋ฐฐ์—ด์€ ๋‚˜์ค‘์— ์–ด๋ ค์šด ๋ฌธ์ œ๋ฅผ ํ’€ ๋•Œ ๊ธฐ๋ณธ์œผ๋กœ ์•Œ๊ณ  ์žˆ์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐฐ์—ด ๊ด€๋ จ ์ฝ”๋“œ๋Š” ์‰ฝ๊ณ  ๋น ๋ฅด๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์„ ๋งŒํผ ์ต์ˆ™ํ•ด์ ธ์•ผ ํ•œ๋‹ค. ๋ฐฐ์—ด๊ด€๋ จ ๋ฌธ์ œ๋Š” ์ข…๋ฅ˜๋„ ๋‹ค์–‘ํ•˜๊ณ  ๋‚œ์ด๋„๊ฐ€ ์ฒ˜์Œ ์ ‘ํ•˜๋ฉด ์ƒ๊ฐ๋ณด๋‹ค ์–ด๋ ค์šด ๋ฌธ์ œ๋“ค์ด ๋งŽ๋‹ค. prefix sum, sliding window, two pointer ๊ฐ™์€ ๊ฐœ๋…์„ ๋ฐฐ์—ด ๋ฌธ์ œ๋ฅผ ํ’€ ๋•Œ ์•Œ์•„๋‘๋ฉด ์ข‹๊ณ , HashMap๋„ ๋งŽ์ด ํ™œ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•ด์‹œ๋งต์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ์–ด๋–ป๊ฒŒ ํ™œ์šฉํ•ด์„œ ๋ฌธ์ œ๋ฅผ ํ’€ ์ˆ˜ ์žˆ๋Š”์ง€ ์ •๋ฆฌํ•ด ๋†“๋Š”๊ฑธ ์ถ”์ฒœํ•œ๋‹ค. 

๋ฐฐ์—ด ๋ฌธ์ œ๋ฅผ ํ’€ ๋•Œ ์•Œ์•„์•ผ ๋˜๋Š” ๊ฐœ๋…
๐ŸŽƒ prefix sum 
๐ŸŽƒ sliding window
๐ŸŽƒ two pointer (์ค‘์š”!!!)

HashMap ๋ฉ”์†Œ๋“œ ํ™œ์šฉ๋ฒ•
๐ŸŽƒ getOrDefault(Object key, V defaultValue): ํ•ด๋‹น ํ‚ค์— ๋Œ€ํ•œ ๋งคํ•‘ ๊ฐ’ ๋ฆฌํ„ด. ๋งคํ•‘๋œ ๊ฐ’์ด ์—†์„ ๊ฒฝ์šฐ ๋””ํดํŠธ๊ฐ’ ๋ฆฌํ„ด
๐ŸŽƒ containsKey(Object key): ํ•ด๋‹น ํ‚ค์— ๋Œ€ํ•œ ๋งคํ•‘์ด ์žˆ์„ ๊ฒฝ์šฐ true ๋ฆฌํ„ด
๐ŸŽƒ putIfAbsent(K Key, V value): ํ•ด๋‹น ํ‚ค์— ๋งคํ•‘๋œ ๊ฐ’์ด ์—†์„ ๊ฒฝ์šฐ, ์ธ์ž๋กœ ๋“ค์–ด์˜จ ๊ฐ’ ๋งคํ•‘
๐ŸŽƒ ๋งต ์ž๋ฃŒ๊ตฌ์กฐ ๋ฐ˜๋ณต๋ฌธ ์ž‘์„ฑ ๋ฐฉ๋ฒ•

IndexOutOfBoundsException ์ฃผ์˜
๐ŸŽƒ ๋ฐ˜๋ณต๋ฌธ์ด๋‚˜ ์กฐ๊ฑด ๊ฒ€์„ ํ•  ๋•Œ ๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค๋ฅผ arr[i - 1] > arr[i] ๋˜๋Š” arr[i] > arr[i + 1] ์ด๋Ÿฐ์‹์œผ๋กœ ๋น„๊ตํ•˜๋Š” ๊ฒฝ์šฐ -1 ๋˜๋Š” +1์„ ํ•  ๋•Œ ์ธ๋ฑ์Šค ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด ๋‚˜์ง€ ์•Š๋„๋ก ์ฃผ์˜

1์ฐจ์› -> 2์ฐจ์› ๋ฐฐ์—ด๋กœ ๋ณ€๊ฒฝ ์‹œ modulo ์‚ฌ์šฉ๋ฐฉ๋ฒ•
๐ŸŽƒ 1์ฐจ์› ๋ฐฐ์—ด์˜ ๊ฐ’์„ ์ˆœ์„œ๋Œ€๋กœ 2์ฐจ์› ๋ฐฐ์—ด์— ๊ฐ’์„ ๋„ฃ๋Š”๋‹ค๊ณ  ํ•˜๋ฉด ํ–‰์€ / division operator, ์—ด์€ % modulo operator๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์œ„์น˜๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋•Œ ๋ถ„๋ชจ๋กœ๋Š” ์—ด์˜ ๊ธธ์ด๊ฐ€ ๋“ค์–ด๊ฐ„๋‹ค (์˜ˆ, ์‚ฌ์ด์ฆˆ๊ฐ€ 9์ธ 1์ฐจ์› ๋ฐฐ์—ด์˜ 5๋ฒˆ์งธ ์ธ๋ฑ์Šค์˜ ๊ฐ’์€ 3*3 ํฌ๊ธฐ์˜ 2์ฐจ์› ๋ฐฐ์—ด 1ํ–‰ 2์—ด์— ์œ„์น˜ (5 / 3 = 1, 5 % 3 = 2)
๐ŸŽƒ row = i / m (column length)
๐ŸŽƒ col = i % m (column length)

 

์ฝ”๋“œ

๋ฐฐ์—ด์—์„œ ๊ฐ’ swap ๋ฐฉ๋ฒ•

์˜ˆ๋ฅผ ๋“ค์–ด ์•„๋ž˜ ์‚ฌ์ง„์ฒ˜๋Ÿผ ๋ฐฐ์—ด์ด ์žˆ๋‹ค๊ณ  ํ•˜๋ฉด

int ๋ฐฐ์—ด

ํŠน์ • ์ธ๋ฑ์Šค ๊ฐ’์˜ ์œ„์น˜๋ฅผ ๋ณ€๊ฒฝํ•  ๋•Œ ์ฝ”๋“œ๋Š” ์•„๋ž˜์ฒ˜๋Ÿผ ์ž‘์„ฑํ•œ๋‹ค.

swapํ•˜๋Š” ๋ฉ”์†Œ๋“œ

 

temp ๋ณ€์ˆ˜์— arr[num1]์— ๋„ฃ์œผ๋ฉด arr[num1]์— ๋ฐ”๊ฟ€ ๊ฐ’(arr[num2])์„ ๋„ฃ๊ณ  ๊ทธ๋Ÿผ arr[num2]์— arr[num1]๊ฐ’์„ ๋„ฃ์–ด์ค˜์•ผ ํ•˜๋Š”๋ฐ,  arr[num1]์—๋Š” ์ง€๊ธˆ arr[num2] ๊ฐ’์ด ๋“ค์–ด๊ฐ€ ์žˆ์œผ๋‹ˆ๊นŒ ์›๋ž˜์˜ arr[num1] ๊ฐ’์ด ์ €์žฅ๋˜์–ด ์žˆ๋Š” temp ๊ฐ’์„ arr[num2]์— ๋„ฃ์–ด์•ผ ๋˜๋Š”๊ตฌ๋‚˜ ์ด๋Ÿฐ์‹์œผ๋กœ ์ƒ๊ฐํ•˜๋ฉด์„œ ์Šค์™‘ ์ •๋„๋Š” ๋ฐ˜๋ณต๋ฌธ ์ž‘์„ฑํ•˜๋“ฏ์ด ์ต์ˆ™ํ•ด์ ธ์•ผ ํ•œ๋‹ค. 

์Šค์™‘ํ•˜๋Š” ์ฝ”๋“œ

 

๋ฐฐ์—ด์˜ ๋ฒ”์œ„๋ฅผ ์ง€์ •ํ•ด์„œ reverse ํ•˜๋Š” ๋ฐฉ๋ฒ•

๋ฐฐ์—ด์˜ ์ˆœ์„œ๋ฅผ ๋ฐ”๊ฟ”์•ผ ํ•  ๊ฒฝ์šฐ, ์˜ˆ๋ฅผ ๋“ค์–ด ๋ฆฌํŠธ์ฝ”๋“œ์˜ next permutation ๋ฌธ์ œ๋ฅผ ํ’€๋‹ค๋ณด๋ฉด ๋ฐฐ์—ด์˜ ํŠน์ • ๋ถ€๋ถ„์„ ๋’ค์ง‘์–ด์•ผ ํ•  ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค. ์ด๋•Œ๋Š” ๋ฉ”์†Œ๋“œ์— ๋ฐฐ์—ด์˜ ๋ฒ”์œ„, ์‹œ์ž‘๊ณผ ๋ ์ธ๋ฑ์Šค ๊ฐ’์„ ๋„ฃ์–ด์„œ ๋ฉ”์†Œ๋“œ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค. 

๋ฐฐ์—ด์˜ ํŠน์ • ๋ถ€๋ถ„์„ reverse ํ•˜๋Š” ์ฝ”๋“œ

 

reverse() ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ•ด๋‹น ๋ฒ”์œ„์˜ ๊ฐ’์˜ ์ˆœ์„œ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค(๋‚ด๋ฆผ์ฐจ์ˆœ -> ์˜ค๋ฆ„์ฐจ์ˆœ, ์˜ค๋ฆ„์ฐจ์ˆœ -> ๋‚ด๋ฆผ์ฐจ์ˆœ)

 

 

๋ฐฐ์—ด ๋ฌธ์ œ ๋ฆฌ์ŠคํŠธ

LeetCode

73. Set Matrix Zeros (๊ณต๊ฐ„๋ณต์žก๋„๋ฅผ O(1)๋กœ ํ‘ธ๋Š” ๋ฐฉ๋ฒ•. ์ฒซ๋ฒˆ์งธ ํ–‰๊ณผ ์—ด์„ ์‚ฌ์šฉํ•ด์„œ '0'์ด ์žˆ๋Š”์ง€ flag๋กœ ๊ธฐ๋ก. ๊ฒน์น˜๋Š” ๋ถ€๋ถ„(0, 0)์€ boolean ๋ณ€์ˆ˜ 2๊ฐœ isFirstRow, isFirstCol๋ฅผ ์„ ์–ธํ•ด์„œ ์ฒดํฌ)

118. Pascal's Triangle 

31. Next Permutation (์ œ์ผ ๊ธด ์ ‘๋‘์‚ฌ๋ฅผ ์ฐพ์€ ๋’ค ๊ฐ€์žฅ ์ž‘์€ ์ˆซ์ž๋ฅผ ์ฐพ์•„์„œ swap. ๋‚˜๋จธ์ง€ ์ˆซ์ž๋Š” ์ •๋ ฌํ•จ)

53. Maximum Subarray (Kadane ์•Œ๊ณ ๋ฆฌ์ฆ˜. ๋งˆ์ด๋„ˆ์Šค ์ˆซ์ž๋ฅผ sum์— ๋”ํ•  ๊ฒฝ์šฐ sum์„ ๋” ์ž‘๊ฒŒ ๋งŒ๋“ค๊ธฐ ๋•Œ๋ฌธ์—  sum์ด '0'๊ณผ ๊ฐ™๊ฑฐ๋‚˜ ์ž‘์œผ๋ฉด ์ƒˆ๋กœ ์‹œ์ž‘)

75. Sort Colors (Dutch National Flag ์•Œ๊ณ ๋ฆฌ์ฆ˜. 3๊ฐœ์˜ ํฌ์ธํ„ฐ ํ™œ์šฉ. 3๊ฐœ์˜ ๊ฐ€์ƒ ํŒŒํ‹ฐ์…˜์„ ๋งŒ๋“ค์–ด์„œ ์ •๋ ฌ)

121. Best Time to Buy and Sell Stock 

48. Rotage Image (์‹œ๊ณ„๋ฐฉํ–ฅ์œผ๋กœ 90๋„ ํšŒ์ „ํ•œ ๋งคํŠธ๋ฆญ์Šค์˜ ์—ด์€ ๊ธฐ์กด์˜ ํ–‰์˜ ์—ญ์ˆœ๊ณผ ๊ฐ™์Œ. ๋งคํŠธ๋ฆญ์Šค์˜ ํ–‰์„ ์—ด๋กœ ๋ฐ”๊พธ๊ณ  ์—ด์„ ํ–‰์œผ๋กœ ๋ฐ”๊พผ ๋’ค ํ–‰์„ reverse. ํ–‰์„ ์—ด๋กœ ๋ฐ”๊ฟ€ ๋•Œ ๋ฐ˜๋ณต๋ฌธ ์กฐ๊ฑด ์ฃผ์˜)

56. Merge Intervals (ํ•œ๋ฒˆ๋งŒ ์ˆœํšŒํ•˜๋ฉด์„œ ๋‹ค์Œ ์ธํ„ฐ๋ฒŒ์˜ ์‹œ์ž‘์ด ํ˜„์žฌ ์ธํ„ฐ๋ฒŒ์•ˆ์— ์†ํ•  ๊ฒฝ์šฐ ํ˜„์žฌ ๋น„๊ตํ•˜๋Š” ์ธํ„ฐ๋ฒŒ ์ข…๋ฃŒ๊ฐ’ ์—…๋ฐ์ดํŠธ โ˜…โ˜…โ˜…)

88. Merge Sorted Array 

287. Find the Duplicate Number (๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ์˜ slow/fast ํฌ์ธํ„ฐ ๊ฐœ๋…์„ ์•Œ์•„์•ผ ํ’€ ์ˆ˜ ์žˆ์Œ โ˜…โ˜…โ˜… )

74. Search a 2D Matrix (2์ฐจ์› ๋ฐฐ์—ด์„ ๊ฐ€์ƒ์˜ 1์ฐจ์› ๋ฐฐ์—ด๋กœ ์ƒ๊ฐํ•ด์„œ ํˆฌํฌ์ธํ„ฐ ์‚ฌ์šฉ. )

50. Pow(x, n) (Binary Exponentiation ์ˆ˜ํ•™ ๊ฐœ๋… ์•Œ๋ฉด ์ข‹์Œ โ˜…โ˜…โ˜… )

169. Majority Element (Moore's Voting ์•Œ๊ณ ๋ฆฌ์ฆ˜. 2๊ฐœ์˜ ๋ณ€์ˆ˜, count, elementToCheck๋ฅผ ์„ ์–ธํ•ด์„œ ๋งŒ์•ฝ count๊ฐ€ '0'์ด๋ฉด ํ˜„์žฌ ๊ฐ’์„ elementToCheck์— ์ €์žฅ. ๋งŒ์•ฝ ํ˜„์žฌ ๊ฐ’๊ณผ elementToCheck์™€ ๊ฐ™์œผ๋ฉด count++, ์•„๋‹ˆ๋ฉด count--)

222. Majority Element 2 (Moore's Voting ์•Œ๊ณ ๋ฆฌ์ฆ˜. 4๊ฐœ์˜ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•ด์„œ ๋ฌธ์ œ๋ฅผ ํ’ˆ)

62. Unique Paths (๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ)

493. Reverse Pairs (merge sort ์ค‘๊ฐ„์— ํ•„์š” ๋กœ์ง ์ถ”๊ฐ€โ˜…โ˜…โ˜…โ˜…)

1. Two Sum 

18. 4Sum (์ •๋ ฌํ•œ ๋‹ค์Œ์— i, j ๊ณ ์ • ํ›„ k, l์— ๋Œ€ํ•ด ํˆฌํฌ์ธํ„ฐ ์‚ฌ์šฉ)

128. Longest Consecutive Sequence (set ์ž๋ฃŒ๊ตฌ์กฐ ํ™œ์šฉ. num - 1๋ฅผ ํ™•์ธํ•ด์„œ ๋งŒ์•ฝ ํ˜„์žฌ ๋น„๊ตํ•˜๋Š” ์ˆซ์ž๋ณด๋‹ค ์ž‘์€ ์ˆซ์ž๊ฐ€ ์žˆ์œผ๋ฉด ๋‹ค์Œ ๊ฐ’ ํ™•์ธ. ์—†์œผ๋ฉด ์—ฐ์†๋œ ์ˆซ์ž ํ™•์ธ)

3. Longest Substring Without Repeating Characters

238. Product of Array Except Self (prefix, suffix sum ๊ฐœ๋… ํ™œ์šฉ)

3070. Count Submatrices with Top-Left Element and Sum Less Than k (submatrices๋ฅผ ๊ตฌํ•ด์•ผ ํ•ด์„œ queue๋ฅผ ํ™œ์šฉํ•œ bfs๋กœ๋Š” ํ’€ ์ˆ˜ ์—†๊ณ , prefix sum ํ™œ์šฉ ํ•„์š”)

42. Trapping Rain Water (prefix max/suffix max๋ฅผ ์ฐพ์•„์„œ ํ’€ ์ˆ˜๋„ ์žˆ์ง€๋งŒ ํˆฌํฌ์ธํ„ฐ ๋˜๋Š” monotonic stack ๊ฐœ๋…์„ ํ™œ์šฉํ•ด์„œ ํ’€ ์ˆ˜๋„ ์žˆ์Œ) 

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

๊ต์ ์— ๋ณ„ ๋งŒ๋“ค๊ธฐ

์‚ผ๊ฐ ๋‹ฌํŒฝ์ด

๊ฑฐ๋ฆฌ๋‘๊ธฐ ํ™•์ธํ•˜๊ธฐ

ํ–‰๋ ฌ์˜ ๊ณฑ์…ˆ

 

 

 

 

 

 

์ฐธ๊ณ ์ž๋ฃŒ

๋„์„œ: ์ฝ”๋”ฉ ์ธํ„ฐ๋ทฐ ์™„์ „ ๋ถ„์„

๋„์„œ: ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ ๋ฌธ์ œ ํ’€์ด ์ „๋žต (์ž๋ฐ”ํŽธ)

https://github.com/jwasham/coding-interview-university?tab=readme-ov-file#arrays

https://takeuforward.org/interviews/strivers-sde-sheet-top-coding-interview-problems

 

 

 
 
 
 
 
 

'์ฝ”๋”ฉํ…Œ์ŠคํŠธ > ์•Œ๊ณ ๋ฆฌ์ฆ˜&์ž๋ฃŒ๊ตฌ์กฐ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

3. Linked List  (0) 2024.03.09

๋Œ“๊ธ€