2026. 3. 1. 23:44ใ๐๋์
[Do it! ์๊ณ ๋ฆฌ์ฆ ์ฝ๋ฉํ ์คํธ ํ์ด์ฌ ํธ] ์ 1์ฃผ์ฐจ ๋์ ํ์ตํ ๋ด์ฉ์ ์ ๋ฆฌํ์์ต๋๋ค!
1. ์ฝ๋ฉํ ์คํธ์ ํต์ฌ : ์๊ฐ๋ณต์ก๋๋ฅผ ๊ณ ๋ คํ ์๊ณ ๋ฆฌ์ฆ ์ ํ
์๊ฐ ๋ณต์ก๋๋?
: ์ฃผ์ด์ง ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ์ฐ์ฐ ํ์!
1์ด : 2,000๋ง ๋ฒ ~ 1์ต ๋ฒ์ ์ฐ์ฐ
(์ผ๋ฐ์ ์ธ ํ์ด์ฌ ํ๋ก๊ทธ๋จ ๊ธฐ์ค!)
- ์๊ฐ ๋ณต์ก๋๋ฅผ ์ ์ํ๋ ์ ํ 3๊ฐ์ง
- ๋น - ์ค๋ฉ๊ฐ : ‘์ต์ ์ ๊ฒฝ์ฐ’์ ์ฐ์ฐ ํ์
- ๋น - ์ธํ : ‘๋ณดํต์ ๊ฒฝ์ฐ’ ์ ์ฐ์ฐ ํ์ (์ต์ - ์ต์ ์ ์ผ์ด์ค์ ์ ๋ฐ)
- ๋น - ์ค : ‘์ต์ ์ ๊ฒฝ์ฐ’ ์ ์ฐ์ฐ ํ์
1-1 ์๊ฐ๋ณต์ก๋ ํ๊ธฐ๋ฒ ์์๋ณด๊ธฐ
์ฝํ ์์ ๋น -์ค ํ๊ธฐ๋ฒ์ ์ฌ์ฉํด์ผ ํ๋ ์ด์
→ ๋ค์ํ ํ ์คํธ ์ผ์ด์ค๋ฅผ ์ํํด ๋ชจ๋ ์ผ์ด์ค๋ฅผ ํต๊ณผํด์ผ๋ง ํ๋ฏ๋ก, ํ๋จ์ ์ต์ ์ ์ผ์ด์ค๋ฅผ ์ผ๋์ ๋ฌ์ผ ํ๋ค!
๋น - ์ค ํ๊ธฐ๋ฒ์ ์๊ฐ ๋ณต์ก๋
- ๋ฐ์ดํฐ ํฌ๊ธฐ (N) ์ ์ฆ๊ฐ์ ๋ฐ๋ฅธ ์ฑ๋ฅ(์ํ ์๊ฐ)ใ
ํจ์จ ์ ์ผ ์ข์ O(logN)
| : | O(N) |
| : | O(NlogN) |
| : | O(N^2) |
| : | O(2^n) |
| ์ ์ผ ๋๋ฆผ | O(N!) |
1-2 ์๊ฐ ๋ณต์ก๋ ํ์ฉํ๊ธฐ
- ๋ฌธ์ 000: ์ ์ ๋ ฌํ๊ธฐ
- ๋ฒ๋ธ ์ ๋ ฌ์ ์๊ฐ ๋ณต์ก๋: O(n^2)
- ๋ณํฉ ์ ๋ ฌ์ ์๊ฐ ๋ณต์ก๋: O(nlogn)
- ์๊ฐ ์ ํ 2์ด (= 1์ด 2,000๋ง ๋ฒ ๊ธฐ์ค, 2์ด์ 4,000๋ง ๋ฒ )
- 40,000,000
- ์ ๋ ฅN๊ฐ์ ์ค์ ์ซ์ ์ฃผ์ด์ง ( |N| ≤ ๋ฐฑ ๋ง ๋ฒ ) - ์๋ ์ค๋ณต๋์ง ์์
- 1๋ฒ์งธ ์ค ๋ถํฐ ~ N๊ฐ์ ์ค์ ์ค๋ฆ์ฐจ์ ์ ๋ ฌํ ๊ฒฐ๊ณผ๋ฅผ 1์ค์ 1๊ฐ์ฉ ์ถ๋ ฅํ๋ค
- N ๊ฐ์ ์๊ฐ ์ฃผ์ด์ก์ ๋, ์ด๋ฅผ ์ค๋ฆ์ฐจ์ ์ ๋ ฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค
์ฐ์ฐ ํ์ ๊ณ์ฐ ๋ฐฉ๋ฒ
์ฐ์ฐ ํ์ = ์๊ณ ๋ฆฌ์ฆ ์๊ฐ ๋ณต์ก๋ n๊ฐ์ ๋ฐ์ดํฐ์ ์ต๋ ํฌ๊ธฐ๋ฅผ ๋์ ํ์ฌ ๋์ถํจ
์๊ณ ๋ฆฌ์ฆ ์ ํฉ์ฑ ํ๊ฐ
: ๋ฐ์ดํฐ์ ํฌ๊ธฐ(N)๋ฅผ ๋จ์๋ก ์ฌ์ฉํด์ผํ๋ ์๊ณ ๋ฆฌ์ฆ ์ถ์ธก ๊ฐ๋ฅ
- ๋ฒ๋ธ ์ ๋ ฌ = (1,000,000)^2 = 1,000,000,000,000 (์ฝ 1์กฐ) > 40,000,00 → ๋ถ์ ํฉ ์๊ณ ๋ฆฌ์ฆ!
- ๋ณํฉ ์ ๋ ฌ = $1000000\log_{2}{1000000}$ $\approx$ 200,000,000 < 40,000,00 → ์ ํฉ! ์๊ณ ๋ฆฌ์ฆ$\log_{2}{10} \approx 3.322$
- [์ฐธ๊ณ !]
์๊ฐ ๋ณต์ก๋ ๋ฐํ์ผ๋ก ์ฝ๋ ๋ก์ง ๊ฐ์ ํ๊ธฐ
Step1. ๊ฐ์ฅ ๋จผ์ , ์ฝ๋์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๋์ถํ๋ค
→ ๊ทธ๋ฌ๋ ค๋ฉด ์๊ฐ๋ณต์ก๋ ๋์ถ ๊ธฐ์ค์ ์์์ผ ํจ!
๋์ถ ๊ธฐ์ค ๊ณ ๋ คํด์ผํ๋ค!
- ์์๋ ์๊ฐ ๋ณต์ก๋ ๊ณ์ฐ์์ ์ ์ธํ๋ค์ฝ๋์ ๋ฐ๋ณต๋ฌธ์ด 3๊ฐ๊ฐ ๊ฐ๊ฐ ์์ด์ ์ฐ์ฐ ํ์๊ฐ 3N์ด ๋๋๋ผ๋,
- ์์๋ฅผ ๋ฌด์ํ๊ณ ๋ ๋ค ์๊ฐ ๋ณต์ก๋๋ O(n) ์ผ๋ก ๊ฐ์!
- → ๋ฐ๋ณต๋ฌธ ํ๋์ ์ฐ์ฐ ํ์๋ N๋ฒ
- ๊ฐ์ฅ ๋ง์ด ์ค์ฒฉ๋ ๋ฐ๋ณต๋ฌธ์ ์ํ ํ์๊ฐ ์๊ฐ ๋ณต์ก๋์ ๊ธฐ์ค์ด ๋๋ค์ด์ค for๋ฌธ 1๊ฐ๋ก ์ธํ N^2 ์ด๋ค!
- → ์ผ๋ฐ for๋ฌธ์ด 10๊ฐ, ์ด์ค for ๋ฌธ์ด 1๊ฐ ์๋ค๊ณ ํ๋ฉด, ์ฌ๊ธฐ์์์ ์๊ฐ ๋ณต์ก๋๋
Step2. ์ฐ์ฐ์ด ๊ฐ์ฅ ํฐ ๋ถ๋ถ์ ์ฐพ์์ ์ฐ์ฐ์ ๋์ฑ ํจ์จ์ ์ธ ๊ตฌ์กฐ๋ก ์์ !
2. ์ฝ๋์ ๋ ผ๋ฆฌ์ค๋ฅ ์ก๋ ๋ฒ: ๋๋ฒ๊น
2-1. ๋๋ฒ๊น ์ด ์ค์ํ ์ด์
๋๋ฒ๊น ์ด๋
debugging : ํ๋ก๊ทธ๋จ์์ ๋ฐ์ํ๋ ๋ฌธ๋ฒ ์ค๋ฅ๋ ๋ ผ๋ฆฌ ์ค๋ฅ๋ฅผ ์ฐพ์ ๋ฐ๋ก์ก๋ ๊ณผ์ !
๋ฌธ๋ฒ ์ค๋ฅ๋ ์ปดํ์ผ๋ฌ๊ฐ ์๋์ผ๋ก ์ฐพ์์ค, ์ฃผ๋ก ๋ ผ๋ฆฌ ์ค๋ฅ๋ฅผ ์ฐพ๊ธฐ ์ํจ์ด๋ค!
๋๋ฒ๊น ์ ์ฝ๋ฉ ํ ์คํธ์ ํ์ํ ๊ธฐ์ ์ด๊ณ , ๊ทธ๋ฅ ์์ ๋๊ธฐ๋ง ํ๋ฉด ๋๋ ๊ฒ์ด ์๋๋ผ, ๋ฌธ์ ๋ฅผ ํ๋ฉด์ ๋ฐ๋์ ํด์ผํ๋ ๊ณผ์ ์ด๋ค!
๋ฐฉ๋ฒ
- ์ฝ๋์์ ๋๋ฒ๊น ํ๊ณ ์ ํ๋ ์ค์ ์ค๋จ์ (breakpoint)์ ์ค์ ํ๋ค
- IDE์ ๋๋ฒ๊น ๊ธฐ๋ฅ์ ์คํํ๋ฉด, ์ฝ๋๋ฅผ 1์ค์ฉ ์คํํ๊ฑฐ๋ , ๋ค์ ์ค๋จ์ ๊น์ง ์คํ ๊ฐ๋ฅ!
- (์ด ๊ณผ์ ์์ ์ถ์ ํ ๋ณ์ซ๊ฐ๋ ์ง์ ๊ฐ๋ฅ!), ๋ณ์์ ๊ฐ ๋ณํ ๋ฐ๋ผ๊ฐ๋ฉด์ ํ์ ํ๊ธฐ
- ๋ณ์๊ฐ ์ด์ธ์๋ ์ํ๋ ์์์ ์ ๋ ฅํด ๋ ผ๋ฆฌ ์ค๋ฅ ํ์ ๊ฐ๋ฅ!
2-2. ๋๋ฒ๊น ํ์ฉ ์ฌ๋ก ์ดํผ๊ธฐ
์ค๋ฅ ์ ๊ฒ๋ฐฉ์
1. ๋ณ์ ์ด๊ธฐํ ์ค๋ฅ๋ฅผ ๋ฒํ์ง ์์๋์ง ์ฒดํฌ
→ ๋ชจ๋ ๋ณ์๊ฐ ์ ์์ ์ผ๋ก ์ด๊ธฐํ ๋๊ณ ์๋์ง, ๋๋ฒ๊น ์ ์ด์ฉํด ํ์ธํด๋ณด๊ธฐ
2. ๋ฐ๋ณต๋ฌธ ์ธ๋ฑ์ค ๋ฒ์ ๋์ด๊ฐ์ง ์์๋์ง ์ฒดํฌ
→ ๋ฐ๋ณต๋ฌธ์์ ๋ฐ๋ณต ๋ฒ์๋ฅผ ์๋ชป ์ง์ ํ๊ฑฐ๋,
๋น๊ต ์ฐ์ฐ์๋ฅผ ์๋ชป ์ฌ์ฉํ๋ ๊ฒฝ์ฐ
๋ฐฐ์ด ์ธ๋ฑ์ค๊ฐ 0๋ถํฐ ์์ํ๋ ์ฌ์ค์ ๊ฐ๊ณผํ๊ฑฐ๋,
๋ฐ๋ณต๋ฌธ์ N๊น์ง ๋ฐ๋ณตํ๋๋ก ์ค์ ํด์ผ ํ๋๋ฐ, ๋น๊ต ์ฐ์ฐ์๋ฅผ ์๋ชป ์ ๋ ฅํ์ฌ N-1 ๊น์ง ๋ฐ๋ณตํ๋๋ก ์ค์ ํ๋ ๋๋ ์๋ค
๋ฐ๋ณต๋ฌธ์ ์ฌ์ฉํ ๋ ๋ง๋ค, ๋ฒ์์ ์์ ์ธ๋ฑ์ค๋ฅผ ๊ผผ๊ผผํ๊ฒ ํ์ธํ๊ณ ,
ํน์ ๋ชจ๋ฅผ ์ ๋ ฅ ์ค์๋ฅผ ๋๋นํด ๋๋ฒ๊น ํ๋ ์ต๊ด์ ๋ค์ผ ๊ฒ!
3. ์๋ชป๋ ๋ณ์ ์ฌ์ฉ ์ฒดํฌ
4. ํ์ด์ฌ ์๋ ํ ๋ณํ ์ฒดํฌ
ํ์ด์ฌ์์์ ๋๋๊ธฐ๋ / ์ฐ์ฐ์์, // ์ฐ์ฐ์ ๋ ๊ฐ์ง ์ด๋ค!
- / ์ฐ์ฐ: ๋๋์ ์ ๊ฒฐ๊ณผ๊ฐ์ float ํ์ผ๋ก ์ถ๋ ฅ → ์์์ ์ ๊ฒฐ๊ณผ๊น์ง ๋ณด์ฌ์ค๋ค!
- // ์ฐ์ฐ: ๋๋์ ์ ํ ๊ฒฐ๊ด๊ฐ์ int ํ์ผ๋ก ์ถ๋ ฅ → ๋ชซ์ ๊ฒฐ๊ณผ๋ง ๋ณด์ฌ์ค๋ค!
- % ์ฐ์ฐ: ๋๋์ ์ ํ ํ ๋๋ ๋๋จธ์ง ๊ฐ์ ๋ณด์ฌ์ค๋ค!
- Chapter 2 ๋ชฉํ: ๋ค์ํ ์๊ณ ๋ฆฌ์ฆ์ ๊ด๋ จ๋ ํต์ฌ ์ด๋ก ๊ณผ, ์ด๋ฅผ ๋ฐํ์ผ๋ก ์ค์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ ์์๋ณด๊ธฐ
๋ฏธ๋ฆฌ ๋ณด๋ ์ฝ๋ฉ ํ ์คํธ ์ค๋ต ๋ ธํธ
- ๋ชฉํ: ๋ฌธ์ ํ์ด์์ ์์ฃผ ์ค์ํ๋ ์ ํ, ํ ์ผ๋ก ๋ฏธ๋ฆฌ ์ตํ๋๊ธฐ!
1. ์๊ฐ ์ด๊ณผ์ ์์ธ์ ์ฐพ์ ํด๊ฒฐํ๊ธฐ
ํด๊ฒฐ ๋ฐฉ๋ฒ 1. ํ์ด ๋ก์ง์ ์๊ฐ ๋ณต์ก๋ ํ์ฉ ๋ฒ์ ๋ค์ ์ ๊ฒํ๊ธฐ
๋ฌธ์ ํ์ด๋ฅผ ์ค๊ณ ํ ๋,
ํด๋น ๋ฐฉ์์ด ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ณ ๋ คํ์ฌ ์ ํ ์๊ฐ ๋ฒ์ ๋ด์ ๋ค์ด๊ฐ๋์ง๋ฅผ ๋จผ์ ์ฒดํฌํ๊ณ ๋ค์ด๊ฐ์ผํจ!
→ ์๊ฐ ๋ณต์ก๋๊ฐ ๋๋ฌด ๋๋ค๋ฉด ํ์ด ์๊ณ ๋ฆฌ์ฆ ์์ฒด๋ฅผ ์์ ํด์ผํ ํ์๊ฐ ์๋ค
ํด๊ฒฐ ๋ฐฉ๋ฒ 2. ์ /์ถ๋ ฅ ์ต์ ํ!
- ์ ์ถ๋ ฅ ์ต์ ํ ๋ฐฉ๋ฒ:sys.stdin.readline() ๊ณผ sys.stdout.write()๋ฅผ ํ์ฉํ๋ฉด ์ฒ๋ฆฌ ์๋๋ฅผ ํฌ๊ฒ ํฅ์์ํฌ ์ ์๋ค!
- input() , print() ๋์ ,
- ์ด๊ฑธ ์ฐ๋ฉด ์ผ๋งํผ ์๊ฐ์ ๋จ์ถ์ํฌ ์ ์๋์ง?
- 1,000,000๊ฐ์ ์ ์ ์
์ถ๋ ฅ ์๊ฐ ์ฐจ์ด ๋น๊ต ํ๋ฐฉ์ ์
๋ ฅ ์๋(์ด) ์ถ๋ ฅ ์๋(์ด) ์ด ์์ ์๊ฐ(์ด)
input()๊ณผ print() 1.8 1.2 3 sys.stdin.readline()๊ณผ sys.stdout.write() 0.3 0.3 0.6 - → ์ด ์์์๊ฐ์์ ํฐ ์ฐจ์ด๊ฐ ์๊ธด๋ค! (์ค์ ํ๊ฒฝ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง ์ ์์)
- 1,000,000๊ฐ์ ์ ์ ์
์ถ๋ ฅ ์๊ฐ ์ฐจ์ด ๋น๊ต ํ๋ฐฉ์ ์
๋ ฅ ์๋(์ด) ์ถ๋ ฅ ์๋(์ด) ์ด ์์ ์๊ฐ(์ด)
- ๊ฐ๊ฐ์ ์๋ ์๋ฆฌ ์ฐจ์ด[๋น๊ต]
- input() ์ ํธ์ถ๋ ๋ ๋ง๋ค ํ ์ค์ ์ฝ์ด → ๋์ ๊ฐํ ๋ฌธ์๋ฅผ ์ ๊ฑฐํ ๋ฌธ์์ด์ ๋ฐํ
- (์ซ์ ๋ณํ ๋ฑ ์ถ๊ฐ ํ์ฑ์ ์ง์ ์ฒ๋ฆฌํด์ผํจ!)
- print()๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ถ๋ ฅ ๋ด์ฉ์ ๋ฒํผ์ ๋ชจ์๋ค๊ฐ ์ํฉ์ ๋ฐ๋ผ ๋น์ด๋ค
- → ๋ฐ๋ณต ํธ์ถ์ด ๋ง์ผ๋ฉด ์์ ๋จ์์ ์ฆ์ ์ฐ๊ธฐ๋ก ์ธํด ์ฑ๋ฅ์ด ์ ํ๋ ์ ์์!
- ์ ์ถ๋ ฅ ๋ฐ์ดํฐ์ ์์ด ๋ง์์ง๋ฉด, ํฐ ์ฑ๋ฅ ์ฐจ์ด๊ฐ ๋ฐ์ํ ์ ์๊ธฐ ๋๋ฌธ์!
- sys.stdin.readline() ์ ์ ๋ ฅ ๋ฒํผ์์ ํ ์ค ์ ์ฒด๋ฅผ ๊ทธ๋๋ก ์ฝ์
- → ๋๋ ์ ๋ ฅ์์ ๋ ๋น ๋ฅธ ์ฑ๋ฅ์ ๋ผ ์ ์๋ค!
- sys.stdout.write() : ๊ฐํ ๋ฌธ์๋ฅผ ์๋์ผ๋ก ๋ถ์ด์ง ์์!(๋ฌธ์์ด๋ง ์ถ๋ ฅํ ์ ์์ผ๋ฏ๋ก, ์ ์๋ str() ๋ก ๋ณํํ์ฌ ์ถ๋ ฅ!)
- → ์ฌ๋ฌ ์ถ๋ ฅ์ ๋ชจ์ ํ ๋ฒ์ ์ถ๋ ฅํ๋ฉด ํฐ ์๋ํฅ์ ๊ฐ๋ฅ!
2. ์ธ๋ฑ์ค์ ์๋ฏธ ๋ถ์ฌํ์ฌ ํ์ด ๋ณด๊ธฐ
์ธ๋ฑ์ค์ ์ญํ
- ๋ช ๋ฒ์งธ ๋ฐ์ดํฐ์ธ์ง ๋ํ๋ด๋ ์ญํ
- ์ธ๋ฑ์ค๋ฅผ ์์๊ฐ ์๋๋ผ, ํด๋น ์ซ์ฃ๊ฐ ์์ฒด์ ์๋ฏธ๋ฅผ ๋ถ์ฌํ์ฌ ์ฌ์ฉํ๋ ๋ฐฉ์!
- → ํด์ฑ ๊ฐ๋ ์ ์ ์ฉํ์!
์ธ๋ฑ์ค์ ํด์ฑ ๊ฐ๋ ์ ์ฉ
- ์ ์ฉ ์์A[1] : A๋ผ๋ ๋ฐฐ์ด์ 1๋ฒ ์ธ๋ฑ์ค์ ๊ฐ์ ๋ํ๋ผ ์๋ ์์ง๋ง,1์ด๋ผ๋ ๊ฐ์ด ๋ช ๊ฐ ์๋์ง๋ฅผ ์ ์ฅํ๋ค๊ณ ๋ ์ฌ์ฉ๊ฐ๋ฅ
- A[1] = 2, 1์ด๋ผ๋ ๊ฐ์ด 2๊ฐ ์๋ค๋ ๋ป์ผ๋ก ์ฌ์ฉ ๊ฐ๋ฅ0 1 2 3 4
5 2 1 6 9
- A[1] = 2, 1์ด๋ผ๋ ๊ฐ์ด 2๊ฐ ์๋ค๋ ๋ป์ผ๋ก ์ฌ์ฉ ๊ฐ๋ฅ0 1 2 3 4
- ์ธ๋ฑ์ค๋ฅผ ์์๊ฐ ์๋๋ผ, ํด๋น ์ซ์ฃ๊ฐ ์์ฒด์ ์๋ฏธ๋ฅผ ๋ถ์ฌํ๋ ์ํฉ์ ๊ฐ์ฅ ์์ฃผ ์ฌ์ฉํ๋ค
- → ์ซ์๊ฐ์ผ๋ก ์๋ฏธ๋ฅผ ๋ถ์ฌํ ๊ฒฝ์ฐ,
- ์ธ์ ์ ์ฉํ๋ฉด ์ข์๊ฐ?→ 1์ด ์์ ์ ๋ ฌ์ด ์ด๋ ต๋ค
- ์ธ๋ฑ์ค๋ฅผ ๊ฐ ์์ฒด๋ก ํ์ฉํ๋ฉด, ๊ณ์ ์ ๋ ฌ๊ณผ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์ ํ ์๊ฐ ๋ด์ ์ ๋ ฌํ ์ ์๋ค!
- ์) 1000๋ณด๋ค ์์ ์์ฐ์ 10,000,000๊ฐ๋ฅผ 1์ด ์์ ์ ๋ ฌํด์ผ ํ๋ ์ํฉ,
- ์ธ๋ฑ์ค์ ์๋ฏธ๋ฅผ ๋ถ์ฌํ ๋ํ ์ฌ๋ก - [๊ณ์ ์ ๋ ฌ]→ ์ฌ๊ธฐ์ count ๋ฆฌ์คํธ์๊ฐ์ ํด๋น ์ซ์์ ๋ฑ์ฅ ํ์!
- ์ธ๋ฑ์ค๋ ์ซ์ ์์ฒด
- import sys N = int(sys.stdin.readline()) count = [0]* 1001 numbers = list(map(int, sys.stdin.readline().split())) for number in numbers: **count[number] += 1 #์ธ๋ฑ์ค์ ์ซ์๊ฐ์ผ๋ก ์๋ฏธ๋ฅผ ๋ถ์ฌํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ!** for i in range(1001): #0~1000 ์ค์ if count[i] != 0: #i๊ฐ์ด 0๊ฐ์ธ ์๋ฉด for _ in range(count[i]): #0๋ถํฐ count[i]์ ๊ฐ์-1๊น์ง sys.stdout.write(str(i)+ ' ')
๋น๊ต ์ฐ์ฐ์ ๋ฐ๋ก ํ์ง ์์๋ 10,000,000๊ฐ์ ์ซ์๋ฅผ 1์ด ์์ ๋น ๋ฅด๊ฒ ์ ๋ ฌํ ์ ์๋ค!
์ค์ ์ฝํ ์ํฉ์์๋, ์๊ตฌ ์ฌํญ์ ๋ฐ๋ผ ์ธ๋ฑ์ค์ ์ ์ ํ ์๋ฏธ๋ฅผ ์ง์ ๋ถ์ฌํด์ผ ํ๋ ๋ฌธ์ ๋ ์์ฃผ ์ถ์ ๋๋ฏ๋ก,
⇒ ์ธ๋ฑ์ค๋ฅผ ๋จ์ํ ‘๋ช ๋ฒ์งธ ์์’ ๋ก๋ง ์๊ฐํ์ง ๋ง๊ณ
๋ฌธ์ ์ํฉ์ ๋ฐ๋ผ ๋ค์ํ ์๋ฏธ๋ก ๋ณํํด ๋ณด๋ ์ฐ์ต์ด ์ค์ํ๋ค!!
3. ๋๋จธ์ง ์ฐ์ฐ์ ์ค์์ฑ ์์๋ณด๊ธฐ
- ๋๋จธ์ง ์ฐ์ฐ์ด ์ ์ค์ํ๊ฐ?
์ ๋ต์ OO์ผ๋ก ๋๋ ๋๋จธ์ง๋ฅผ ์ถ๋ ฅํด๋ผ → ๋๋จธ์ง ์ฐ์ฐ์ ์ธ์ ํ๋๋๊ฐ ์๋ ์ฐจ์ด๋ฅผ ๋ง๋ ๋ค!
- ๋ถ๋ฐฐ ๋ฒ์น ํ์ฉ์ ์ค์์ฑ!๋ถ๋ฐฐ ๋ฒ์น์ ํตํด ๊ฐ์ ์ค๊ฐ์ค๊ฐ์ฉ ์ฐ์ฐํ๋ ๊ฒ์ด ์ฐ์ฐ ์๋๋ฅผ ์ค์ธ๋ค!
- ๋ํ ๋งค์ฐ ํฐ ๊ฐ์ ํ ๋ฒ์ ์ฐ์ฐํ๊ธฐ ๋ณด๋ค,
๋๋จธ์ง ์ฐ์ฐ์ด ์์ฃผ ํ์ฉ๋๋ ๋ถ๋ฐฐ ๋ฒ์น
- ์ฃผ์! ๋๋์ ์ ๋ถ๋ฐฐ ๋ฒ์น์ด ์ฑ๋ฆฝํ์ง ์๋๋ค
- ๋ง์ ์ ๋ถ๋ฐฐ ๋ฒ์น : (A+B) % C = (A%C + B%C)%C
- ๋บ์ ์ ๋ถ๋ฐฐ ๋ฒ์น : (A-B) % C = (A%C - B%C)%C
- ๊ณฑ์ ์ ๋ถ๋ฐฐ ๋ฒ์น : (A*B)%C = (A%C * B%C) %C
→ ๋๋์ ์ ๋๋จธ์ง ์ฐ์ฐ์ ๋ถ๋ฐฐ ๋ฒ์น์ด ์ฑ๋ฆฝํ์ง ์๋๋ค. ๋๋จธ์ง(๋ง์ , ๋บ์ , ๊ณฑ์ ์ ์ฑ๋ฆฝ)
ํฐ ๊ฐ์ ํ ๋ฒ์ ๋๋จธ์ง ์ฐ์ฐ ํ๋ฉด ์๊ฐ ์ด๊ณผ์ ์ํ์ด ์๋ค! → ๋ถ๋ฐฐ ๋ฒ์น์ ์ ํ์ฉํ์
ํ์ด์ฌ์์๋ intํ์ด ์๋์ผ๋ก ํ์ฅ๋๋ฏ๋ก, ์ ์ ์ค๋ฒํ๋ก๋ ๋ฐ์ํ์ง ์๋๋ค.
ํ์ง๋ง ์ซ์๊ฐ ๋งค์ฐ ์ปค์ง๋ฉด, ๊ณ์ฐ ์๋๊ฐ ๊ธ๊ฒฉํ ๋๋ ค์ง๊ณ , ์๊ฐ ์ด๊ณผ์ ๊ฑธ๋ฆด ์ ์๋ค!
๋ง์ง๋ง์๋ง %์ฐ์ฐ์ ์ ์ฉํด๋ ์ ๋ต ๊ณ์ฐ์ด ๊ฐ๋ฅํ์ง๋ง,
์ฑ์ ์๋ฒ์์๋ ์๊ฐ ์ด๊ณผ๋ก ์ฒ๋ฆฌ๋์ด ์ค๋ต์ด ๋ ์ ์๋ค!
- ํ์ฉ ์์ : [1๋ถํฐ 100,000๊น์ง ๊ณฑํ ๊ฐ์ 1,000,000,007๋ก ๋๋ ๋๋จธ์ง๋ฅผ ๊ตฌํ์์ค]
import time
MOD = 1000000007
answer = 1
start = time.time()
"""
for i in range(1,100001):
answer *= i
result = answer % 1000000007 #๊ณฑํ ๊ฒฐ๊ณผ๋ฅผ ํ ๋ฒ์ ๋๋จธ์ง ์ฐ์ฐ ํ๊ธฐ๋ณด๋ค๋,
"""
**for i in range(1,100001):
answer = (answer *i)%MOD**
# ๋ฐ๋ณต๋ฌธ ํ ์ซ์ ๋ง๋ค ๊ณฑ์
, ๋๋จธ์ง ์ฐ์ฐ์ ํ๋ ๊ฒ์ด ํจ์ฌ ์๋ ํฅ์๋๋ค
์ฆ, ์ ๋ต์ OO์ผ๋ก ๋๋ ๋๋จธ์ง๋ฅผ ์ถ๋ ฅํด๋ผ ์์ ์ ๋ต์ ๊ตฌํ ํ ๋ง์ง๋ง์ ๋๋จธ์ง ์ฐ์ฐ์ ๊ตฌํ๋ ๊ฒฝ์ฐ , ์๊ฐ ์ด๊ณผ์ ์ํ์ด ์๋ค!
⇒ ๋ถ๋ฐฐ ๋ฒ์น์ ํตํด, ๊ณฑ์ , ๋ง์ ๋ฑ ์ค๊ฐ ๊ณ์ฐ์ ํ ๋ ๋ง๋ค ๋๋จธ์ง ์ฐ์ฐ์ ์ ์ฉํ๋ ์ต๊ด์ด ํ์์ด๋ค!
4. ์ ๋ ฌ ๊ธฐ์ด ๋ค์ง๊ธฐ
- ์ ๋ ฌ ๊ธฐ์ด๋ฅผ ๋ค์ ธ์ผ ํ๋ ์ด์ ?
- ์ด์ง ํ์ ๊ณผ ๊ฐ์ ํน์ ์๊ณ ๋ฆฌ์ฆ์ ์ ๋ ฌ๋ ๋ฐ์ดํฐ์๋ง ์ ์ฉ๋ ์ ์๊ธฐ ๋๋ฌธ!
- ๋ํ, ์ ๋ ฌ์ ๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ, ํฌ ํฌ์ธํฐ, ์ฐ์ ์์ ํ ๋ฌธ์ ์์๋ ์ ์ฒ๋ฆฌ ์ ๋ฐ๋์ ํด์ผํจ!
์ค๋ฆ์ฐจ์ ์ ๋ ฌ : ์์ ๊ฐ to ํฐ ๊ฐ
๋ฐ์ดํฐ์ ์๋ณธ์ด ์ ์ง๋์ด์ผ ํ๋์ง์ ์ฌ๋ถ์ ๋ฐ๋ผ ๋ค๋ฅธ ๋ฐฉ์ ์ฌ์ฉ!
- ๋ฐฉ์1: ํ์ด์ฌ .sort() ์ด์ฉํ ์ ๋ ฌ!
#์๋ณธ ๋ฆฌ์คํธ ์ ์ธ A = [5,3,2,4,1] # ๋ฐฉ์1 : list.sort() : ๋ฆฌ์คํธ ์์ฒด๋ฅผ ์ ๋ ฌ (in-place) A.sort() - = ๋ฆฌ์คํธ(์๋ณธ) ์์ฒด๋ฅผ ์ ๋ ฌ! (in-place ์ ๋ ฌ) : ๋ฐํ๊ฐ None
- ๋ฐฉ์2 : ํ์ด์ฌ sorted() ์ด์ฉํ ์ ๋ ฌ!
#์๋ณธ ๋ฆฌ์คํธ ์ ์ธ A = [5,3,2,4,1] # ๋ฐฉ์2 : sorted(list) : ๋ฆฌ์คํธ์ ์ ๋ ฌ๋ ๋ณต์ฌ๋ณธ์ ๋ฐํ (์๋ณธ์ ์ ์ง) B = sorted(A) - = ์ ๋ ฌ๋ ๋ณต์ฌ๋ณธ์ ๋ฐํ!
๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ : ํฐ ๊ฐ to ์์ ๊ฐ
reverse=True ์ต์ ์ถ๊ฐํด์ ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ ๊ตฌํ!
#์๋ณธ ๋ฆฌ์คํธ ์ ์ธ
A = [5,3,2,4,1]
# ๋ฐฉ์1์ ๋ด๋ฆผ์ฐจ์ ์ต์
์ถ๊ฐ
A.sort**(reverse=True)**
print("๋ด๋ฆผ์ฐจ์ ๊ฒฐ๊ณผ:",A)
# ์ ๋ ฌ๋ ๋ณต์ฌ๋ณธ ๋ฐํ(์๋ณธ ์ ์ง)
B = sorted**(A, reverse=True)**
print("๋ด๋ฆผ์ฐจ์ ๋ณต์ฌ๋ณธ:",B)
์ถ๊ฐ) ์ ๋ ฌ ํจ์๋ฅผ ์ง์ ์ ์ดํ ์ ์๋ ๊ฒฝ์ฐ : ๋ถํธ๋ฅผ ์ผ์์ ์ผ๋ก ๋ฐ์ !
#์๋ณธ ๋ฆฌ์คํธ ์ ์ธ
A = [5,3,2,4,1]
**#๋ถํธ๋ฅผ ๋ฐ์ ์ํค๊ณ , ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ ํ, ๋ค์ ๋ถํธ ๋๋๋ฆฌ๊ธฐ!**
A = [-x for x in A] #๋ถํธ ๋ฐ์ : [-5,-3,-2,-4,-1]
A.sort() # ์ด๋์ A๋ [-5,-4,-3,-2,-1]
A = [-x for x in A] # ๋ถํธ ๋ฐ์ : [5,4,3,2,1] -> ๋ด๋ฆผ์ฐจ์!์ด ๋จ
5. ๋ค์ค ์กฐ๊ฑด ์ ๋ ฌ ์ตํ๊ธฐ
- ๋ค์ค ์กฐ๊ฑด ์ ๋ ฌ์ด๋? : ์ฌ๋ฌ๊ฐ์ ์กฐ๊ฑด์ ๋ฐ๋ผ ์ ๋ ฌํ๋ ๊ฒ
- ๋ํ์ ์ผ๋ก ํํ ๊ธฐ๋ฐ ์ ๋ ฌ๊ณผ, ๋์ ๋๋ฆฌ ๊ธฐ๋ฐ ์ ๋ ฌ์ด ์๋ค
ํํ ๊ธฐ๋ฐ ์ ๋ ฌ
- ํํ ๊ธฐ๋ฐ ๋ฐฉ์ : ๋ฐ์ดํฐ๋ฅผ ํํ๋ก ๊ตฌ์ฑ ํ→ .sort() ๋ sorted() ์ key์ธ์์ lambda๋ฅผ ์ฌ์ฉํด ์ ๋ ฌ ๊ธฐ์ค์ ์ง์
- ํํ ํํ๋ก ํ๋ ์ด์ ?
- ์ ๋ ฌ ๊ธฐ์ค์ ํํ๋ก ๋ฌถ์ผ๋ฉด, ์์ ์๋ ์กฐ๊ฑด๋ถํฐ ์ฐจ๋ก๋ก ์ฌ๋ฌ ์กฐ๊ฑด์ ์ ์ฉํ ์ ์์!
- ์์ - ์์ด ์ ์ ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ, ๋์ ์ธ๊ฒ ์์ผ๋ฉด ์ํ์ ์ ๋ด๋ฆผ์ฐจ์๋ ๊ณ ๋ คํ๋ ์ ๋ ฌ
- socres.sort(key=lambda x: (-x[0], -x[1]))
- key=lambda x:ํํ์ ๊ฐ ์์๋ฅผ x ๋ผ๊ณ ๋ถ๋ฅด๊ณ ,
- ๊ทธ x๋ฅผ ์ด๋ป๊ฒ ๋ณํํ ๊ฐ์ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌํ ์ง ์ ํด์ค๋ค!
- → ์ ๋ ฌ ๊ธฐ์ค์ ์ปค์คํ (์ฌ์ฉ์ ์ ์) ํ๊ฒ ๋ค๋ ์๋ฏธ!
- (-x[0], -x[1])-x[0] : ์ฒซ ๋ฒ์งธ ์์์ ๋ง์ด๋์ค ๋ถ์ฌ์ ์ ๋ ฌ<aside>
- ์์ด๋ ๋ด๋ฆผ์ฐจ์(๋์ ์) → ์ํ์ ์ค๋ฆ์ฐจ์(๋ฎ์ ์) ์ผ๋ก ์ ๋ ฌํ๊ณ ์ถ๋ค๋ฉด?
- scores.sort(key=lambda x: (-x[0], x[1]))
- -x[1] : ๋ ๋ฒ์งธ ์์์ ๋ง์ด๋์ค ๋ถ์ฌ์ ์ ๋ ฌ!
- ๊ธฐ๋ณธ ์ ๋ ฌ์ ์ค๋ฆ์ฐจ์์ธ๋ฐ, ๋ง์ด๋์ค๋ฅผ ๋ถ์ฌ์ ์์๋ฅผ ๋ค์ง์!
- socres.sort(key=lambda x: (-x[0], -x[1]))
- # ์์ด, ์ํ ์์๋ก ํํ ๋ฐ์ดํฐ ์ ์ฅ scores = [ (80,100), (100,50), (70,100), (80,90), ] #1์์: ์์ด ๋ด๋ฆผ์ฐจ์ -> ๋์ ์ธ๊ฒ ์์ผ๋ฉด 2์์: ์ํ ๋ด๋ฆผ์ฐจ์ **scores.sort(key=lambda x: (-x[0],-x[1]))** for s in scores: print(f"english={s[0]}, math={s[1]}")
- ์ถ๊ฐ) ๋๋ค ํจ์ lambda ์ดํดํ๊ธฐ! : ๋๋ค ํจ์๋ ์ ๋ ฌ์ ์ฐธ๊ณ ํ๊ธฐ ์ํ ๊ธฐ์ค๋ง ๋ณด๊ธฐ ์ํจ์!sort(key=...) ํจ์์์ key์ ์ ๋ฌํ๋ ๋๋ค ํจ์๋์ ๋ ฌํ ๋๋ง ์ฐธ๊ณ ํ๋ '์์ ๊ธฐ์ค๊ฐ'์ ๋ง๋๋ ์ญํ ์ ํฉ๋๋ค.
- ๊ธฐ์คํ ์์ฑ: ํ์ด์ฌ์ด ์ ๋ ฌํ๊ธฐ ์ ์ ๊ฐ ์์ ์์ ํฌ์คํธ์์ ํ๋์ฉ ๋ถ์ธ๋ค๊ณ ์์ํด ๋ณด์ธ์.
- (80, 100) ์์๋ (-80, -100)์ด๋ผ๋ ํฌ์คํธ์์ ๋ถ์ ๋๋ค.
- (100, 50) ์์๋ (-100, -50)์ด๋ผ๋ ํฌ์คํธ์์ ๋ถ์ ๋๋ค.
- ์์ ์ ํ๊ธฐ: ํ์ด์ฌ์ ์ค์ ๋ฐ์ดํฐ๊ฐ ์๋๋ผ, ์ด ํฌ์คํธ์์ ์ ํ ์ซ์๋ค์ ๋น๊ตํด์ ์ค๋ฆ์ฐจ์์ผ๋ก ์์๋ฅผ ์ ํฉ๋๋ค.
- 100์ด 80๋ณด๋ค ์์ผ๋ฏ๋ก, 100 ํฌ์คํธ์์ด ๋ถ์ ๋ฐ์ดํฐ๊ฐ ๊ฐ์ฅ ์์ผ๋ก ๊ฐ๋๋ค.
- ๊ฒฐ๊ณผ ์ถ๋ ฅ: ์์๊ฐ ๋ค ์ ํด์ง๋ฉด ํฌ์คํธ์์ ๋ผ์ด๋ฒ๋ฆฌ๊ณ , ์๋ ์๋ ์ค์ ๋ฐ์ดํฐ(100, 50 ๋ฑ)๋ง ๋จ๊ฒจ์ ๋ฆฌ์คํธ๋ฅผ ์ฌ๋ฐฐ์นํฉ๋๋ค.
ํ์ด์ฌ ๋ด๋ถ์์ sort๊ฐ ๋์๊ฐ ๋์ ๋ ผ๋ฆฌ ๊ตฌ์กฐ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:๊ฒฐ๊ตญ lambda ํจ์๋ "์ด๋ค ๊ธฐ์ค์ผ๋ก ์ค ์ธ์ธ๊น?"๋ผ๋ ์ง๋ฌธ์ ๋ตํ๊ธฐ ์ํด ์ ๊น ๊ณ์ฐํด ๋ณด๋ ์์ผ ๋ฟ, ์๋ณธ ๋ฐ์ดํฐ๋ฅผ ์์ (Modify)ํ๋ ๋ช ๋ น์ด ์๋๋๋ค! - ๊ธฐ์คํ ์์ฑ: ํ์ด์ฌ์ด ์ ๋ ฌํ๊ธฐ ์ ์ ๊ฐ ์์ ์์ ํฌ์คํธ์์ ํ๋์ฉ ๋ถ์ธ๋ค๊ณ ์์ํด ๋ณด์ธ์.
- </aside>
- # ๋ด๋ถ์ ์ธ ๊ฐ์์ ๋์ ๊ณผ์ temp_keys = [] for x in scores: temp_keys.append((-x[0], -x[1])) # ์ ๋ ฌ์ ์ํ "์์ ํค" ์์ฑ # ์ด temp_keys๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ์ฒด ๋ฐ์ดํฐ์ ์์๋ฅผ ๊ฒฐ์ (์ค์ ๋ฐ์ดํฐ๋ ๋ณํ์ง ์์) # ์์ ๊ฒฐ์ ์๋ฃ ํ ๋ฆฌ์คํธ ์ฌ๋ฐฐ์น`
- ์๋ ์๋ฆฌ๋ฅผ ๋น์ ๋ก ์ค๋ช ํ๋ฉด ์ด๋ ์ต๋๋ค:
- ์ค์ ๋ฆฌ์คํธ์ ๊ฐ์ ๋ฐ๊พธ๋ ๊ฒ์ด ์๋๋ผ,
- <aside>
๋์ ๋๋ฆฌ ๊ธฐ๋ฐ ์ ๋ ฌ
- ๋์ ๋๋ฆฌ ๊ธฐ๋ฐ ๋ฐฉ์ : ๋ฐ์ดํฐ๋ฅผ ๋์ ๋๋ฆฌ๋ก ๊ตฌ์ฑ ํ→ .sort() ๋ sorted() ์ key์ธ์์ lambda๋ฅผ ์ฌ์ฉํด ์ ๋ ฌ ๊ธฐ์ค์ ์ง์
- ๋์ ๋๋ฆฌ ํํ๋ก ํ๋ ์ด์ ?
- ์ ๋ ฌ ๊ธฐ์ค์ ๋์ ๋๋ฆฌ ํํ๋ก ๋ฌถ์ผ๋ฉด, ํค(key)์ ์ด๋ฆ์ผ๋ก ๊ฐ์ ์ฐพ๊ธฐ ๋๋ฌธ์, ๋ฐ์ดํฐ์ ์๋ก์ด ํญ๋ชฉ์ด ์ถ๊ฐ๋๊ฑฐ๋ ์์๊ฐ ๋ฐ๋์ด๋ ์ ๋ ฌ ์ฝ๋๋ฅผ ๊ณ ์น ํ์๊ฐ ์๋ค!
- ์์ - ์ํ ์ ์ ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ, ๋์ ์ธ๊ฒ ์์ผ๋ฉด ์์ด ์ ์ ๋ด๋ฆผ์ฐจ์๋ ๊ณ ๋ คํ๋ ์ ๋ ฌ
- socres.sort(key=lambda x: (-x[0], -x[1]))
- key=lambda x:ํํ์ ๊ฐ ์์๋ฅผ x ๋ผ๊ณ ๋ถ๋ฅด๊ณ ,
- ๊ทธ x๋ฅผ ์ด๋ป๊ฒ ๋ณํํ ๊ฐ์ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌํ ์ง ์ ํด์ค๋ค!
- → ์ ๋ ฌ ๊ธฐ์ค์ ์ปค์คํ (์ฌ์ฉ์ ์ ์) ํ๊ฒ ๋ค๋ ์๋ฏธ!
- (-x[0], -x[1])-x[0] : ์ฒซ ๋ฒ์งธ ์์์ ๋ง์ด๋์ค ๋ถ์ฌ์ ์ ๋ ฌ<aside>
- ์์ด๋ ๋ด๋ฆผ์ฐจ์(๋์ ์) → ์ํ์ ์ค๋ฆ์ฐจ์(๋ฎ์ ์) ์ผ๋ก ์ ๋ ฌํ๊ณ ์ถ๋ค๋ฉด?
- scores.sort(key=lambda x: (-x[0], x[1]))
- -x[1] : ๋ ๋ฒ์งธ ์์์ ๋ง์ด๋์ค ๋ถ์ฌ์ ์ ๋ ฌ!
- ๊ธฐ๋ณธ ์ ๋ ฌ์ ์ค๋ฆ์ฐจ์์ธ๋ฐ, ๋ง์ด๋์ค๋ฅผ ๋ถ์ฌ์ ์์๋ฅผ ๋ค์ง์!
- socres.sort(key=lambda x: (-x[0], -x[1]))
- # ์์ด, ์ํ ์์๋ก ํํ ๋ฐ์ดํฐ ์ ์ฅ scores = [ {'english':80, 'math':100 }, {'english':100 , 'math': 50}, {'english':70, 'math': 100}, {'english':80, 'math': 90}, ] #1์์: ์์ด ๋ด๋ฆผ์ฐจ์ -> ๋์ ์ธ๊ฒ ์์ผ๋ฉด 2์์: ์ํ ๋ด๋ฆผ์ฐจ์ **scores.sort(key=lambda x: (-x['math'],-x['english']))** for s in scores: print(s)
๋ ์ ๋ ฌ ๋ฐฉ์์ ์ฐจ์ด
- ์ด๋ค ์ํฉ์ ํ์ฉํ๋๊ฐ?์งง๊ณ ๊ฐ๋จํด์ ๋ ๋น ๋ฅด๋ค๋์๋๋ฆฌ ๊ธฐ๋ฐ ์ ๋ ฌ: ๋ฐ์ดํฐ์ ์๋ก์ด ํญ๋ชฉ์ด ์ถ๊ฐ๋๊ฑฐ๋ ์์๊ฐ ๋ฐ๋์ด๋ ์ ๋ ฌ ์ฝ๋๋ฅผ ๊ณ ์น ํ์๊ฐ ์๋ค!
- ๊ตฌ์กฐํ๋์ด ๊ฐ๋ ์ฑ์ด ์ข๋ค
- → ์กฐ๊ฑด์ด ๋ง์์ง๋ฉด, ๋์ ๋๋ฆฌ๋ก ํด์ผ ๊ฐ๋ ์ฑ์ด ๋ ์ข์!
- ํํ ๊ธฐ๋ฐ ์ ๋ ฌ: ์ ์ ์กฐ๊ฑด์ผ ๋!, (๋จ์ ๊ณ์ฐ์ฉ), ๋จ์ ์ ๋ ฅ์ฒ๋ฆฌ ์ผ ๋!
6. ์ด์ฐจ์ ๋ฆฌ์คํธ ์ ๋๋ก ๋ค๋ฃจ๊ธฐ
- ์ด์ฐจ์ ๋ฆฌ์คํธ๋ ์ด๋์ ์ฌ์ฉํ๋๊ฐ? : ๊ทธ๋ํ์ ๊ตฌ์กฐ ํํํนํ ์ธ์ ๋ฆฌ์คํธ ๋ฐฉ์์ผ๋ก ๊ทธ๋ํ๋ฅผ ํํํ ๋,
- ์ด์ฐจ์ ๋ฆฌ์คํธ์ ์ ์ธ,๋ฐ์ดํฐ ์ ์ฅ, ํ์ฉ ๋ฐฉ๋ฒ์ ์ ํํ ์ดํดํ๊ณ ์์ด์ผ ์ํ์ฅ์์ ๋นํฉํ์ง ์๊ณ ๋ฌธ์ ๋ฅผ ํ ์ ์๋ค!
- → ์ฝํ ๋ฌธ์ ์์๋ ๊ทธ๋ํ ๊ด๋ จ ์๊ณ ๋ฆฌ์ฆ์ด ๋ง์ด ๋ฑ์ฅํ๋๋ฐ, ์ด ๋ ๊ทธ๋ํ์ ๊ตฌ์กฐ๋ฅผ ํํํ๋๋ฐ ๋ง์ด ์ฌ์ฉํ๋ ๊ฒ์ด ์ด์ฐจ์ ๋ฆฌ์คํธ์ด๋ค!
์ด์ฐจ์ ๋ฆฌ์คํธ๋ฅผ ์ด์ฉํ ๊ทธ๋ํ ๊ตฌํ ๋ฐฉ๋ฒ
[Step 1. ์ด์ฐจ์ ๋ฆฌ์คํธ ์ ์ธ๊ณผ ์ด๊ธฐํ]
ํ์ด์ฌ ๋ฆฌ์คํธ ์์ ๋ ๋ค๋ฅธ ๋ฆฌ์คํธ๋ฅผ ๋ฃ๋ ๋ฐฉ์์ผ๋ก ์ด์ฐจ์ ๋ฆฌ์คํธ๋ฅผ ๊ตฌ์ฑํ๋ค!
- ๋ณดํต ๋ ธ๋ ๋ฒํธ๋ 1๋ฒ๋ถํฐ ์์ ํ๋ฏ๋ก, ์ธ๋ฑ์ค 0 ์ฌ์ฉx, N+1 ํฌ๊ธฐ๋ก ๋ฆฌ์คํธ ์ด๊ธฐํ ํ๋ค
- # ์ ์ ์ด 3๊ฐ ์๋ค๊ณ ๊ฐ์ (1~3๋ฒ ์ฌ์ฉ!) N =3 **graph = [[] for _ in range(N+1)]**
→ ์ด๋ ๊ฒ ๋ง๋ graph[1], graph[2], graph[3] ๊ฐ๊ฐ์ด ๊ฐ ์ ์ ์ ์ธ์ ๋ฆฌ์คํธ ์ญํ ์ ํ๋ค!
[Step 2. ๊ทธ๋ํ ๋ฐ์ดํฐ ์ ์ฅํ๊ธฐ]
- ๋ฌธ์ ์์) ์๋์ ๊ฐ๋จํ ๊ทธ๋ํ์ ์
๋ ฅ๊ฐ ์ ์ฅํ๊ธฐ<aside>
- ์ผ์ชฝ ๊ทธ๋ํ๋ฅผ ํํํ๊ธฐ ์ํ ์ ๋ ฅ๊ฐ
- ๊ทธ๋ํ ๋ฐ์ดํฐ๋ฅผ ์ด์ฐจ์ ๋ฆฌ์คํธ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ด์ฉํ์ฌ ์ ์ฅํ๊ธฐ
# ์ ์ ์์ ๊ฐ์ ์ ์ ๋ ฅ N,E = map(int, input().split()) #์ ์ =3, E ๊ฐ์ (edge)=4 # ๊ฐ์ ์ ๋ณด๋ฅผ ์ ๋ ฅ๋ฐ์ ์ ์ฅ for _ in range(E): #์ ์ฅํ ์์ง์ ๊ฐ์๋งํผ ๋ฐ๋ณต (1~4๊น์ง) s,e,w = map(int,input().split()) **graph[s].append((e,w)) #์ด์ฐจ์ ๋ฆฌ์คํธ์ ๊ทธ๋ํ ๋ฐ์ดํฐ ์ ์ฅ! # (e,w) ๋ (๋์ฐฉ ๋ ธ๋, ๊ฐ์ค์น) ์!** - ์ฐ๊ฒฐ ์ ๋ณด๋ (๋์ฐฉ ๋ ธ๋, ๊ฐ์ค์น) ํํ์ ํํ๋ก ์ ์ฅํ๋ค
- ์ค์ ์ด์ฐจ์ ๋ฆฌ์คํธ์ ๋ฐ์ดํฐ ์ ์ฅ ํํ[1] → [2,4] [3,7][3] → [2,6]
- [2] → [1,10]
- [์์๋ ธ๋] → [๋์ฐฉ๋ ธ๋, ๊ฐ์ค์น] ํํ!
- </aside>
- 1 3 7
- 1 2 4 ( 1๋ฒ ๋ ธ๋์์ 2๋ฒ ๋ ธ๋๋ก ๊ฐ๋ ๊ฐ์ค์น 4์ ์์ง๊ฐ ์์ )
- flowchart LR 1 -- 7 --> 3 3 -- 6 --> 2 1 -- 4 --> 2 2 -- 10 --> 1
[Step 3. ๊ทธ๋ํ ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ]
- 1๋ฒ ๋ ธ๋์์ ์์๋๋ ์์ง ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ธฐ!์ด ์ฝ๋๋ฅผ ์ฌ์ฉํ๋ฉด
- [2,4] ๋ [3,7] ์ 2๊ฐ์ ์์ง ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๋ค
- for nextNode, weight in graph[1]: print(f"next Node {nextNode}, weight= {weight}")
→ ๊ทธ๋ํ ๋ฌธ์ ์์ ์ด์ฐจ์ ๋ฆฌ์คํธ๊ฐ ํ์ํ ๋ ์ ์ ํ๊ฒ ํ์ฉํ์ฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์!
'๐๋์' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [Spring Security in Action] 1์ฅ (0) | 2024.11.14 |
|---|