๊ทธ๋ฆฌ๋(6)
-
[BOJ] 1931 - ํ์์ค ๋ฐฐ์
๐ฌ ๋ฌธ์ ์ค๋ช ํ ๊ฐ์ ํ์์ค์ด ์๊ณ `N`๊ฐ์ ํ์๊ฐ ์ฃผ์ด์ง ๋ ํ์๋ค์ด ๊ฒน์น์ง ์๊ฒ ํ๋ฉด์ ๊ฐ์ฅ ๋ง์ ํ์๋ฅผ ์งํํ๋ ค ํ๋ค.๊ฐ ํ์๋ ์์ ์๊ฐ๊ณผ ๋๋๋ ์๊ฐ์ด ์ฃผ์ด์ง๋ค.ํ ํ์๊ฐ ๋๋๋ ๊ฒ๊ณผ ๋์์ ๋ค๋ฅธ ํ์๋ฅผ ์์ํ ์ ์๋ค.ํ์์ ์ `N` (1 โค `N` โค 100,000) ๐ ์ฃผ์ ์ฌํญํ์ ๋๋๋ ์๊ฐ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌํด์ผ ํ๋ค.๋จ ๋๋๋ ์๊ฐ์ด ๊ฐ์ ๊ฒฝ์ฐ ์์ ์๊ฐ์ด ๋น ๋ฅธ ์์ผ๋ก ์ ๋ ฌํด์ผ ํ๋ค.ํ์ ์๊ฐ์ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌํ๋ฉด ์ ๋๋ค! ๐ ๋ฌธ์ ํ์ดํ์ ์ ๋ณด๋ฅผ `(์์์๊ฐ, ๋์๊ฐ)`์ผ๋ก ์ ๋ ฅ๋ฐ๋๋ค.๋๋๋ ์๊ฐ ๊ธฐ์ค ์ค๋ฆ์ฐจ์ ์ ๋ ฌ์ ํ๋ ๋๋๋ ์๊ฐ์ด ๊ฐ๋ค๋ฉด ์์ ์๊ฐ์ด ๋น ๋ฅธ ์์ผ๋ก ์ ๋ ฌ์์์๋ถํฐ ํ์๋ฅผ ์ ํํ๋ฉฐ `ํ์ฌ ํ์ ์์์๊ฐ โฅ ์ด์ ํ์ ๋์๊ฐ`์ผ ๊ฒฝ์ฐ ์ ํ์ ํํ ํ์ ์..
2025.07.28 -
[BOJ] #1092 - ๋ฐฐ
1092๋ฒ: ๋ฐฐ ์ฒซ์งธ ์ค์ N์ด ์ฃผ์ด์ง๋ค. N์ 50๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ฐ์์ด๋ค. ๋์งธ ์ค์๋ ๊ฐ ํฌ๋ ์ธ์ ๋ฌด๊ฒ ์ ํ์ด ์ฃผ์ด์ง๋ค. ์ด ๊ฐ์ 1,000,000๋ณด๋ค ์๊ฑฐ๋ ๊ฐ๋ค. ์ ์งธ ์ค์๋ ๋ฐ์ค์ ์ M์ด ์ฃผ์ด์ง๋ค. M์ 10,000๋ณด www.acmicpc.net ** ๋ฌธ์ ์ ํ ๊ทธ๋ฆฌ๋ ** ํ์ด ๋ชจ๋ ๋ฐ์ค๋ฅผ ๋ฐฐ๋ก ์ฎ๊ธฐ๋๋ฐ ๋๋ ์๊ฐ์ ์ต์๊ฐ ๊ณ์ฐ ๋งค ๋ถ๋ง๋ค, ๋ชจ๋ ํฌ๋ ์ธ์ ๋ํ์ฌ ์ฎ๊ธธ ์ ์๋ ๋ฐ์ค๋ฅผ ์ ํํ์ฌ ์ฎ๊ธฐ๋๋ก ํจ ๋ฐ์ค๋ฅผ ๋ฌด๊ฒ ๊ธฐ์ค์ผ๋ก ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌํ ๋ค์, ๋ฌด๊ฑฐ์ด ๊ฒ๋ถํฐ ์ฎ๊ธฐ๋๋ก ํจ ์๊ฐ ๋ณต์ก๋ O(NM)์ ๋ฌธ์ ํด๊ฒฐ ๊ฐ๋ฅ: ํฌ๋ ์ธ ๊ฐ์ N, ๋ฐ์ค ๊ฐ์ M import sys n = int(input()) cranes = list(map(int, input().split())) m = int(i..
2021.06.25 -
[BOJ] #2012 - ๋ฑ์ ๋งค๊ธฐ๊ธฐ
2012๋ฒ: ๋ฑ์ ๋งค๊ธฐ๊ธฐ ์ฒซ์งธ ์ค์ ์์ฐ์ N์ด ์ฃผ์ด์ง๋ค. (1 โค N โค 500,000) ๋์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์ ๊ฑธ์ณ ๊ฐ ์ฌ๋์ ์์ ๋ฑ์๊ฐ ์์๋๋ก ์ฃผ์ด์ง๋ค. ์์ ๋ฑ์๋ 500,000 ์ดํ์ ์์ฐ์์ด๋ค. www.acmicpc.net ** ๋ฌธ์ ์ ํ ๊ทธ๋ฆฌ๋ ** ํ์ด ์์ ๋ฑ์์ ์ค์ ๋ฑ์์ ์ฐจ์ด๋ฅผ ์ต์ํํด์ผ ํจ ๊ทธ ๋ฐฉ๋ฒ์ผ๋ก ์์๋ ๋ฑ์๋ฅผ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ๋ฉด ๋จ n = int(input()) array = [] # ์์ ๋ฑ์ answer = 0 # ๋ถ๋ง๋์ ํฉ for _ in range(n): array.append(int(input())) array.sort() # ์ค๋ฆ์ฐจ์ ์ ๋ ฌ ์ํ for i in range(1, n + 1): answer += abs(i - array[i - 1]) prin..
2021.06.25 -
[BOJ] #1439 - ๋ค์ง๊ธฐ
1439๋ฒ: ๋ค์ง๊ธฐ ๋ค์์ด๋ 0๊ณผ 1๋ก๋ง ์ด๋ฃจ์ด์ง ๋ฌธ์์ด S๋ฅผ ๊ฐ์ง๊ณ ์๋ค. ๋ค์์ด๋ ์ด ๋ฌธ์์ด S์ ์๋ ๋ชจ๋ ์ซ์๋ฅผ ์ ๋ถ ๊ฐ๊ฒ ๋ง๋ค๋ ค๊ณ ํ๋ค. ๋ค์์ด๊ฐ ํ ์ ์๋ ํ๋์ S์์ ์ฐ์๋ ํ๋ ์ด์์ ์ซ์๋ฅผ ์ก๊ณ ๋ชจ www.acmicpc.net ** ๋ฌธ์ ์ ํ ๊ทธ๋ฆฌ๋ ** ํ์ด ๋ฌธ์์ด์ ์๋ ์ซ์๋ฅผ ๋ชจ๋ 0 ๋๋ ๋ชจ๋ 1๋ก ๋ง๋ค์ด์ผ ํจ ๋ฌธ์์ด์ ๊ธธ์ด๋ 100๋ง ์ดํ์ด๋ฏ๋ก, ์๊ฐ ๋ณต์ก๋๋ O(N)์ ํด๊ฒฐํด์ผ ํจ data = input() states = [0] * 2 # states[0-1]: 0-1์ด ์ฐ์์ผ๋ก ์ค๋ ์งํฉ ์ states[int(data[0])] += 1 for i in range(1, len(data)): if data[i] != data[i - 1]: # 0๊ณผ 1์ด ๋ฐ๋ ๋ state..
2021.06.25 -
[BOJ] #5585 - ๊ฑฐ์ค๋ฆ๋
5585๋ฒ: ๊ฑฐ์ค๋ฆ๋ ํ๋ก๋ ์์ฃผ JOI์กํ์ ์์ ๋ฌผ๊ฑด์ ์ฐ๋ค. JOI์กํ์ ์๋ ์๋์ผ๋ก 500์, 100์, 50์, 10์, 5์, 1์์ด ์ถฉ๋ถํ ์๊ณ , ์ธ์ ๋ ๊ฑฐ์ค๋ฆ๋ ๊ฐ์๊ฐ ๊ฐ์ฅ ์ ๊ฒ ์๋์ ์ค๋ค. ํ๋ก๊ฐ JOI์กํ์ ์์ ๋ฌผ๊ฑด์ ์ฌ www.acmicpc.net ** ๋ฌธ์ ์ ํ ๊ทธ๋ฆฌ๋ ** ํ์ด ๊ฑฐ์ค๋ฆ ๋์ ์ต์ ๊ฐ์ ๊ณ์ฐ ๊ฐ์ฅ ๊ธฐ์ด์ ์ธ ํ์ ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ์ ํ์ผ๋ก, ๋จ์ํ 'ํฐ ํํ ๋จ์' ์์๋๋ก ์๋์ ๊ฑฐ์ฌ๋ฌ ์ฃผ๋ฉด ์ต์ ์ ํด๋ฅผ ๊ตฌํ ์ ์์ changes = 1000 - int(input()) cnt = 0 for i in [500, 100, 50, 10, 5, 1]: cnt += changes // i changes %= i print(cnt)
2021.06.25 -
[์๊ณ ๋ฆฌ์ฆ] ํ์(Greedy) ์๊ณ ๋ฆฌ์ฆ
ํ์ ์๊ณ ๋ฆฌ์ฆ(Greedy algorithm)ํ์ ์๊ณ ๋ฆฌ์ฆ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ๋๋ง๋ค ๊ทธ ์๊ฐ ๊ฐ์ฅ ์ต์ ์ธ(๊ฐ์ฅ ์ข์ ๋ณด์ด๋) ์ ํ์ ํ๋ ์๊ณ ๋ฆฌ์ฆ ์ ๋ต์ ์ฒด์ ์ธ ์ต์ ์ ํด๋ฅผ ๋ณด์ฅํ์ง ์์ง๋ง ๊ณ์ฐ๋์ ์ค์ด๋ฉด์ ๊ทผ์ฟ๊ฐ ๋๋ ๊ตญ์ ์ต์ ํด(local optimum)๋ฅผ ๋น ๋ฅด๊ฒ ๊ตฌํ ์ ์์ ํ์ ์๊ณ ๋ฆฌ์ฆ์ ํต์ฌ ์์นGreedy Choice Property (ํ์ ์ ํ ์์ฑ)๋งค ์๊ฐ ๊ฐ์ฅ ์ข์ ๋ณด์ด๋ ์ ํ์ด ์ ์ญ ์ต์ ํด(global optimum)๋ฅผ ๋ง๋ ๋ค.Optimal Substructure (์ต์ ๋ถ๋ถ ๊ตฌ์กฐ)์ ์ฒด ๋ฌธ์ ์ ์ต์ ํด๊ฒฐ์ฑ ์ ํ์ ๋ฌธ์ ์ ์ต์ ํด๊ฒฐ์ฑ ์ผ๋ก ๊ตฌ์ฑ๋๋ค.์์ 1: ๋์ ๋ฌธ์ (Coin Change Problem)๋ฌธ์ ์ค๋ช 4720์์ 500์, 100์, 50์, 1์ ๋์ ์ผ๋ก ๊ฐ์ฅ ์ ์ ์๋ก ์ง๋ถ..
2021.06.05