๋ฌธ์ ๋ ์ด๊ณณ์์ ํ์ธ์ด ๊ฐ๋ฅํฉ๋๋ค.
๊ฐ๋จํ ๋งํ๋ฉด 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;
}
'๐ป Programming > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] ์๋ฐ๋ก ๋ง๋ ๊ตฌ๊ตฌ๋จ ์์ค (0) | 2015.04.27 |
---|---|
[์๊ณ ๋ฆฌ์ฆ/๋ฌธ์ ํ์ด] CodingBat Array-3 fix34 (0) | 2015.04.22 |
[์๊ณ ๋ฆฌ์ฆ/๋ฌธ์ ํ์ด] CodingBat Logic-2 noTeenSum (0) | 2015.04.22 |
[์๊ณ ๋ฆฌ์ฆ/๋ฌธ์ ํ์ด] CodingBat Logic-2 luckySum (2) | 2015.04.22 |
[์๊ณ ๋ฆฌ์ฆ/๋ฌธ์ ํ์ด] CodingBat Logic-2 loneSum (0) | 2015.04.22 |