ํ™ˆ [DSA] ํˆฌ ํฌ์ธํ„ฐ
ํฌ์ŠคํŠธ
์ทจ์†Œ

[DSA] ํˆฌ ํฌ์ธํ„ฐ


Title


๊ฐœ์š”

ํˆฌ ํฌ์ธํ„ฐ๋Š” ๋ฐฐ์—ด๊ณผ ๋ฌธ์ž์—ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ๋ฒ•์ด๋‹ค. ์ด ๋ฐฉ๋ฒ•์€ ๋ฐ˜๋ณต ๊ฐ€๋Šฅํ•œ ๊ตฌ์กฐ๋ฅผ ๋”ฐ๋ผ ์ด๋™ํ•˜๋Š” ๋‘ ๊ฐœ์˜ ์ •์ˆ˜ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ํฌํ•จํ•œ๋‹ค. ์ด ๊ธ€์—์„œ๋Š” ๋ฐฐ์—ด๊ณผ ๋ฌธ์ž์—ด์— ์ดˆ์ ์„ ๋งž์ถ”๊ณ  ์žˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” i์™€ j ๋˜๋Š” left์™€ right์™€ ๊ฐ™์€ ๋‘ ์ •์ˆ˜๊ฐ€ ์ฃผ๋กœ ์‚ฌ์šฉ๋˜๋Š”๋ฐ, ์ด๋“ค์€ ๋ฐฐ์—ด ๋˜๋Š” ๋ฌธ์ž์—ด์˜ ์ธ๋ฑ์Šค๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.

ํˆฌ ํฌ์ธํ„ฐ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์—ฌ๋Ÿฌ ๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค. ์‹œ์ž‘ํ•˜๊ธฐ ์œ„ํ•ด, ๋‹ค์Œ ๋ฐฉ๋ฒ•์„ ์‚ดํŽด๋ณด์ž:

ํฌ์ธํ„ฐ๋ฅผ ์ž…๋ ฅ์˜ ๊ฐ€์žฅ์ž๋ฆฌ ์–‘์ชฝ์—์„œ ์‹œ์ž‘ํ•œ๋‹ค. ๊ทธ๋“ค์ด ์„œ๋กœ ๋งŒ๋‚  ๋•Œ๊นŒ์ง€ ์„œ๋กœ๋ฅผ ํ–ฅํ•ด ์ด๋™ํ•œ๋‹ค.

์ด ๊ฐœ๋…์„ ๊ตฌ์ฒด์ ์ธ ๋‹จ๊ณ„๋กœ ๋‚˜๋ˆ„๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค:

  1. ํ•˜๋‚˜์˜ ํฌ์ธํ„ฐ๋Š” ์ฒซ ๋ฒˆ์งธ ์ธ๋ฑ์Šค 0์—์„œ, ๋‹ค๋ฅธ ํฌ์ธํ„ฐ๋Š” ๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค input.length - 1์—์„œ ์‹œ์ž‘ํ•œ๋‹ค.
  2. ํฌ์ธํ„ฐ๊ฐ€ ์„œ๋กœ ๊ฐ™์•„์งˆ ๋•Œ๊นŒ์ง€ while ๋ฌธ์„ ์‚ฌ์šฉํ•œ๋‹ค.
  3. ๋ฃจํ”„์˜ ๊ฐ ๋ฐ˜๋ณต์—์„œ, ํฌ์ธํ„ฐ๋ฅผ ์„œ๋กœ ํ–ฅํ•ด ์ด๋™์‹œํ‚จ๋‹ค. ์ด๋Š” ์ฒซ ๋ฒˆ์งธ ์ธ๋ฑ์Šค์—์„œ ์‹œ์ž‘ํ•œ ํฌ์ธํ„ฐ๋ฅผ ์ฆ๊ฐ€์‹œํ‚ค๊ฑฐ๋‚˜, ๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค์—์„œ ์‹œ์ž‘ํ•œ ํฌ์ธํ„ฐ๋ฅผ ๊ฐ์†Œ์‹œํ‚ค๊ฑฐ๋‚˜, ๋˜๋Š” ๋‘˜ ๋‹ค ์ˆ˜ํ–‰ํ•จ์„ ์˜๋ฏธํ•œ๋‹ค. ์–ด๋–ค ํฌ์ธํ„ฐ๋ฅผ ์ด๋™ํ• ์ง€๋Š” ์šฐ๋ฆฌ๊ฐ€ ํ•ด๊ฒฐํ•˜๋ ค๊ณ  ํ•˜๋Š” ๋ฌธ์ œ์— ๋”ฐ๋ผ ๋‹ค๋ฅด๋‹ค.

๋‹ค์Œ์€ ์ด ๊ฐœ๋…์„ ์„ค๋ช…ํ•˜๋Š” ์˜์‚ฌ ์ฝ”๋“œ์ด๋‹ค:

1
2
3
4
5
6
7
8
9
10
function fn(arr):
    left = 0
    right = arr.length - 1

    while left < right:
        ๋ฌธ์ œ์— ๋”ฐ๋ผ ์—ฌ๊ธฐ์— ์ผ๋ถ€ ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.
        ๋‹ค์Œ ์ค‘ ํ•˜๋‚˜๋ฅผ ๊ฒฐ์ •ํ•˜๊ธฐ ์œ„ํ•ด ์—ฌ๊ธฐ์— ๋” ๋งŽ์€ ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•œ๋‹ค:
            1. left++
            2. right--
            3. Both left++ and right--

์ด ๊ธฐ๋ฒ•์˜ ์žฅ์ ์€ ํฌ์ธํ„ฐ๊ฐ€ ์„œ๋กœ๋กœ๋ถ€ํ„ฐ $n$ ๊ฑฐ๋ฆฌ์—์„œ ์‹œ์ž‘ํ•˜์—ฌ ๋งค ๋ฐ˜๋ณต๋งˆ๋‹ค ์ตœ์†Œํ•œ ํ•œ ๋‹จ๊ณ„์”ฉ ๊ฐ€๊นŒ์›Œ์ง€๊ธฐ ๋•Œ๋ฌธ์— while ๋ฃจํ”„์— ๋Œ€ํ•œ ๋ฐ˜๋ณต์ด $O(n)$์„ ์ดˆ๊ณผํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ๋”ฐ๋ผ์„œ, ๊ฐ ๋ฐ˜๋ณต ๋‚ด์˜ ์ž‘์—…์„ $O(1)$์— ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด, ์ตœ์ ์˜ ์„ฑ๋Šฅ์„ ๋‚ด๋Š” ์„ ํ˜• ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด์ œ ์ด์— ๋Œ€ํ•œ ๋ช‡ ๊ฐ€์ง€ ์˜ˆ์ œ๋ฅผ ํ†ตํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณด๋„๋ก ํ•˜์ž


์˜ˆ์ œ 1: Palindrome

๋ฌธ์ž์—ด s๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ด ๋ฌธ์ž์—ด์ด ํšŒ๋ฌธ์ด๋ฉด true๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ , ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด false๋ฅผ ๋ฐ˜ํ™˜ํ•ด๋ณด์ž.

๋ฌธ์ž์—ด์ด ํšŒ๋ฌธ์ผ ๊ฒฝ์šฐ, ๊ทธ ๋ฌธ์ž์—ด์€ ์•ž์—์„œ๋ถ€ํ„ฐ ์ฝ์œผ๋‚˜ ๋’ค์—์„œ๋ถ€ํ„ฐ ์ฝ์œผ๋‚˜ ๋™์ผํ•˜๋‹ค. ์ด๋Š” ๋ฌธ์ž์—ด์„ ๋’ค์ง‘์–ด๋„ ์› ๋ฌธ์ž์—ด์ด ์œ ์ง€๋˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. ์˜ˆ์‹œ๋กœ โ€œabcdcbaโ€๋‚˜ โ€œracecarโ€๊ฐ€ ์žˆ๋‹ค.

๋ฌธ์ž์—ด์„ ๋’ค์ง‘์œผ๋ฉด, ์ฒซ ๋ฒˆ์งธ ๋ฌธ์ž๊ฐ€ ๋งˆ์ง€๋ง‰ ๋ฌธ์ž ์œ„์น˜์— ์˜ค๊ฒŒ ๋œ๋‹ค. ๋งŒ์•ฝ ๋ฌธ์ž์—ด์ด ๋’ค์ง‘์–ด์ง„ ์ƒํƒœ์—์„œ๋„ ๋™์ผํ•˜๋‹ค๋ฉด, ์ฒซ ๋ฌธ์ž์™€ ๋งˆ์ง€๋ง‰ ๋ฌธ์ž๊ฐ€ ๋™์ผํ•˜๊ณ , ๋‘ ๋ฒˆ์งธ ๋ฌธ์ž์™€ ๋’ค์—์„œ ๋‘ ๋ฒˆ์งธ ๋ฌธ์ž๊ฐ€ ๋™์ผํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜๋ฉฐ, ์ด ํŒจํ„ด์ด ๊ณ„์† ์ง„ํ–‰๋œ๋‹ค. ์ด๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ํˆฌ ํฌ์ธํ„ฐ ๊ธฐ๋ฒ•์ด ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค. ์ฒ˜์Œ์—๋Š” ๋‘ ๊ฐœ์˜ ํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์ž์—ด์˜ ์ฒซ ๋ฌธ์ž์™€ ๋งˆ์ง€๋ง‰ ๋ฌธ์ž๋ฅผ ๊ฒ€์‚ฌํ•œ๋‹ค. ๋‹ค์Œ ์Œ์˜ ๋ฌธ์ž๋ฅผ ๊ฒ€์‚ฌํ•˜๋ ค๋ฉด ํฌ์ธํ„ฐ๋ฅผ ์„œ๋กœ ํ•œ ์นธ์”ฉ ์ด๋™ํ•˜๋ฉด ๋œ๋‹ค. ํฌ์ธํ„ฐ๊ฐ€ ์„œ๋กœ ๋งŒ๋‚˜๊ฑฐ๋‚˜ ๋ถˆ์ผ์น˜ํ•˜๋Š” ๋ฌธ์ž๋ฅผ ๋ฐœ๊ฒฌํ•  ๋•Œ๊นŒ์ง€ ์ด ๊ณผ์ •์„ ์ด์–ด๊ฐ„๋‹ค.

์˜ˆ์ œ 1 ์ƒ์„ธ ๋‚ด์šฉ

์šฐ๋ฆฌ๋Š” ๋‘ ๊ฐœ์˜ ์ธ๋ฑ์Šค, ์ฆ‰ ์™ผ์ชฝ ์ธ๋ฑ์Šค์™€ ์˜ค๋ฅธ์ชฝ ์ธ๋ฑ์Šค๋ฅผ ์ถ”์ ํ•œ๋‹ค. ์ฒ˜์Œ์— ์™ผ์ชฝ ์ธ๋ฑ์Šค๋Š” ์ฒซ ๋ฒˆ์งธ ๋ฌธ์ž๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ณ , ์˜ค๋ฅธ์ชฝ ์ธ๋ฑ์Šค๋Š” ๋งˆ์ง€๋ง‰ ๋ฌธ์ž๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค. ์ด ๋ฌธ์ž๋“ค์ด ์„œ๋กœ ๊ฐ™์ง€ ์•Š๋‹ค๋ฉด, ํ•ด๋‹น ๋ฌธ์ž์—ด์ด ํšŒ๋ฌธ์ผ ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ , false๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋ฌธ์ž์—ด์ด ํšŒ๋ฌธ์ผ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ๋‹ค์Œ ์Œ์„ ํ™•์ธํ•ด์•ผ ํ•œ๋‹ค. ๋‹ค์Œ ์Œ์œผ๋กœ ๋„˜์–ด๊ฐ€๊ธฐ ์œ„ํ•ด, ์™ผ์ชฝ ์ธ๋ฑ์Šค๋ฅผ ํ•˜๋‚˜ ์•ž์œผ๋กœ ์ด๋™์‹œํ‚ค๊ณ  ์˜ค๋ฅธ์ชฝ ์ธ๋ฑ์Šค๋ฅผ ํ•˜๋‚˜ ๋’ค๋กœ ์ด๋™์‹œํ‚จ๋‹ค. ๋‹ค์‹œ, ๋ฌธ์ž ์Œ์ด ๊ฐ™์€์ง€ ํ™•์ธํ•˜๊ณ , ๊ฐ™์ง€ ์•Š๋‹ค๋ฉด false๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

์šฐ๋ฆฌ๋Š” ๋ถˆ์ผ์น˜๋ฅผ ๋ฐœ๊ฒฌํ•  ๋•Œ๊นŒ์ง€(์ด ๊ฒฝ์šฐ ๋ฌธ์ž์—ด์€ ํšŒ๋ฌธ์ด ๋  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ false๋ฅผ ๋ฐ˜ํ™˜) ๋˜๋Š” ํฌ์ธํ„ฐ๊ฐ€ ์„œ๋กœ ๋งŒ๋‚  ๋•Œ๊นŒ์ง€(์ด๋Š” ๋ชจ๋“  ์Œ์„ ํ™•์ธํ•˜๋ฉด์„œ ๋ฌธ์ž์—ด ์ „์ฒด๋ฅผ ๊ฒ€ํ† ํ–ˆ์Œ์„ ๋‚˜ํƒ€๋ƒ„) ์ด ๊ณผ์ •์„ ๊ณ„์†ํ•œ๋‹ค. ๋ชจ๋“  ์Œ์„ ๋ถˆ์ผ์น˜ ์—†์ด ๊ฑฐ์น˜๋ฉด ๋ฌธ์ž์—ด์ด ํšŒ๋ฌธ์ž„์„ ์•Œ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ true๋ฅผ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

ํฌ์ธํ„ฐ๊ฐ€ ์„œ๋กœ ๋งŒ๋‚  ๋•Œ๊นŒ์ง€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‹คํ–‰ํ•˜๋ ค๋ฉด while ๋ฌธ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. while ๋ฌธ์˜ ๊ฐ ๋ฐ˜๋ณต์€ ํ•˜๋‚˜์˜ ์Œ์„ ํ™•์ธํ•œ๋‹ค. ํ™•์ธ์ด ์„ฑ๊ณตํ•˜๋ฉด left๋ฅผ ์ฆ๊ฐ€์‹œํ‚ค๊ณ  right๋ฅผ ๊ฐ์†Œ์‹œ์ผœ ๋‹ค์Œ ์Œ์œผ๋กœ ์ด๋™ํ•œ๋‹ค. ํ™•์ธ์— ์‹คํŒจํ•˜๋ฉด false๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

n์€ ์ „์ฒด ๋ฌธ์ž ์ˆ˜์ด๋ฏ€๋กœ, n - i - 1์€ ๋งˆ์ง€๋ง‰, ๋งˆ์ง€๋ง‰์—์„œ ๋‘ ๋ฒˆ์งธ, ๋งˆ์ง€๋ง‰์—์„œ ์„ธ ๋ฒˆ์งธ ๋“ฑ์˜ ๋ฌธ์ž์— ํ•ด๋‹นํ•œ๋‹ค. ์ž…๋ ฅ๊ฐ’์ด 0์œผ๋กœ ์ธ๋ฑ์‹ฑ๋˜๊ธฐ ๋•Œ๋ฌธ์— -1์ด ํ•„์š”ํ•˜๋‹ค.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
bool checkIfPalindrome(string s) {
    int left = 0;
    int right = s.size() - 1;
    
    while (left < right) {
        if (s[left] != s[right]) {
            return false;
        }
        left++;
        right--;
    }
    
    return true;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
fn check_if_palindrome(s: &str) -> bool {
    let bytes = s.as_bytes();
    let mut left = 0;
    let mut right = s.len() - 1;

    while left < right {
        if bytes[left] != bytes[right] {
            return false;
        }
        left += 1;
        right -= 1;
    }

    true
}

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

์ด ๋ฐฉ๋ฒ•์€ ๊ต‰์žฅํžˆ ํšจ์œจ์ ์ด๋‹ค. ์™œ๋ƒํ•˜๋ฉด ์‹คํ–‰ ์‹œ๊ฐ„์€ $O(n)$์ด๊ณ , ์‚ฌ์šฉํ•˜๋Š” ๊ณต๊ฐ„์€ $O(1)$์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ž…๋ ฅ ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ์™€ ์ƒ๊ด€์—†์ด ์˜ค์ง ๋‘ ์ •์ˆ˜ ๋ณ€์ˆ˜๋งŒ์„ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ, ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์€ ๋งค์šฐ ์ ˆ์•ฝ๋œ๋‹ค. ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” $O(n)$์ธ๋ฐ, ๊ทธ ์ด์œ ๋Š” while ๋ฌธ์„ ์‚ฌ์šฉํ•œ ๋ฐ˜๋ณต ๊ฐ๊ฐ์ด $O(1)$์˜ ์‹œ๊ฐ„์„ ์†Œ๋ชจํ•˜๊ณ , ์ด while ๋ฌธ ๋ฐ˜๋ณต์€ $O(n)$์„ ์ดˆ๊ณผํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ด ํฌ์ธํ„ฐ๋“ค์€ ์ฒ˜์Œ์— ์„œ๋กœ $O(n)$์˜ ๊ฑฐ๋ฆฌ์— ๋–จ์–ด์ ธ ์žˆ์œผ๋ฉฐ, ๋ฐ˜๋ณตํ•  ๋•Œ๋งˆ๋‹ค ํ•œ ๋‹จ๊ณ„์”ฉ ์„œ๋กœ์—๊ฒŒ ๊ฐ€๊นŒ์›Œ์ง„๋‹ค.


์˜ˆ์ œ 2: ๋‘ ์ˆ˜์˜ ํ•ฉ์ด ๋ชฉํ‘œ๊ฐ’์ธ ์Œ์˜ ์กด์žฌ ์—ฌ๋ถ€

์ค‘๋ณต๋˜์ง€ ์•Š๋Š” ์ •์ˆ˜๋กœ ์ •๋ ฌ๋œ ๋ฐฐ์—ด๊ณผ ๋ชฉํ‘œ ์ •์ˆ˜๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ๋‘ ์ˆ˜์˜ ํ•ฉ์ด ๋ชฉํ‘œ๊ฐ’๊ณผ ๊ฐ™์€ ์ˆ˜์˜ ์Œ์ด ์กด์žฌํ•˜๋ฉด true๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ , ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด false๋ฅผ ๋ฐ˜ํ™˜ํ•ด๋ณด์ž. ์ด ๋ฌธ์ œ๋Š” Two Sum๊ณผ ์œ ์‚ฌํ•˜๋‹ค. (Two Sum์—์„œ๋Š” ์ž…๋ ฅ์ด ์ •๋ ฌ๋˜์ง€ ์•Š๋Š”๋‹ค).

์˜ˆ๋ฅผ ๋“ค์–ด, nums = [1, 2, 4, 6, 8, 9, 14, 15] ๋ฐ target = 13์ด ์ฃผ์–ด์ง„ ๊ฒฝ์šฐ, 4 + 9 = 13์ด๋ฏ€๋กœ true๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

๊ฐ€์žฅ ์ง๊ด€์ ์ธ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ ๋ชจ๋“  ์ˆซ์ž ์Œ์„ ๋ฐ˜๋ณตํ•˜์—ฌ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์ด ๋ฐฉ์‹์€ ๊ฐ ์ˆซ์ž๊ฐ€ ๋‹ค๋ฅธ ์ˆซ์ž์™€ ์ง์„ ์ด๋ฃจ๊ฒŒ ๋˜๋ฏ€๋กœ $O(n^2)$์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ€์ง„๋‹ค. ์—ฌ๊ธฐ์„œ $n$์€ ๋ฐฐ์—ด์˜ ๊ธธ์ด์ด๋‹ค. ๋ฐฐ์—ด์ด ์ •๋ ฌ๋œ ์ƒํƒœ์ด๋ฏ€๋กœ, ํˆฌ ํฌ์ธํ„ฐ ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋ฉด ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ $O(n)$์œผ๋กœ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.

์˜ˆ์ œ์˜ ์ž…๋ ฅ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฅผ ์‚ดํŽด๋ณด์ž. ํˆฌ ํฌ์ธํ„ฐ ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ, ์ฒซ ๋ฒˆ์งธ ์ˆซ์ž์™€ ๋งˆ์ง€๋ง‰ ์ˆซ์ž๋ถ€ํ„ฐ ํ™•์ธ์„ ์‹œ์ž‘ํ•œ๋‹ค. ์ด๋“ค์˜ ํ•ฉ๊ณ„๋Š” 1 + 15 = 16์ด๋‹ค. 16์€ ๋ชฉํ‘œ๊ฐ’๋ณด๋‹ค ํฌ๋ฏ€๋กœ, ํ•ฉ๊ณ„๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด ์˜ค๋ฅธ์ชฝ ํฌ์ธํ„ฐ๋ฅผ ์ด๋™ํ•œ๋‹ค. ๋‹ค์Œ์œผ๋กœ, 1 + 14 = 15์˜ ํ•ฉ๊ณ„๋ฅผ ์–ป๊ฒŒ ๋˜๋Š”๋ฐ, ์ด ๊ฒฝ์šฐ์—๋„ ํ•ฉ๊ณ„๊ฐ€ ๋” ํฌ๋ฏ€๋กœ ์˜ค๋ฅธ์ชฝ ํฌ์ธํ„ฐ๋ฅผ ์ด๋™ํ•œ๋‹ค. ์ดํ›„ 1 + 9 = 10์ด ๋˜๋ฉฐ, ์ด ํ•ฉ๊ณ„๊ฐ€ ๋” ์ž‘์œผ๋ฏ€๋กœ ์™ผ์ชฝ ํฌ์ธํ„ฐ๋ฅผ ์ด๋™ํ•˜์—ฌ ํ•ฉ๊ณ„๋ฅผ ์ฆ๊ฐ€์‹œ์ผœ์•ผ ํ•œ๋‹ค. 2 + 9 = 11์€ ๋ชฉํ‘œ๊ฐ’๋ณด๋‹ค ์ž‘์œผ๋ฏ€๋กœ ํฌ์ธํ„ฐ๋ฅผ ๋‹ค์‹œ ์ด๋™์‹œํ‚จ๋‹ค. ๊ฒฐ๊ตญ, 4 + 9 = 13์œผ๋กœ ๋ชฉํ‘œ๊ฐ’์— ๋„๋‹ฌํ•œ๋‹ค.

์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์ž‘๋™ํ•˜๋Š” ์›๋ฆฌ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค: ์ˆซ์ž๊ฐ€ ์ •๋ ฌ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ์™ผ์ชฝ ํฌ์ธํ„ฐ๋ฅผ ์ด๋™ํ•˜๋ฉด ํ•ด๋‹น ํฌ์ธํ„ฐ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฐ’์ด ๊ณ„์†ํ•ด์„œ ์ฆ๊ฐ€ํ•œ๋‹ค(nums[left] = x). ๋ฐ˜๋Œ€๋กœ, ์˜ค๋ฅธ์ชฝ ํฌ์ธํ„ฐ๋ฅผ ์ด๋™ํ•˜๋ฉด ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฐ’์ด ๊ณ„์†ํ•ด์„œ ๊ฐ์†Œํ•œ๋‹ค(nums[right] = y). x + y > target์ธ ์ƒํ™ฉ์—์„œ๋Š” x๊ฐ€ ๊ณ„์† ์ฆ๊ฐ€ํ•  ์ˆ˜๋ฐ–์— ์—†์œผ๋ฏ€๋กœ, y์™€์˜ ์กฐํ•ฉ์œผ๋กœ๋Š” ํ•ด๊ฒฐ์ฑ…์„ ์ฐพ์„ ์ˆ˜ ์—†๋‹ค. ๋”ฐ๋ผ์„œ ๊ฐ€๋Šฅํ•œ ํ•ด๊ฒฐ์ฑ…์ด ์žˆ๋‹ค๋ฉด y๋ฅผ ๊ฐ์†Œ์‹œํ‚ค๋ฉฐ ๊ทธ๊ฒƒ์„ ์ฐพ์•„์•ผ ํ•œ๋‹ค. x + y < target์ธ ๊ฒฝ์šฐ์—๋„ ๋น„์Šทํ•œ ๋…ผ๋ฆฌ๊ฐ€ x์— ์ ์šฉ๋˜์–ด, x๋ฅผ ์ฆ๊ฐ€์‹œํ‚ค๋ฉฐ ํ•ด๊ฒฐ์ฑ…์„ ์ฐพ์•„์•ผ ํ•œ๋‹ค.

์˜ˆ์ œ 2 ์ƒ์„ธ ๋‚ด์šฉ

nums = [3, 6, 21, 23, 25] ๋ฐฐ์—ด๊ณผ target = 27์ด ์žˆ๋‹ค๊ณ  ํ•ด๋ณด์ž. ์šฐ๋ฆฌ์˜ ๋ชฉํ‘œ๋Š” ๋‘ ์ˆ˜๋ฅผ ๊ณจ๋ผ ๊ทธ ํ•ฉ์ด target์ด ๋˜๋Š” ๊ฒƒ์ด๋‹ค. ํˆฌ ํฌ์ธํ„ฐ ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ, ๋ฐฐ์—ด์˜ ์ฒ˜์Œ๊ณผ ๋์—์„œ ์‹œ์ž‘ํ•œ๋‹ค. ๋ฐฐ์—ด์ด ์ •๋ ฌ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ, ์ด๊ฒƒ์€ ๊ฐ€์žฅ ์ž‘์€ ์ˆ˜์™€ ๊ฐ€์žฅ ํฐ ์ˆ˜๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ํ˜„์žฌ 3 + 25 = 28๋กœ, ์ด ํ•ฉ์€ target๋ณด๋‹ค ํฌ๋‹ค.

25๋ฅผ ์‚ดํŽด๋ณด๋ฉด, ๊ฐ€์žฅ ์ž‘์€ ์ˆ˜์™€์˜ ํ•ฉ์‚ฐ๋„ target์„ ์ดˆ๊ณผํ•˜๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ์ด๋Š” 25๊ฐ€ ๋‹ต์˜ ์ผ๋ถ€์ผ ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. ์™œ๋ƒํ•˜๋ฉด 25๋ณด๋‹ค ์ž‘์€ ๋‹ค๋ฅธ ์ˆ˜์™€ ์ง์„ ์ง€์–ด๋„ ํ•ฉ์ด ๋” ์ปค์ง€๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋”ฐ๋ผ์„œ, 25๋ฅผ ์ œ์™ธํ•˜๊ณ  ๋‹ค์Œ์œผ๋กœ ํฐ ์ˆ˜์ธ 23์œผ๋กœ ๋„˜์–ด๊ฐ„๋‹ค.

์ด์ œ, 3 + 23 = 26์œผ๋กœ, ์ด ํ•ฉ์€ target๋ณด๋‹ค ์ž‘๋‹ค. ์šฐ๋ฆฌ๋Š” ์ด๋ฏธ 25๋ฅผ ๋‹ต์—์„œ ์ œ์™ธํ–ˆ๋‹ค. ์ด ์ƒํ™ฉ์—์„œ 23์ด ๊ฐ€์žฅ ํฐ ์ˆ˜๊ฐ€ ๋œ๋‹ค. ๊ทธ๋Ÿผ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  3๊ณผ์˜ ํ•ฉ์ด ๋ชฉํ‘œ์น˜์— ๋ฏธ์น˜์ง€ ๋ชปํ•œ๋‹ค. ์ด๋Š” 3์ด ๋” ํฐ ์ˆ˜์™€ ์ง์„ ์ง€์–ด๋„ target์— ๋„๋‹ฌํ•˜์ง€ ๋ชปํ•  ๊ฒƒ์ด๋ผ๋Š” ์˜๋ฏธ์ด๋ฏ€๋กœ, 3 ์—ญ์‹œ ๋‹ต์˜ ์กฐ๊ฑด์—์„œ ์ œ์™ธํ•œ๋‹ค.

๋‹ค์Œ์œผ๋กœ 6์ด ์„ ํƒ๋œ๋‹ค. ์ด์ œ ํ•ฉ์€ 6 + 23 = 29๊ฐ€ ๋˜๋Š”๋ฐ, ์ด๋Š” ๋˜ํ•œ ๋„ˆ๋ฌด ํฌ๋‹ค. ์ด์ „์˜ ๋…ผ๋ฆฌ์— ๋”ฐ๋ผ, 23 ์—ญ์‹œ ๋‹ต์ด ๋  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒฐ๋ก ์„ ๋‚ด๋ฆฐ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ๊ฐ€๋Šฅํ•œ ๊ฐ€์žฅ ์ž‘์€ ์ˆ˜์™€์˜ ํ•ฉ์‚ฐ๋„ target์„ ์ดˆ๊ณผํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๊ทธ๋ž˜์„œ ์ด์ œ 21๋กœ ๋„˜์–ด๊ฐ€ ๋ณด๋ฉด, 6 + 21 = 27์ด ๋˜์–ด ์šฐ๋ฆฌ๊ฐ€ ์ฐพ๋˜ ๋‹ต์„ ์–ป๊ฒŒ ๋œ๋‹ค.

์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด, ํฌ์ธํ„ฐ๊ฐ€ ์„œ๋กœ ๋งŒ๋‚˜๊ฑฐ๋‚˜, ํ•ฉ์ด target๊ณผ ๊ฐ™์•„์งˆ ๋•Œ๊นŒ์ง€ ํฌ์ธํ„ฐ๋ฅผ ์ด๋™์‹œํ‚ค๋ฉฐ while ๋ฌธ์„ ์‹คํ–‰ํ•œ๋‹ค. ๋งŒ์•ฝ ์–ธ์ œ๋“ ์ง€ ํ•ฉ์ด target๊ณผ ๊ฐ™๋‹ค๋ฉด, ๊ทธ๋•Œ๋Š” true๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ํฌ์ธํ„ฐ๋“ค์ด ์„œ๋กœ ๋งŒ๋‚ฌ๋Š”๋ฐ๋„ target์„ ์ฐพ์ง€ ๋ชปํ•œ ๊ฒฝ์šฐ, false๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉด ๋œ๋‹ค. ์ด ๋ฐฉ์‹์€ ์ž…๋ ฅ๋œ ๋ฐฐ์—ด์„ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ์ฒดํฌํ•˜๋Š” ๊ณผ์ •์„ ํ†ตํ•ด ์ด๋ฃจ์–ด์ง„๋‹ค.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
bool checkForTarget(vector<int>& nums, int target) {
    int left = 0;
    int right = nums.size() - 1;
    while (left < right) {
        int curr = nums[left] + nums[right];
        if (curr == target) {
            return true;
        }
        if (curr > target) {
            right--;
        } else {
            left++;
        }
    }

    return false;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
fn check_for_target(nums: &[i32], target: i32) -> bool {
    let mut left = 0;
    let mut right = nums.len() - 1;
    
    while left < right {
        let curr = nums[left] + nums[right];
        if curr == target {
            return true;
        }
        if curr > target {
            right -= 1;
        } else {
            left += 1;
        }
    }

    false
}

์ด์ „ ์˜ˆ์ œ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ, ์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ $O(1)$์˜ ๊ณต๊ฐ„ ๋ณต์žก๋„๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ, ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” $O(n)$์ด๋‹ค.


ํˆฌ ํฌ์ธํ„ฐ๋ฅผ ํ™œ์šฉํ•˜๋Š” ๋˜ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•

ํฌ์ธํ„ฐ ๋‘ ๊ฐœ๋ฅผ ๋ฐฐ์—ด์˜ ์ฒ˜์Œ๊ณผ ๋์—์„œ ์‹œ์ž‘ํ•˜์—ฌ ์„œ๋กœ๋ฅผ ํ–ฅํ•ด ์ด๋™์‹œํ‚ค๋Š” ๋ฐฉ์‹์€ ํˆฌ ํฌ์ธํ„ฐ๋ฅผ ํ™œ์šฉํ•˜๋Š” ์—ฌ๋Ÿฌ ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜์— ๋ถˆ๊ณผํ•˜๋‹ค. ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์•„๋ฆ„๋‹ค์šด ์ด์œ  ์ค‘ ํ•˜๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ์–ผ๋งˆ๋‚˜ ์ถ”์ƒ์ ์œผ๋กœ ๋‹ค์–‘ํ•œ ๋ฐฉ์‹์œผ๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š”์ง€์— ์žˆ๋‹ค. โ€œํˆฌ ํฌ์ธํ„ฐโ€๋Š” ๋‹จ์ง€ ํ•œ ๋ฐฉ๋ฒ•์ผ ๋ฟ, ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ํ˜•ํƒœ๋กœ ๊ตฌํ˜„๋  ์ˆ˜ ์žˆ๋‹ค. ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•๊ณผ ์ƒˆ๋กœ์šด ์˜ˆ์ œ๋“ค์„ ํ†ตํ•ด ์ด ๊ฐœ๋…์„ ๋” ํƒ์ƒ‰ํ•ด๋ณด์ž. ๋‹ค์Œ ์„ค๋ช…ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์ž…๋ ฅ๊ฐ’์œผ๋กœ ๋‘ ๊ฐœ์˜ ์ˆœํšŒ ๊ฐ€๋Šฅํ•œ ์‹œํ€€์Šค(์˜ˆ: ๋‘ ๋ฐฐ์—ด)๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ์— ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

๋‘ ์ž…๋ ฅ ์‹œํ€€์Šค๋ฅผ ๋™์‹œ์— ์ˆœํšŒํ•˜๋ฉฐ ๋ชจ๋“  ์š”์†Œ๋ฅผ ํ™•์ธํ•œ๋‹ค.

์ด ๊ฐœ๋…์„ ๋‹จ๊ณ„๋ณ„๋กœ ๋‚˜๋ˆ„๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค:

  1. ๊ฐ ์ˆœํšŒ ๊ฐ€๋Šฅํ•œ ์‹œํ€€์Šค๋งˆ๋‹ค ํฌ์ธํ„ฐ ํ•˜๋‚˜์”ฉ, ์ด ๋‘ ๊ฐœ์˜ ํฌ์ธํ„ฐ๋ฅผ ๋งŒ๋“ ๋‹ค. ์ด ํฌ์ธํ„ฐ๋“ค์€ ์ฒซ ๋ฒˆ์งธ ์ธ๋ฑ์Šค์—์„œ ์‹œ์ž‘ํ•œ๋‹ค.
  2. ํฌ์ธํ„ฐ ์ค‘ ํ•˜๋‚˜๊ฐ€ ํ•ด๋‹น ์‹œํ€€์Šค์˜ ๋์— ๋„๋‹ฌํ•  ๋•Œ๊นŒ์ง€ while ๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ˜๋ณตํ•œ๋‹ค.
  3. ๋ฐ˜๋ณต์˜ ๊ฐ ๋‹จ๊ณ„์—์„œ ํฌ์ธํ„ฐ๋ฅผ ์•ž์œผ๋กœ ์ด๋™์‹œํ‚จ๋‹ค. ์ด๋Š” ํฌ์ธํ„ฐ ์ค‘ ํ•˜๋‚˜ ํ˜น์€ ๋‘˜ ๋‹ค๋ฅผ ์ฆ๊ฐ€์‹œํ‚ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. ์–ด๋–ค ํฌ์ธํ„ฐ๋ฅผ ์ด๋™์‹œํ‚ฌ์ง€๋Š” ์šฐ๋ฆฌ๊ฐ€ ํ•ด๊ฒฐํ•˜๊ณ ์ž ํ•˜๋Š” ๋ฌธ์ œ์˜ ์„ฑ๊ฒฉ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง„๋‹ค.
  4. while ๋ฌธ์€ ํ•˜๋‚˜์˜ ํฌ์ธํ„ฐ๊ฐ€ ๋์— ๋„๋‹ฌํ•˜๋ฉด ์ข…๋ฃŒ๋˜๋ฏ€๋กœ, ๋ฐ˜๋ณต์ด ๋๋‚ฌ์„ ๋•Œ ๋‹ค๋ฅธ ํฌ์ธํ„ฐ๋Š” ์•„์ง ํ•ด๋‹น ์‹œํ€€์Šค์˜ ๋์— ๋„๋‹ฌํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค. ๊ฒฝ์šฐ์— ๋”ฐ๋ผ ๋ชจ๋“  ์š”์†Œ๋ฅผ ์ฒดํฌํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์ด ๊ฒฝ์šฐ ๋‘ ์‹œํ€€์Šค๊ฐ€ ์™„์ „ํžˆ ์†Œ์ง„๋  ๋•Œ๊นŒ์ง€ ์ถ”๊ฐ€์ ์ธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์•ผ ํ•œ๋‹ค.

์ด๋Ÿฌํ•œ ๊ฐœ๋…์„ ์˜์‚ฌ ์ฝ”๋“œ๋กœ ๋‚˜ํƒ€๋‚ด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function fn(arr1, arr2):
    i = j = 0
    while i < arr1.length AND j < arr2.length:
        ๋ฌธ์ œ์˜ ํŠน์„ฑ์— ๋งž๋Š” ๋กœ์ง์„ ์—ฌ๊ธฐ์— ๊ตฌํ˜„ํ•œ๋‹ค.
        ๊ทธ๋ฆฌ๊ณ  ๋‹ค์Œ ๋™์ž‘ ์ค‘ ํ•˜๋‚˜๋ฅผ ๊ฒฐ์ •ํ•˜๊ธฐ ์œ„ํ•œ ์ถ”๊ฐ€ ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•œ๋‹ค:
            1. i++
            2. j++
            3. i++ ๋ฐ j++

    // 4๋‹จ๊ณ„: ๋‘ ์‹œํ€€์Šค๊ฐ€ ๋ชจ๋‘ ์†Œ์ง„๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.
    // ์•„๋ž˜ ๋ฃจํ”„ ์ค‘ ํ•˜๋‚˜๋งŒ ์‹คํ–‰๋  ๊ฒƒ์ด๋ผ๋Š” ์ ์„ ์œ ์˜ํ•œ๋‹ค.
    while i < arr1.length:
        ๋ฌธ์ œ์˜ ํŠน์„ฑ์— ๋งž๋Š” ์ถ”๊ฐ€ ๋กœ์ง์„ ์—ฌ๊ธฐ์— ๊ตฌํ˜„ํ•œ๋‹ค.
        i++

    while j < arr2.length:
        ๋ฌธ์ œ์˜ ํŠน์„ฑ์— ๋งž๋Š” ์ถ”๊ฐ€ ๋กœ์ง์„ ์—ฌ๊ธฐ์— ๊ตฌํ˜„ํ•œ๋‹ค.
        j++

์ฒซ ๋ฒˆ์งธ ๋ฐฉ๋ฒ•๊ณผ ์œ ์‚ฌํ•˜๊ฒŒ, ์ด ๋ฐฉ๋ฒ•์€ while ๋ฌธ ๋‚ด์˜ ์ž‘์—…์ด $O(1)$์ด๋ฉด ์„ ํ˜• ์‹œ๊ฐ„ ๋ณต์žก๋„ $O(n + m)$์„ ๊ฐ€์ง€๊ฒŒ ๋œ๋‹ค. n์€ arr1์˜ ๊ธธ์ด์ด๊ณ , m์€ arr2์˜ ๊ธธ์ด์ด๋‹ค. ์ด๋Š” ๊ฐ ๋ฐ˜๋ณต์—์„œ ์ ์–ด๋„ ํ•˜๋‚˜์˜ ํฌ์ธํ„ฐ๊ฐ€ ์•ž์œผ๋กœ ์ด๋™ํ•˜๋ฉฐ, n + m ๋ฒˆ์˜ ์ด๋™ ์—†์ด๋Š” ๋ฐฐ์—ด๋“ค์ด ์™„์ „ํžˆ ์†Œ์ง„๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ด์ œ ๋ช‡ ๊ฐ€์ง€ ์˜ˆ์ œ๋ฅผ ํ†ตํ•ด ์ด ๋ฐฉ๋ฒ•์„ ๋” ๊นŠ์ด ์ดํ•ดํ•ด ๋ณด์ž.


์˜ˆ์ œ 3: ๋‘ ๋ฐฐ์—ด์˜ ์ •๋ ฌ๋œ ๊ฒฐํ•ฉ

์ •๋ ฌ๋œ ๋‘ ์ •์ˆ˜ ๋ฐฐ์—ด arr1๊ณผ arr2๋ฅผ ์ž…๋ ฅ์œผ๋กœ ๋ฐ›๋Š”๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด๋“ค์„ ํ•ฉ์ณ ์ •๋ ฌ๋œ ์ƒˆ ๋ฐฐ์—ด์„ ๋งŒ๋“ค์–ด ๋ฐ˜ํ™˜ํ•ด๋ณด์ž.

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ฐ€์žฅ ๋‹จ์ˆœํ•œ ๋ฐฉ๋ฒ•์€ ๋‘ ๋ฐฐ์—ด์„ ํ•ฉ์นœ ํ›„, ์ •๋ ฌ์„ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๋งŒ์•ฝ n์ด arr1๊ณผ arr2์˜ ๊ธธ์ด์˜ ํ•ฉ์ด๋ผ๋ฉด, ์ด ๋ฐฉ์‹์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” ์ •๋ ฌํ•˜๋Š” ๋ฐ ๋“œ๋Š” ๋น„์šฉ ๋•Œ๋ฌธ์— $O(n \cdot \log{}n)$์ด ๋œ๋‹ค. ํ•˜์ง€๋งŒ, ์ž…๋ ฅ ๋ฐฐ์—ด์ด ์ด๋ฏธ ์ •๋ ฌ๋˜์–ด ์žˆ๋‹ค๋ฉด, ํˆฌ ํฌ์ธํ„ฐ ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•ด ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ $O(n)$๊นŒ์ง€ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.

์ด์ „ ์„ค๋ช…์—์„œ๋Š” n์„ arr1์˜ ๊ธธ์ด๋กœ, m์„ arr2์˜ ๊ธธ์ด๋กœ ์ •์˜ํ–ˆ์—ˆ๋‹ค. ํ•˜์ง€๋งŒ ์—ฌ๊ธฐ์„œ๋Š” n์„ arr1์˜ ๊ธธ์ด์™€ arr2์˜ ๊ธธ์ด์˜ ํ•ฉ์œผ๋กœ ๋ณด๊ณ  ์žˆ๋‹ค. ์ด์œ ๋Š” ๋ฌด์—‡์ผ๊นŒ? ๋น…์˜ค ํ‘œ๊ธฐ๋ฒ•์—์„œ๋Š” ๋ณ€์ˆ˜๋ฅผ ์šฐ๋ฆฌ๊ฐ€ ํ•„์š”์— ๋”ฐ๋ผ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์„ ๊ธฐ์–ตํ•˜์ž. n๊ณผ m์„ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•ด๋„ ๋˜์ง€๋งŒ, ๋‘ ๋ฐฐ์—ด์„ ํ•ฉ์น˜๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•  ๋•Œ ์ „์ฒด ๊ธธ์ด๊ฐ€ ์ค‘์š”ํ•œ ์ •๋ณด์ด๋ฏ€๋กœ n์œผ๋กœ ํ‘œํ˜„ํ•˜๋Š” ๊ฒƒ์ด ์ ์ ˆํ•˜๋‹ค. ์ด์— ๋”ฐ๋ผ ์ •๋ ฌ ๋ฐฉ์‹์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” $O((n + m) \cdot \log(n + m))$์ด๊ณ , ๋‹ค์Œ์— ์„ค๋ช…ํ•  ๋ฐฉ์‹์€ $O(n + m)$์ด ๋  ๊ฒƒ์ด๋‹ค.

์ •๋‹ต ๋ฐฐ์—ด ans๋ฅผ ๋งŒ๋“œ๋Š” ๊ณผ์ •์€ ๋‹จ๊ณ„์ ์ด๋‹ค. ๋‘ ๋ฐฐ์—ด์˜ ์ฒซ ๋ฒˆ์งธ ์š”์†Œ์—์„œ ์‹œ์ž‘ํ•˜์—ฌ, ๊ฐ ๋‹จ๊ณ„์—์„œ ๋‘ ์š”์†Œ๋ฅผ ๋น„๊ตํ•œ๋‹ค. ๋” ์ž‘์€ ๊ฐ’์„ ans์— ์ถ”๊ฐ€ํ•˜๊ณ , ๊ทธ์— ํ•ด๋‹นํ•˜๋Š” ๋ฐฐ์—ด์˜ ํฌ์ธํ„ฐ๋ฅผ ๋‹ค์Œ ์œ„์น˜๋กœ ์˜ฎ๊ธด๋‹ค. ์ด ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•˜๋ฉด, ์ตœ์ข…์ ์œผ๋กœ ์ •๋ ฌ๋œ ๋ฐฐ์—ด์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

์˜ˆ์ œ 3 ์ƒ์„ธ ๋‚ด์šฉ

๋ฐฐ์—ด์˜ ๊ธธ์ด๊ฐ€ $n$์ผ ๋•Œ, ์ •๋ ฌํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์‹œ๊ฐ„์€ $O(n \cdot \log{}n)$์ด๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๋ฏธ ์ •๋ ฌ๋œ ๋ฐฐ์—ด์„ ์ด์šฉํ•œ๋‹ค๋ฉด, $\log{}n$ ์š”์†Œ๋ฅผ ์ค„์ผ ์ˆ˜๊ฐ€ ์žˆ์–ด ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

์ฒ˜์Œ์—๋Š” ๊ฐ ๋ฐฐ์—ด์—์„œ ๊ฐ€์žฅ ์ž‘์€ ์ˆซ์ž๋ฅผ ๋ณด๊ณ  ์‹œ์ž‘ํ•œ๋‹ค. ๋‘ ์ˆซ์ž ์ค‘ ๋” ์ž‘์€ ์ˆซ์ž๋Š” ๋ฐ˜๋“œ์‹œ ๋‹ค๋ฅธ ์ˆซ์ž ์•ž์— ์™€์•ผ ํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ๊ฒฐ๊ณผ ๋ฐฐ์—ด์— ๋” ์ž‘์€ ์ˆซ์ž๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ , ๊ทธ ๋ฐฐ์—ด์—์„œ ๋‹ค์Œ ์ˆซ์ž๋กœ ๋„˜์–ด๊ฐ„๋‹ค. ๋งŒ์•ฝ ๋‘ ์ˆซ์ž๊ฐ€ ๊ฐ™๋‹ค๋ฉด ์–ด๋Š ์ชฝ์„ ์„ ํƒํ•ด๋„ ์ƒ๊ด€์—†๋‹ค. ๊ทธ์ € ์„ ํƒํ•˜๊ธฐ ๋‚˜๋ฆ„์ด๋‹ค.

์ด ๋‹จ๊ณ„๋ฅผ ํ•˜๋‚˜์˜ ๋ฐฐ์—ด์ด ๋” ์ด์ƒ ๋‚จ์€ ์ˆซ์ž๊ฐ€ ์—†์„ ๋•Œ๊นŒ์ง€ ๊ณ„์†ํ•œ๋‹ค. ๊ทธ ์ƒํ™ฉ์ด ์˜ค๋ฉด, ๋‹ค๋ฅธ ํ•˜๋‚˜์˜ ๋ฐฐ์—ด์—๋Š” ์—ฌ์ „ํžˆ ์ˆซ์ž๋“ค์ด ๋‚จ์•„ ์žˆ๋‹ค. ์ด ์š”์†Œ๋“ค์€ ์ด๋ฏธ ๋น„๊ต๋ฅผ ๋งˆ์นœ ๋ฐฐ์—ด์˜ ์›์†Œ๋“ค๋ณด๋‹ค ๋ชจ๋‘ ํฐ ๊ฐ’์ด๋‹ค. ๊ทธ๋ž˜์„œ ์ด ๋‚จ์€ ์š”์†Œ๋“ค์„ ๊ฒฐ๊ณผ ๋ฐฐ์—ด ๋’ค์ชฝ์— ๊ทธ๋Œ€๋กœ ์ถ”๊ฐ€ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋œ๋‹ค.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
vector<int> combine(vector<int>& arr1, vector<int>& arr2) {
    vector<int> ans;
    int i = 0, j = 0;
    while (i < arr1.size() && j < arr2.size()) {
        if (arr1[i] < arr2[j]) {
            ans.push_back(arr1[i]);
            i++;
        } else {
            ans.push_back(arr2[j]);
            j++;
        }
    }
    
    while (i < arr1.size()) {
        ans.push_back(arr1[i]);
        i++;
    }
    
    while (j < arr2.size()) {
        ans.push_back(arr2[j]);
        j++;
    }
    
    return ans;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
fn combine(arr1: Vec<i32>, arr2: Vec<i32>) -> Vec<i32> {
    let mut ans = Vec::new();
    let (mut i, mut j) = (0, 0);

    while i < arr1.len() && j < arr2.len() {
        if arr1[i] < arr2[j] {
            ans.push(arr1[i]);
            i += 1;
        } else {
            ans.push(arr2[j]);
            j += 1;
        }
    }

    while i < arr1.len() {
        ans.push(arr1[i]);
        i += 1;
    }

    while j < arr2.len() {
        ans.push(arr2[j]);
        j += 1;
    }

    ans
}

์ด์ „ ๋‘ ์˜ˆ์ œ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ, ์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ $O(n)$์ด๋ฉฐ, ๊ณต๊ฐ„ ๋ณต์žก๋„๋Š” $O(1)$์ด๋‹ค(์ถœ๋ ฅ์„ ์ถ”๊ฐ€ ๊ณต๊ฐ„์œผ๋กœ ๊ณ„์‚ฐํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ).


์˜ˆ์ œ 4: ์„œ๋ธŒ ์‹œํ€€์Šค ์—ฌ๋ถ€ ํŒ๋‹จ

๋ฌธ์ œ ๋งํฌ

๋‘ ๋ฌธ์ž์—ด s์™€ t๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, s๊ฐ€ t์˜ ์„œ๋ธŒ์‹œํ€€์Šค์ธ ๊ฒฝ์šฐ true๋ฅผ, ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ false๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ผ.

๋ฌธ์ž์—ด์˜ ์„œ๋ธŒ์‹œํ€€์Šค๋Š” ์›๋ณธ ๋ฌธ์ž์—ด์—์„œ ์ผ๋ถ€(๋˜๋Š” ์ „ํ˜€) ๋ฌธ์ž๋ฅผ ์‚ญ์ œํ•˜์—ฌ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ž ์‹œํ€€์Šค๋กœ, ๋‚จ์•„ ์žˆ๋Š” ๋ฌธ์ž์˜ ์ƒ๋Œ€์  ์ˆœ์„œ๋Š” ์œ ์ง€๋œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, โ€œaceโ€๋Š” โ€œabcdeโ€์˜ ์„œ๋ธŒ์‹œํ€€์Šค์ด์ง€๋งŒ โ€œaecโ€๋Š” ๊ทธ๋ ‡์ง€ ์•Š๋‹ค.

์ด ๋ฌธ์ œ์—์„œ๋Š” s์˜ ๋ฌธ์ž๋“ค์ด t ๋‚ด์— ๋™์ผํ•œ ์ˆœ์„œ๋กœ ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธํ•ด์•ผ ํ•˜๋ฉฐ, ๋ฌธ์ž ์‚ฌ์ด์— ๊ณต๋ฐฑ์ด ์žˆ์–ด๋„ ์ƒ๊ด€์—†๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด "ace"๋Š” "abcde"์˜ ์„œ๋ธŒ์‹œํ€€์Šค๋กœ ๊ฐ„์ฃผ๋œ๋‹ค. ์™œ๋ƒํ•˜๋ฉด "abcde" ๋‚ด์— "a", "c", "e"๊ฐ€ ์ˆœ์„œ๋Œ€๋กœ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋ฌธ์ž๋“ค์ด ์—ฐ์†์ ์ด์ง€ ์•Š์•„๋„ ๊ดœ์ฐฎ๋‹ค๋Š” ์ ์ด ์ค‘์š”ํ•˜๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ๋” ๋น ๋ฅด๊ฒŒ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ, ํˆฌ ํฌ์ธํ„ฐ ๊ธฐ๋ฒ•์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๋งŒ์•ฝ s[i]๊ฐ€ t[j]์™€ ๊ฐ™๋‹ค๋ฉด, ์ด๋Š” s์˜ i๋ฒˆ์งธ ๋ฌธ์ž๋ฅผ t์—์„œ ๋ฐœ๊ฒฌํ–ˆ์Œ์„ ์˜๋ฏธํ•œ๋‹ค. ๋”ฐ๋ผ์„œ i๋ฅผ ์ฆ๊ฐ€์‹œ์ผœ s์˜ ๋‹ค์Œ ๋ฌธ์ž๋ฅผ ์ฐพ์•„๋ณผ ์ˆ˜ ์žˆ๋‹ค. ๋ฐ˜๋ณต ๊ณผ์ •์—์„œ j๋Š” ์ƒํ™ฉ์— ์ƒ๊ด€์—†์ด ์ฆ๊ฐ€์‹œ์ผœ์•ผ ํ•œ๋‹ค๋Š” ์ ์„ ๋ช…์‹ฌํ•ด์•ผ ํ•œ๋‹ค(์ด ๋ถ€๋ถ„์€ for ๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ์ ์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค). ๋งŒ์•ฝ s์˜ ๋ชจ๋“  ๋ฌธ์ž๋ฅผ t ๋‚ด์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค๋ฉด, ์ฆ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๋งˆ์ง€๋ง‰์— i๊ฐ€ s์˜ ๊ธธ์ด์™€ ๊ฐ™๋‹ค๋ฉด, s๋Š” t์˜ ์„œ๋ธŒ์‹œํ€€์Šค๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

์˜ˆ์ œ 4 ์ƒ์„ธ ์„ค๋ช…

s์˜ ๋ชจ๋“  ๋ฌธ์ž์— ๋Œ€ํ•ด t์—์„œ ์ผ์น˜ํ•˜๋Š” ๋ฌธ์ž๋ฅผ ์ฐพ์•„์•ผ ํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, s = "bc"์ด๊ณ  t = "abcd"๋ผ๊ณ  ๊ฐ€์ •ํ•˜์ž. ๋‘ ๋ฌธ์ž์—ด์˜ ์ฒซ ๋ฒˆ์งธ ๋ฌธ์ž๋ถ€ํ„ฐ ํˆฌ ํฌ์ธํ„ฐ ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ๋น„๊ต๋ฅผ ์‹œ์ž‘ํ•œ๋‹ค. ์šฐ๋ฆฌ์˜ ๋ชฉํ‘œ๋Š” s์˜ ์ฒซ ๋ฌธ์ž "b"๋ฅผ ์ฐพ๋Š” ๊ฒƒ์ด๋‹ค. ํ•˜์ง€๋งŒ t์˜ ์ฒซ ๋ฌธ์ž๋Š” "a"์ด๋ฏ€๋กœ ์ผ์น˜ํ•˜์ง€ ์•Š๋Š”๋‹ค. ๊ทธ ๊ฒฐ๊ณผ, t์—์„œ ๋‹ค์Œ ๋ฌธ์ž๋กœ ๋„˜์–ด๊ฐ€์•ผ ํ•œ๋‹ค. "b"๋ฅผ ์•„์ง ์ฐพ์ง€ ๋ชปํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— s๋Š” ๊ทธ๋Œ€๋กœ ๋‘”๋‹ค.

t์˜ ๋‹ค์Œ ๋ฌธ์ž๋Š” ์šฐ๋ฆฌ๊ฐ€ ์ฐพ๊ณ  ์žˆ๋Š” "b"์ด๋ฏ€๋กœ ์ผ์น˜ํ•œ๋‹ค. ์ด์ œ, s์˜ ๋‹ค์Œ ๋ฌธ์ž์ธ "c"๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด ๋„˜์–ด๊ฐˆ ์ˆ˜ ์žˆ๋‹ค. t์—์„œ ์ผ์น˜ํ•˜๋Š” ๋ฌธ์ž๋Š” ํ•œ ๋ฒˆ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, t์—์„œ๋„ ๊ณ„์† ์ „์ง„ํ•ด์•ผ ํ•œ๋‹ค. t์˜ ๋‹ค์Œ ๋ฌธ์ž ๋˜ํ•œ "c"๋กœ, ์šฐ๋ฆฌ๋Š” ๋˜ ๋‹ค๋ฅธ ์ผ์น˜ ํ•ญ๋ชฉ์„ ๋ฐœ๊ฒฌํ•œ๋‹ค. s์˜ ๋ชจ๋“  ๋ฌธ์ž๋ฅผ ์„ฑ๊ณต์ ์œผ๋กœ ์ฐพ์•˜๊ธฐ ๋•Œ๋ฌธ์— s๋Š” t์˜ ์„œ๋ธŒ์‹œํ€€์Šค๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด ๊ณผ์ •์„ ํ†ตํ•ด ๋ณผ ์ˆ˜ ์žˆ๋“ฏ์ด, ๋ฌธ์ž๊ฐ€ ์ผ์น˜ํ•˜๋“  ๊ทธ๋ ‡์ง€ ์•Š๋“ , ์šฐ๋ฆฌ๋Š” ๊ณ„์†ํ•ด์„œ t ๋‚ด์—์„œ ์•ž์œผ๋กœ ๋‚˜์•„๊ฐ„๋‹ค. ๋ฌธ์ž๊ฐ€ ์ผ์น˜ํ•  ๊ฒฝ์šฐ, ํ•ด๋‹น ๋ฌธ์ž๋ฅผ ๋‹ค์‹œ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์•ž์œผ๋กœ ๋‚˜์•„๊ฐ€์•ผ ํ•œ๋‹ค. ๋ฐ˜๋ฉด, ์ผ์น˜ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ, ๊ทธ ๋ฌธ์ž๋Š” ํ•„์š”ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๊ฑด๋„ˆ๋›ด๋‹ค๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋‹ค. s์˜ ๋ชจ๋“  ๋ฌธ์ž์™€ ์ผ์น˜ํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์ผ์น˜ํ•˜๋Š” ๋ฌธ์ž๋ฅผ ์ฐพ์•˜์„ ๋•Œ๋งŒ s์—์„œ ์•ž์œผ๋กœ ๋‚˜์•„๊ฐ„๋‹ค.

1
2
3
4
5
6
7
8
9
10
11
bool isSubsequence(string s, string t) {
    int i = 0, j = 0;
    while (i < s.size() && j < t.size()) {
        if (s[i] == t[j]) {
            i++;
        }
        j++;
    }
    
    return i == s.size();
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
fn is_subsequence(s: String, t: String) -> bool {
    let (mut i, mut j) = 0;
    let s_chars: Vec<char> = s.chars().collect();
    let t_chars: Vec<char> = t.chars().collect();

    while i < s_chars.len() && j < t_chars.len() {
        if s_chars[i] == t_chars[j] {
            i += 1;
        }
        j += 1;
    }

    i == s_chars.len()
}

์ด ์†”๋ฃจ์…˜์€ ์ด์ „์˜ ๋ชจ๋“  ์˜ˆ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ $O(1)$ ๊ณต๊ฐ„์„ ์‚ฌ์šฉํ•œ๋‹ค. ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” s์™€ t์˜ ๊ธธ์ด์™€ ์„ ํ˜•์ ์ด๋‹ค.


๋งˆ๋ฌด๋ฆฌ

์—ฌ๊ธฐ์„œ ์†Œ๊ฐœ๋œ ๋ฐฉ๋ฒ•๋“ค์€ ๋‹จ์ˆœํ•œ ๊ฐ€์ด๋“œ๋ผ์ธ์— ๋ถˆ๊ณผํ•˜๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ฒซ ๋ฒˆ์งธ ๋ฐฉ๋ฒ•์—์„œ๋Š” ํฌ์ธํ„ฐ๋ฅผ ์ฒซ ๋ฒˆ์งธ ๋ฐ ๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค์—์„œ ์‹œ์ž‘ํ–ˆ์ง€๋งŒ, ๊ฒฝ์šฐ์— ๋”ฐ๋ผ ํฌ์ธํ„ฐ๋ฅผ ๋‹ค๋ฅธ ์ธ๋ฑ์Šค์—์„œ ์‹œ์ž‘ํ•˜๋Š” ๋ฌธ์ œ์— ์ง๋ฉดํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ๋‘ ๋ฒˆ์งธ ๋ฐฉ๋ฒ•์—์„œ๋Š” ๋‘ ๊ฐœ์˜ ํฌ์ธํ„ฐ๋ฅผ ์„œ๋กœ ๋‹ค๋ฅธ ๋‘ ์ž…๋ ฅ์„ ๋”ฐ๋ผ ์ „์ง„์‹œ์ผฐ๋‹ค. ๊ฐ€๋”์€ ์ž…๋ ฅ ๋ฐฐ์—ด/๋ฌธ์ž์—ด์ด ํ•˜๋‚˜๋ฟ์ผ ๋•Œ๋„ ๋‘ ๊ฐœ์˜ ํฌ์ธํ„ฐ๋ฅผ ์ฒซ ๋ฒˆ์งธ ์ธ๋ฑ์Šค์—์„œ ์ดˆ๊ธฐํ™”ํ•˜๊ณ  ๋‘˜ ๋‹ค ์ „์ง„์‹œํ‚ค๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค.

ํˆฌ ํฌ์ธํ„ฐ๋Š” ์ฃผ๋กœ ๋‘ ๊ฐœ์˜ ์ •์ˆ˜ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ˜๋ณต ๊ฐ€๋Šฅํ•œ ์š”์†Œ๋“ค ์‚ฌ์ด๋ฅผ ์ด๋™ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. ์ด ๊ธ€์—์„œ ๋‹ค๋ฃฌ ์ „๋žต๋“ค์€ ๊ฐ€์žฅ ํ”ํ•œ ํŒจํ„ด์ด์ง€๋งŒ, ๋ฌธ์ œ์— ๋‹ค๊ฐ€์„ค ๋•Œ ํ•ญ์ƒ ์ƒˆ๋กœ์šด ๋ฐฉ๋ฒ•์„ ์ฐพ๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค. ์‹ฌ์ง€์–ด โ€œ์„ธ ํฌ์ธํ„ฐโ€๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฌธ์ œ๋“ค๋„ ์กด์žฌํ•œ๋‹ค.

์ด ์ฝ”์Šค์˜ ์žฅ๊ณผ ๊ธ€๋“ค์€ ์ด์ „ ์žฅ์—์„œ ๋ฐฐ์šด ๊ฐœ๋…๋“ค์„ ์ดํ›„ ์žฅ์— ์ ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ˆœ์„œ๋Œ€๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค. ํˆฌ ํฌ์ธํ„ฐ๋Š” ์ด ๊ธ€์—์„œ ๋‹ค๋ฃฌ ๊ฒƒ ์ด์ƒ์œผ๋กœ ๋” ๋งŽ์€ ํ™œ์šฉ ๋ฐฉ์•ˆ์ด ์žˆ์œผ๋ฉฐ, ์ด๊ฒƒ์ด ํˆฌ ํฌ์ธํ„ฐ์˜ ๋งˆ์ง€๋ง‰ ๋“ฑ์žฅ์€ ์•„๋‹ˆ๋‹ˆ ๊ฑฑ์ •ํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค.

๋ณด๋„ˆ์Šค ๋ฌธ์ œ


์ถœ์ฒ˜: Leetcode

์ด ํฌ์ŠคํŠธ๋Š” ์ €์ž‘๊ถŒ์ž์˜ CC BY-NC-ND 4.0 ๋ผ์ด์„ผ์Šค๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.
์ตœ๊ทผ ์—…๋ฐ์ดํŠธ
์ธ๊ธฐ ํƒœ๊ทธ
๋ฐ”๋กœ๊ฐ€๊ธฐ

[DSA] ๋ฐฐ์—ด๊ณผ ๋ฌธ์ž์—ด

[DSA] ์Šฌ๋ผ์ด๋”ฉ ์œˆ๋„์šฐ

์ธ๊ธฐ ํƒœ๊ทธ