2020. 8. 18. 22:46ใ์นดํ ๊ณ ๋ฆฌ ์์
๋ฐฑ์ค ๋ฌธ์ ๋ฅผ ํ์ด๋ณด๊ธฐ ์์ํ์ง ํ๋ฌ์งธ. ์์ง๋ ๋์ ๋์ ์๋ ์์ด๋์ด๋ฅผ ์ฝ๋๋ก ํ์ด๋ด๊ธฐ๊ฐ ์ด๋ ต๋ค.
๋ฌผ๋ก ์ด ๋ฌธ์ ๋ ์์ด๋์ด์กฐ์ฐจ ๋ ์ค๋ฅด์ง ์์๊ธฐ ๋๋ฌธ์ ์กฐ๊ธ ๊ณ ๋ฏผํ ๋ธ๋ก๊ทธ๋ค์ ๋ต๋ณ์ ๋ณด์๋ค.
์ฌ๋๋ค์ ๊ธ์ ๋ณด๋ ์ฒ์์ผ๋ก ๋์ ๋ค์ด์ค๋ ๋จ์ด๊ฐ ์์๋ค. ๊ทธ๊ฒ์ LIS(์ต์ฅ ์ฆ๊ฐ ์์ด)์ด์๋ค.
์ฝ๊ฒ ๋งํด ์ซ์๋ค์ ์ด๋ ํ ์์ ์ด๋ค์ด ์ฃผ์ด์ก์ ๋, ๊ทธ ์ซ์๋ค ์ค์์ ๋ถ๋ถ์ ์ผ๋ก ์ถ์ถํด ๊ธธ์ด๊ฐ ๊ฐ์ฅ ๊ธด ์์ด์ ๋ง๋๋ ๊ฒ์ด์๋ค. ์ด๋ฅผ ๊ตฌํํ๋ ์๊ณ ๋ฆฌ์ฆ์ ๊ฝค๋ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ด์๋ค.
1. arr๋ฐฐ์ด๊ณผ dp๋ฐฐ์ด ๋๊ฐ์ง๋ฅผ ์ ์ธํ๋ค.
2. dp๋ฐฐ์ด์ ์ฒซ๋ฒ์งธ ์ธ๋ฑ์ค์ arr๋ฐฐ์ด ์ฒซ๋ฒ์งธ ์ธ๋ฑ์ค ๊ฐ์ ๋ฃ๋๋ค.
3. len์ด๋ผ๋ ์ธ๋ฑ์ค์ ๊ฐฏ์(dp๋ฐฐ์ด์ ๊ธธ์ด)๋ฅผ ๊ฐ๋ณ์ ์ผ๋ก ๋ณํ์ํฌ ๋ณ์๋ฅผ ์ ์ธํ๋ค.
4. arr์ ์ธ๋ฑ์ค๋ฅผ ์ฆ๊ฐ์ํค๋ฉด์ arr๋ฐฐ์ด์ ๊ฐ์ด dp๋ฐฐ์ด์ ๊ฐ๋ณด๋ค ์์๋ or ํด ๋๋ฅผ ๋ถ๋ฆฌํด์ ์ฝ๋๋ก ์์ฑํ๋ฉด ๋๋ค.
์๋ ์ฝ๋๋ ํ ๋ธ๋ก๊ทธ์์ ๋ณธ๋ฐ์๋ค. ์ง๊ธ์ ๋ชจ๋ฐฉ์ด ์ต์ ์ด๋ผ๊ณ ์๊ฐํ๋ฉฐ ํ๊ณ ์๋ค.
public class Main{
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
BufferedReader br= new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = null;
int n = Integer.parseInt(br.readLine());
int[] arr = new int[n+1];
st = new StringTokenizer(br.readLine());
for(int i =1; i<=n; i++) {
arr[i] = Integer.parseInt(st.nextToken());
}
int[] dp = new int[n+1];
dp[1] = arr[1];
int len = 1;
for(int i =2; i<=n ; i++) {
if(arr[i]>dp[len]) dp[++len] = arr[i];
else {
int j;
for(j=1; j<=len;j++) {
if(arr[i]<=dp[j]) break;
}dp[j] = arr[i];
}
}
System.out.println(len);
}
}
์์ ๊ฒ์ ํด๊ฒฐํ๊ณ ์๊ธฐ๋ ํ๊ฐ์ง ์๋ฌธ์ ์ด ๋ค์๋ค. ๋จ๋ ์ซ์๋ค์ 1,3,5์ธ๋ฐ ์ด๊ฒ๋ค์ ๋ฌธ์ ์ ๋ต์ธ 2,3,5์ ๋ค๋ฅด์ง์๋? ๋ค๋ฅธ ๋ธ๋ก๊ทธ๋ค์ ๋ต์์๋ ๋ฌด๊ดํ๋ค๊ณ ํ๋๋ฐ ์ ๋ฌด๊ดํ์ง ์ ๋ชจ๋ฅด๊ฒ ๋ค. ์ฌ์ค LIS์ ๊ฐ๋ ์ ์ ๋ชจ๋ฅด๋ ๊ฑธ์ง๋ ๋ชจ๋ฅธ๋ค. ๊ทธ๋๋ LIS์๊ณ ๋ฆฌ์ฆ์ ํตํด ๊ฐ๋ ์ ์ผ๋ก๋ ๋ฌธ์ ๊ฐ ์ํ๋ ๋ฐ๋ฅผ ํ์ด ๋ด์๋ค๊ณ ์๊ฐํ๊ณ ๊ธ์ ๋ง์น๋ค.