๐ ๋ฌธ์
๐ฑ ์์ด๋์ด
๊ด๋ฆฌ์ธ์ด ๋ณด๋ ๋ฐฉํฅ์ ํญ์ ํ์ฌ ์๋ฆฌ -> ์ค๋ฅธ์ชฝ์ผ๋ก ๋ณธ๋ค. ๊ฒฝํ์ ์ด๋ฌํ ๊ตฌ์กฐ๋ ์คํ์ผ๋ก ๊ตฌํ๊ฐ๋ฅํ๋ค.
์ด ๋ฌธ์ ๋ N ≤ 80000 ์ด๋ฏ๋ก O(N^2)์ด ์์๋๋ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก๋ ํ ์ ์๋ค. ์ฆ ์ด๋ฏธ ๊ณ์ฐ๋ ๊ฐ์ ์ด์ฉํด์ ๋ค์๊ฐ์ ๊ตฌํ๋
๋ฐฉ์์ผ๋ก ์ค๋ณต๊ณ์ฐ์ ์ค์ฌ ์๊ฐ์ ๋จ์ถํด์ผ ํ๋ค.
์คํ๊ณผ ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ์ ์ฌ์ฉํด์ ํ์ด๋ณด์!
์์ 1๋ฒ์ ํตํด ๋ ผ๋ฆฌ์ ํ๋ฆ์ ๊ทธ๋ ค ๋ณด์๋ค ๋ง๋ก ํ๋ ๊ฒ๋ณด๋ค ํจ๊ณผ์ ์ผ ๊ฒ์ด๋ผ ์๊ฐํ๋ค.
๋๋ฌด ๊ธธ์ด์ ์ฝ๊ธฐ ํ๋ค๊ฒ ์ง๋ง ์ฒ์ฒํ ๋ณด๋ค ๋ณด๋ฉด ํ๋ฆ์ด ๋ณด์ผ ๊ฒ์ด๋ค
1. dp ๋ฐฐ์ด = ๊ฐ ์์น์์ ๋ณผ ์ ์๋ ์ฅ์ ์
2. stack1, stack2 = ๋น๋ฉ ๋ฒํธ
3. arr1 ๋ฐฐ์ด = ๋น๋ฉ ๋์ด
5๋ฒ ๋น๋ฉ๊ณผ 6๋ฒ ๋น๋ฉ์ ๋์ด๋ฅผ ๋น๊ตํฉ๋๋ค
1 ) 5๋ฒ ๋น๋ฉ์ด ๋ ํด ๊ฒฝ์ฐ = dp[5] += dp[6] + 1 & stack2์ 6๋ฒ ๋น๋ฉ ์ ๊ฑฐ ํ 5๋ฒ ๋น๋ฉ ์ ์ฅ
2 ) 5๋ฒ ๋น๋ฉ์ด ๋ ์์ ๊ฒฝ์ฐ = stack1์ 5๋ฒ ๋น๋ฉ์ ๊ฑฐ ํ stack2์ 5๋ฒ ๋น๋ฉ ์ ์ฅ.
1๋ฒ ์ฐ์ฐ์ ์คํํฉ๋๋ค.
4๋ฒ ๋น๋ฉ๊ณผ 5๋ฒ ๋น๋ฉ์ ๋์ด๋ฅผ ๋น๊ตํฉ๋๋ค
1 ) 4๋ฒ ๋น๋ฉ์ด ๋ ํด ๊ฒฝ์ฐ = dp[4] += dp[5] + 1 & stack2์ 5๋ฒ ๋น๋ฉ ์ ๊ฑฐ ํ 4๋ฒ ๋น๋ฉ ์ ์ฅ
2 ) 4๋ฒ ๋น๋ฉ์ด ๋ ์์ ๊ฒฝ์ฐ = stack1์ 4๋ฒ ๋น๋ฉ์ ๊ฑฐ ํ stack2์ 4๋ฒ ๋น๋ฉ ์ ์ฅ.
2๋ฒ ์ฐ์ฐ์ ์คํํฉ๋๋ค.
3๋ฒ ๋น๋ฉ๊ณผ 4๋ฒ ๋น๋ฉ์ ๋์ด๋ฅผ ๋น๊ตํฉ๋๋ค
1 ) 3๋ฒ ๋น๋ฉ์ด ๋ ํด ๊ฒฝ์ฐ = dp[3] += dp[4] + 1 & stack2์ 4๋ฒ ๋น๋ฉ ์ ๊ฑฐ ํ 3๋ฒ ๋น๋ฉ ์ ์ฅ
2 ) 3๋ฒ ๋น๋ฉ์ด ๋ ์์ ๊ฒฝ์ฐ = stack1์ 3๋ฒ ๋น๋ฉ์ ๊ฑฐ ํ stack2์ 3๋ฒ ๋น๋ฉ ์ ์ฅ.
1๋ฒ ์ฐ์ฐ์ ์คํํฉ๋๋ค.
2๋ฒ ๋น๋ฉ๊ณผ 3๋ฒ ๋น๋ฉ์ ๋์ด๋ฅผ ๋น๊ตํฉ๋๋ค
1 ) 2๋ฒ ๋น๋ฉ์ด ๋ ํด ๊ฒฝ์ฐ = dp[2] += dp[3] + 1 & stack2์ 3๋ฒ ๋น๋ฉ ์ ๊ฑฐ ํ 2๋ฒ ๋น๋ฉ ์ ์ฅ
2 ) 2๋ฒ ๋น๋ฉ์ด ๋ ์์ ๊ฒฝ์ฐ = stack1์ 2๋ฒ ๋น๋ฉ์ ๊ฑฐ ํ stack2์ 2๋ฒ ๋น๋ฉ ์ ์ฅ.
2๋ฒ ์ฐ์ฐ์ ์คํํฉ๋๋ค.
1๋ฒ ๋น๋ฉ๊ณผ 2๋ฒ ๋น๋ฉ์ ๋์ด๋ฅผ ๋น๊ตํฉ๋๋ค
1) 1๋ฒ ๋น๋ฉ์ด ๋ ํด ๊ฒฝ์ฐ = dp[1] += dp[2] + 1
1 - 1) 1๋ฒ ๋น๋ฉ๊ณผ 3๋ฒ ๋น๋ฉ์ ๋์ด๋ฅผ ๋น๊ตํฉ๋๋ค
1 - 2) dp[1] += dp[3] + 1
2) 2๋ฒ ๋น๋ฉ์ด ๋ ์์ ๊ฒฝ์ฐ = stack1์ 2๋ฒ ๋น๋ฉ์ ๊ฑฐ ํ stack2์ 2๋ฒ ๋น๋ฉ ์ ์ฅ.
1, 1 - 1, 1 - 2๋ฒ ์ฐ์ฐ์ ํจ๊ป ์คํํฉ๋๋ค.
์ ํ๋ฆ์ ๋ฐ๋ณตํ๋ฉด O(N+N) ์ ๋์ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋ฉฐ ๋ต์ ๊ตฌํ ์ ์๋ค.
์ค๋ช ์ด ๊ธธ์๋ค ์ด์ ๊ตฌํ๋ง ํ๋ฉด ๋๋ค!
๐ฑ ์ฝ๋ ๋ฐ ํ์ด
์ ๊ทธ๋ฆผ๊ณผ ํจ๊ป ์ฌ์ฉ๋ ์๋ฃ๊ตฌ์กฐ ๋ฐ ๋ฐฐ์ด์ ๋งค์นญํด์ ๋ณธ๋ค๋ฉด ์ดํดํ๋ ๊ฒ์ ์ด๋ ค์ธ ๊ฒ ์๋ค.
20๋ฒ์งธ ์ค while๋ฌธ์ ์ ๊ทธ๋ฆผ์ 5๋ฒ์งธ ๊ทธ๋ฆผ ์กฐ๊ฑด 1, 1-1, 1-2์ ๊ฐ์ ์กฐ๊ฑด์ ๋ง์กฑ์ํค๊ธฐ ์ํด ๋ฐ๋ณต์ ์ผ๋ก ์ฒ๋ฆฌํ๋ค
ํ ๊ฐ์ง ๋ ์ฃผ์ํด์ผ ํ ์ ์
N = 80000 ์ด๋ฉด์, ๋ชจ๋ ๊ฑด๋ฌผ์ด "8000, 7999,7998... 1" ์ฆ ๋์ด๊ฐ ๋ด๋ฆผ์ฐจ์์ผ๋ก ๋์ด๋์ด ์๋ค๋ฉด
์ด๋ ๋ฑ์ฐจ์์ด์ ํฉ ๊ณผ ๊ฐ์ ํจ๊ณผ(?)๋ฅผ ๋ณธ๋ค
( ์ฒซ ๋ฒ์งธ ๊ฑด๋ฌผ์ ์์ ์ ์ ์ธํ ๋๋จธ์ง ๊ฑด๋ฌผ ์ฅ์์ ๋ค ๋ณผ ์ ์๊ณ 2๋ฒ, 3๋ฒ ๊ฑด๋ฌผ๋ ์์ ๋ณด๋ค
์๋์ ์๋ง์ ๊ฑด๋ฌผ ์ฅ์์ ๋ณผ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.)
N = 80000์ผ ๋ ๋ฑ์ฐจ์์ด์ ํฉ์ = 80000/2(1+80000) = 40000(80001) = 32,000,040,000
N^31 int ํ ๋ฒ์๋ฅผ ํจ์ฌ ๋์ด๋ฒ๋ฆฐ๋ค.
์ฆ ๊ฑด๋ฌผ์ฅ์์ ํฉ์ ๋ด๋ ๋ณ์๋ long ํ์ผ๋ก ์ ์ธํด ์ฃผ์!
ํ์๋ 4%์์ ๋ฐ๋ก ํ๋ ธ๋ค
๐ฑ ๋๋ ์
์๋ฃ๊ตฌ์กฐ ์นํฐ์ ์ค์ ์ ๋๊ณ ์ฐ์ต ์ค์ด๋ผ ๊ทธ๋ฐ์ง ์คํ์ ๋ ๊ฐ ์ฌ์ฉํด์ ํ๋ ค๊ณ ๋ ธ๋ ฅํ๋ค
์ฌ์ค ๊ตณ์ด ์คํ์ด 2๊ฐ๊น์ง๋ ํ์ ์์ ๊ฒ ๊ฐ๋ค ใ ใ
๋ด ํ์ด๋ก๋ ์คํ 1๊ฐ๋ก๋ ํ ์ ์๋๋ฐ ํฌ์คํ ์ ํ๋ค ๋ณด๋ ์ฝ๋์ ํ์ ์ด ๋ณด์ธ๋ค ใ ใ
ํฌ์คํ ์ ํ๋ฉด์ ์ค์ค๋ก ์ฝ๋๋ฆฌ๋ทฐ์ ์๊ฐ์ ํ๋ฆ์ ์ ๋ค ๋ณด๋
๋ณต์ตํ๋ ์ข์ ์ต๊ด์ด ์๊ธด ๊ฒ ๊ฐ๋ค ๋!
'Algorithm > - Baekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ] ๋ฐฑ์ค 1153 ๋ค ๊ฐ์ ์์ (JAVA) (1) | 2024.03.14 |
---|---|
[BOJ] ๋ฐฑ์ค 10830 ํ๋ ฌ ์ ๊ณฑ (JAVA) (1) | 2024.03.13 |
[BOJ] ๋ฐฑ์ค 1781 ์ปต๋ผ๋ฉด (JAVA) (2) | 2024.02.27 |
[BOJ] ๋ฐฑ์ค 1976 ์ฌํ ๊ฐ์ (JAVA) (4) | 2024.02.26 |
[BOJ] ๋ฐฑ์ค 11657 ํ์๋จธ์ (JAVA) (0) | 2024.02.20 |
๋๋ง์ ๊ฐ๋ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค!
ํฌ์คํ ์ด ์ข์๋ค๋ฉด "์ข์์โค๏ธ" ๋๋ "๊ตฌ๋ ๐๐ป" ํด์ฃผ์ธ์!