๋ฌธ์ œ๋Š” ์ด๊ณณ์—์„œ ํ™•์ธ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.


๊ฐ„๋‹จํžˆ ๋งํ•˜๋ฉด int[]๋ฅผ ์ธ์ž๋กœ ๋ฐ›์•„์„œ span์˜ ์ตœ๋Œ€๊ฐ’์„ ๊ตฌํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.


์šฐ์„  span์ด๋ผ๋Š” ๊ฐœ๋…์— ๋Œ€ํ•ด์„œ ์•Œ์•„์•ผ ํ•˜๋Š”๋ฐ์š”.

๋ฌธ์ œ์—์„œ๋Š” span์ด๋ผ๋Š” ๊ฒƒ์„ "๊ฐ€์žฅ ์™ผ์ชฝ์— ์žˆ๋Š” ํŠน์ • ๊ฐ’ a์™€ ๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ์— ์žˆ๋Š” ๋™์ผํ•œ ๊ฐ’ a ์‚ฌ์ด์˜ ๊ธธ์ด" ๋ผ๊ณ  ์„ค๋ช…ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋•Œ ์ด ๊ธธ์ด์—๋Š” ๊ฐ€์žฅ ์™ผ์ชฝ๊ฐ’๊ณผ ๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ ๊ฐ’์˜ ์œ„์น˜๋ฅผ ํฌํ•จํ•œ ๊ธธ์ด์ž…๋‹ˆ๋‹ค.


์ฆ‰, int[ 1, 2, 1 ] ์„ ์ธ์ž๋กœ ๋ฐ›์•˜์„ ๊ฒฝ์šฐ 1์— ๋Œ€ํ•œ span์€ 3์ด ๋ฉ๋‹ˆ๋‹ค.

๊ฐ€์žฅ ์™ผ์ชฝ์˜ 1๊ณผ ๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ์˜ 1์„ ํฌํ•จํ•œ ๊ธธ์ด๊ฐ€ ๋˜๋Š” ๊ฒƒ์ด์ฃ .

๋งŒ์•ฝ int[ 1, 2, 1, 3, 4, 2 ]๋ฅผ ์ธ์ž๋กœ ๋ฐ›์•˜๋‹ค๋ฉด,


1์— ๋Œ€ํ•œ span = 3

2์— ๋Œ€ํ•œ span = 5

3์— ๋Œ€ํ•œ span = 1

4์— ๋Œ€ํ•œ span = 1


์ด ๋ฉ๋‹ˆ๋‹ค.


์ด๋ ‡๊ฒŒ ๊ณ„์‚ฐํ–ˆ์„ ๋•Œ maxSpan์€ 2์— ๋Œ€ํ•œ span๊ฐ’์ธ 5๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

์ œ๊ฐ€ ํ’€์–ด๋ณธ ํ•ด๋‹ต์€ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋ญ ๊ทธ๋ƒฅ ๋ฃจํ”„๋ฅผ ์ค‘๋ณต์œผ๋กœ ๋Œ๋ ค์„œ ํ•ด๊ฒฐํ–ˆ๋Š”๋ฐ ์ด๊ฑด ์ •๋ง ์ตœ์•…์˜ ํ•ด๋‹ต์ด ๋˜๊ฒ ์ฃ .

์™ ๋งŒํ•˜๋ฉด ์ค‘๋ณต ๋ฃจํ”„๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ๋ฉ๋‹ˆ๋‹ค. ์†๋„์ €ํ•˜๊ฐ€ ์ƒ๋‹นํ•˜๋‹ˆ๊นŒ์š”.

๋ฌธ์ œ์—์„œ ๋งํ•˜๊ธธ ์†๋„๋Š” ์‹ ๊ฒฝ์“ฐ์ง€ ์•Š์•„๋„ ๋œ๋‹ค๊ณ  ํ•ด์„œ ๊ทธ๋ƒฅ ๋ฐ”๋กœ ์ƒ๊ฐ๋‚˜๋Š” ๋Œ€๋กœ ๋ฌธ์ œ๋ฅผ ํ’€์–ด๋ณด์•˜์Šต๋‹ˆ๋‹ค.

 O(n์ œ๊ณฑ)์ด ๋˜์ง€ ์•Š๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ด๋ฏธ ์ฒดํฌํ–ˆ๋˜ ์ˆซ์ž์ธ์ง€์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋„๋ก ํ–ˆ์Šต๋‹ˆ๋‹ค.

์œ„์—์„œ ๋“  ์˜ˆ์ œ๋ฅผ ์ธ์šฉํ•ด์„œ ์„ค๋ช…๋“œ๋ฆฌ์ž๋ฉด,


int [ 1, 2, 1, 3, 4, 2 ]๋ฅผ ์ธ์ž๋กœ ๋ฐ›์•˜์„ ๊ฒฝ์šฐ์— 1๊ณผ 2๋Š” ๊ฐ๊ฐ ๋‘๋ฒˆ์”ฉ ๋“ค์–ด๊ฐ€์žˆ๋Š”๋ฐ์š”

์ด๋•Œ ๋‘๋ฒˆ์งธ๋กœ ๋‚˜์˜ค๋Š” ์ˆซ์ž๋“ค์— ๋Œ€ํ•ด์„œ๋Š” ์‚ฌ์‹ค ๊ณ„์‚ฐํ•  ํ•„์š”๊ฐ€ ์—†์ฃ . ์ด๋ฏธ ์ฒซ๋ฒˆ์งธ๋กœ ๋‚˜์˜จ 1๊ณผ 2๋ฅผ ๋งŒ๋‚ฌ์„ ๋•Œ span๊ฐ’์„ ๊ณ„์‚ฐํ•˜๊ธฐ ๋•Œ๋ฌธ์ด์ฃ . ๋™์ผํ•œ ์ˆซ์ž๋“ค์ด ๋‘๊ฐœ ์ด์ƒ ๋‚˜์˜ค๊ฒŒ๋œ๋‹ค๋ฉด ์ด๋ฏธ ๊ฒ€์‚ฌํ–ˆ๋˜ ์ˆซ์ž๋“ค์— ๋Œ€ํ•œ span์„ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋ถˆํ•„์š”ํ•œ ๊ณ„์‚ฐ์„ ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฐ ๊ณ„์‚ฐ์„ ์—†์• ๊ธฐ ์œ„ํ•ด์„œ ํ•œ๋ฒˆ ์ฒดํฌํ–ˆ๋˜ ์ˆซ์ž์™€ ๋™์ผํ•œ ์ˆซ์ž๋ฅผ outer most for loop์—์„œ ๋งŒ๋‚˜๊ฒŒ๋˜๋ฉด ์ฒดํฌํ–ˆ๋˜ ์ˆซ์ž์ธ์ง€๋ฅผ ๊ฒ€์‚ฌํ•˜๋Š” first inner loop๋ฅผ ๋Œ๊ณ  ์ฒดํฌํ–ˆ๋˜ ์ˆซ์ž๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ์—๋งŒ second inner loop์—์„œ ์ฒ˜๋ฆฌํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.


๋˜ํ•œ, second inner๋ฃจํ”„์—์„œ ์ฒ˜๋ฆฌ๋ฅผ ํ•  ๋•Œ์—๋„ int[]์˜ ํ˜„์žฌ ์ˆซ์ž์˜ ์œ„์น˜์—์„œ ์˜ค๋ฅธ์ชฝ์— ์žˆ๋Š” ์ˆซ์ž๋“ค์„ ๊ฐ€์ง€๊ณ  ๋น„๊ต๋ฅผ ํ•ฉ๋‹ˆ๋‹ค. ์ขŒ์ธก์— ์žˆ๋Š” ์ˆซ์ž๋“ค ์ค‘์—๋Š” ์ด ์ˆซ์ž์™€ ๋™์ผํ•œ ์ˆซ์ž๊ฐ€ ์—†๋‹ค๋Š” ์ „์ œ๊ฐ€ ํ•„์š”ํ•œ๋ฐ ์ด ์ „์ œ๋ฅผ ๋ฐ”๋กœ ์œ„์— ์„ค๋ช…๋“œ๋ฆฐ first inner loop์—์„œ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ฃผ๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด์ฃ .


์ด๋Ÿฐ์‹์œผ๋กœ ํ•˜๊ฒŒ๋  ๊ฒฝ์šฐ ์ตœ์•…์˜ ๊ฒฝ์šฐ( int[]์— ๋“ค์–ด์žˆ๋Š” ์ˆซ์ž๊ฐ€ ๋ชจ๋‘ ๋‹ค๋ฅผ ๊ฒฝ์šฐ )์—๋„ O(n์ œ๊ณฑ) ๊นŒ์ง€๋Š” ์•ˆ๊ฐ€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.


์ค‘๋ณต for loop๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๋Š” ํ–ˆ์ง€๋งŒ ๋‚˜๋ฆ„ ์†๋„๋„ ์‹ ๊ฒฝ์„ ์“ด ๋กœ์ง์ด๋ผ๊ณ  ๋งํ•  ์ˆ˜ ์žˆ์ฃ .



public int maxSpan(int[] nums) {
  if ( nums.length == 0 ) return 0;
  int maxSpan = 1;
  int[] checkedNumbers = new int[nums.length];
  int checkedNumbersPos = 0;

 

  // Outer Most For Loop

  for ( int i = 0; i < nums.length ; i++ ){
     boolean checked = false;


     // First Inner Loop
     for( int checkedItem : checkedNumbers ){
        if ( checkedItem == nums[i] ){
           checked = true;
        }
     }
     if ( !checked ){
         checkedNumbers[checkedNumbersPos] = nums[i];


         // Second Inner Loop
         for ( int j = i + 1; j < nums.length ; j++ ){
            if ( nums[j] == nums[i] ){
               int tempSpan = j - i + 1;
               if ( tempSpan > maxSpan ){ maxSpan = tempSpan;}
            }
         }
     }
  }
  return maxSpan;
}