-
[Python] ๋ฐฑ์ค 16206 ๋กค์ผ์ดํฌ (Greedy)๐ป Algorithm/Python 2022. 7. 8. 19:41
๐ ๋ฌธ์
์ค๋์ ์ฌํ์ด์ ์์ผ์ด๋ค. ์ฌํ์ด๋ ์น๊ตฌ N๋ช ์๊ฒ ๋กค์ผ์ดํฌ๋ฅผ 1๊ฐ์ฉ ์ ๋ฌผ๋ก ๋ฐ์๋ค. ๋กค์ผ์ดํฌ์ ๊ธธ์ด๋ A1, A2, ..., AN์ด๋ค. ์ฌํ์ด๋ ๊ธธ์ด๊ฐ 10์ธ ๋กค์ผ์ดํฌ๋ง ๋จน๋๋ค. ๋ฐ๋ผ์, ๋กค์ผ์ดํฌ๋ฅผ ์๋ผ์ ๊ธธ์ด๊ฐ 10์ธ ๋กค์ผ์ดํฌ๋ฅผ ์ต๋ํ ๋ง์ด ๋ง๋ค๋ ค๊ณ ํ๋ค.
๋กค์ผ์ดํฌ๋ ๋ค์๊ณผ ๊ฐ์ ๊ณผ์ ์ ํตํด์ ์๋ฅผ ์ ์๋ค.
์๋ฅผ ๋กค์ผ์ดํฌ๋ฅผ ํ๋ ๊ณ ๋ฅธ๋ค. ๊ธธ์ด๊ฐ 1๋ณด๋ค ํฐ ๋กค์ผ์ดํฌ๋ง ์๋ฅผ ์ ์๋ค. ์ด๋, ๊ณ ๋ฅธ ๋กค์ผ์ดํฌ์ ๊ธธ์ด๋ฅผ x๋ผ๊ณ ํ๋ค.
0๋ณด๋ค ํฌ๊ณ , x๋ณด๋ค ์์ ์์ฐ์ y๋ฅผ ๊ณ ๋ฅธ๋ค.
๋กค์ผ์ดํฌ๋ฅผ ์๋ผ ๊ธธ์ด๊ฐ y, x-y์ธ ๋กค์ผ์ดํฌ ๋ ๊ฐ๋ก ๋ง๋ ๋ค.
์ฌํ์ด๋ ๋กค์ผ์ดํฌ๋ฅผ ์ต๋ M๋ฒ ์๋ฅผ ์ ์๋ค. ์ด๋, ๋ง๋ค ์ ์๋ ๊ธธ์ด๊ฐ 10์ธ ๋กค์ผ์ดํฌ ๊ฐ์์ ์ต๋๊ฐ์ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.์ ๋ ฅ
์ฒซ์งธ ์ค์ ๋กค์ผ์ดํฌ์ ๊ฐ์ N๊ณผ ์๋ฅผ ์ ์๋ ์ต๋ ํ์ M์ด ์ฃผ์ด์ง๋ค. (1 ≤ N, M ≤ 1,000)
๋์งธ ์ค์ ๋กค์ผ์ดํฌ์ ๊ธธ์ด A1, A2, ..., AN์ด ์ฃผ์ด์ง๋ค. (1 ≤ Ai ≤ 1,000)
์ถ๋ ฅ
์ฌํ์ด๊ฐ ๋ง๋ค ์ ์๋ ๊ธธ์ด๊ฐ 10์ธ ๋กค์ผ์ดํฌ ๊ฐ์์ ์ต๋๊ฐ์ ์ถ๋ ฅํ๋ค.
์์ ์ ๋ ฅ 1
3 1
10 10 10์์ ์ถ๋ ฅ 1
3
์์ ์ ๋ ฅ 2
3 1
10 10 20์์ ์ถ๋ ฅ 2
4
์์ ์ ๋ ฅ 3
3 3
20 20 20์์ ์ถ๋ ฅ 3
6
์์ ์ ๋ ฅ 4
5 7
10 20 30 40 50์์ ์ถ๋ ฅ 4
11
์์ ์ ๋ ฅ 5
5 8
34 45 56 12 23์์ ์ถ๋ ฅ 5
8
๐ ํ์ด
๐ฌ Code
import sys input = sys.stdin.readline n, limit = map(int, input().split()) cake = [int(i) for i in input().split()] cakeTen = list(filter(lambda x: x % 10 == 0, cake)) cakeNotTen = list(filter(lambda x: x % 10 != 0, cake)) cnt = 0 while limit > 0: if cakeTen: if cakeTen[0] // 10 - 1 > limit: cnt += limit limit = 0 else: cnt += cakeTen[0] // 10 limit -= (cakeTen[0] // 10 - 1) del cakeTen[0] elif cakeNotTen: if cakeNotTen[0] // 10 > limit: cnt += limit limit = 0 else: cnt += cakeNotTen[0] // 10 limit -= cakeNotTen[0] // 10 del cakeNotTen[0] else: break print(cnt)
๐ก Solution
์ผ์ดํฌ๋ ์์ ๊ฐ์ด ์ธ๊ฐ์ง ๊ฒฝ์ฐ๋ก ๋๋ ๋ณผ ์ ์์ต๋๋ค. ์ฌ์ค ๊ธธ์ด 10์ ํ ๋ฒ๋ ์ ์๋ฅด๊ณ ์ผ์ดํฌ๋ฅผ ์ป๋๋ค๋ ์ ์์ ๋ฐ๋ก ๋ถ๋ฅํ์ง๋ง 30๊ณผ ํ๋์ ๊ฒฝ์ฐ๋ก ๋ฌถ์ ์ ์๋๋ฐ,- ๊ธธ์ด๊ฐ 10์ผ๋ก ๋๋์ด ๋จ์ด์ง๋ ๊ฒฝ์ฐ: (๊ธธ์ด÷10)-1๋ฒ ์๋ฅด๊ณ (๊ธธ์ด÷10)๊ฐ ํ๋
- ๊ธธ์ด๊ฐ 10์ผ๋ก ๋๋์ด ๋จ์ด์ง์ง ์๋ ๊ฒฝ์ฐ: (๊ธธ์ด÷10)๋ฒ ์๋ฅด๊ณ (๊ธธ์ด÷10)๊ฐ ํ๋
์๋ ๊ฒ ๋๋๋ฉด ๋ฉ๋๋ค.
cake = [int(i) for i in input().split()] cakeTen = list(filter(lambda x: x % 10 == 0, cake)) cakeNotTen = list(filter(lambda x: x % 10 != 0, cake))
๋ฐ๋ผ์ lambda๋ฅผ ์ด์ฉํด ๊ธธ์ด๊ฐ 10์ผ๋ก ๋๋์ด ๋จ์ด์ง๋ ์ผ์ดํฌ(cakeTen)์ ๋จ์ด์ง์ง ์๋ ์ผ์ดํฌ(cakeNotTen)๋ฅผ ๋ค๋ฅธ ๋ฆฌ์คํธ์ ๋ถ๋ฅํด ๋ด์์ฃผ์์ต๋๋ค.
์ปคํ ํ์๋ ์ ํด์ ธ ์๋๋ฐ ์ผ์ดํฌ ๊ฐฏ์๋ฅผ ์ต๋๋ก ํ๋ํด์ผ ํ๋ฏ๋ก, ์ปคํ ํ์๊ฐ ๋ ์ ์ cakeTen์ ์ฐ์ ์ ์ผ๋ก ์ฒ๋ฆฌํด์ผ ํฉ๋๋ค.
cnt = 0 while limit > 0: # 10์ ๋ฐฐ์ ์ผ์ดํฌ๊ฐ ๋จ์์์ผ๋ฉด if cakeTen: # ์ผ์ดํฌ๊ฐ ๊ธธ์ด์ ๋ง์ด ์๋ฅผ ์ ์๋๋ฐ ์ปคํ ํ์ ์ ํ์ ๊ฑธ๋ฆฌ๋ ๊ฒฝ์ฐ if cakeTen[0] // 10 - 1 > limit: cnt += limit limit = 0 else: cnt += cakeTen[0] // 10 limit -= (cakeTen[0] // 10 - 1) del cakeTen[0] # 10์ ๋ฐฐ์ ์ผ์ดํฌ๊ฐ ์์ผ๋ฉด elif cakeNotTen: # ์ผ์ดํฌ๊ฐ ๊ธธ์ด์ ๋ง์ด ์๋ฅผ ์ ์๋๋ฐ ์ปคํ ํ์ ์ ํ์ ๊ฑธ๋ฆฌ๋ ๊ฒฝ์ฐ if cakeNotTen[0] // 10 > limit: cnt += limit limit = 0 else: cnt += cakeNotTen[0] // 10 limit -= cakeNotTen[0] // 10 del cakeNotTen[0] # ๋ชจ๋ ์ผ์ดํฌ๋ฅผ ๋ค ํ์ํ์ผ๋ฉด else: break
'๐ป Algorithm > Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Python] ๋ฐฑ์ค 1541 ์์ด๋ฒ๋ฆฐ ๊ดํธ (Greedy) (0) 2022.07.08 [Python] ๋ฐฑ์ค 1012 ์ ๊ธฐ๋ ๋ฐฐ์ถ (BFS) (0) 2022.07.08 [Python] ๋ฐฑ์ค 4358 ์ํํ (Counter) (0) 2022.07.08 [Python] ๋ฐฑ์ค 19637 IF๋ฌธ ์ข ๋์ ์จ์ค (Binary Search) (0) 2022.07.08 [Python] ๋ฐฑ์ค 16953 A โ B (Greedy/BFS) (0) 2022.07.08