๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ (Greedy Algorithm)
๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋?
- ํ์ฌ ์ํฉ์์ ์ง๊ธ ๋น์ฅ ์ข์ ๊ฒ๋ง ๊ณ ๋ฅด๋ ๋ฐฉ๋ฒ
- ์ ๋น์ฑ ๋ถ์์ด ์ค์ํจ! -> ์ต์ ์ ํด๋ฅผ ๋ณด์ฅํ ์ ์์ ๋๊ฐ ๋ง๊ธฐ ๋๋ฌธ
<๋ฌธ์ 1> ๊ฑฐ์ค๋ฆ ๋
์๋์๊ฒ ๊ฑฐ์ฌ๋ฌ ์ฃผ์ด์ผ ํ ๋์ด N์์ผ ๋ ๊ฑฐ์ฌ๋ฌ ์ฃผ์ด์ผ ํ ๋์ ์ ์ต์ ๊ฐ์ ๊ตฌํ๊ธฐ
-> ์ต์ ์ ํด๋ฅผ ๋น ๋ฅด๊ฒ ๊ตฌํ๊ธฐ ์ํด์๋ ๊ฐ์ฅ ํฐ ํํ ๋จ์๋ถํฐ ๋์ ๊ฑฐ์ฌ๋ฌ ์ฃผ๋ฉด ๋๋ค.
<์ ๋น์ฑ ๋ถ์>
- ๊ฐ์ง๊ณ ์๋ ๋์ ์ค์์ ํฐ ๋จ์๊ฐ ํญ์ ์์ ๋จ์์ ๋ฐฐ์์ด๋ฏ๋ก ์์ ๋จ์์ ๋์ ๋ค์ ์ข ํฉํด ๋ค๋ฅธ ํด๊ฐ ๋์ฌ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
<๋ต์ ์์>
n = 1260
count = 0
#ํฐ ๋จ์์ ํํ๋ถํฐ ์ฐจ๋ก๋๋ก ํ์ธํ๊ธฐ
array = [500, 100, 50, 10]
for coin in array:
count += n // coin # ํด๋น ํํ๋ก ๊ฑฐ์ฌ๋ฌ ์ค ์ ์๋ ๋์ ์ ๊ฐ์ ์ธ๊ธฐ
n %= coin
print(count)
count += n // coin : ๊ธ์ก(n)์ coin ์ผ๋ก ๋๋ ์ ๋์ค๋ ์๋งํผ (๊ทธ coin์ผ๋ก ๊ฑฐ์ฌ๋ฌ ์ค ์ ์๋ ๋์ ๊ฐ์) count ์ ๋ํจ.
<์๊ฐ ๋ณต์ก๋ ๋ถ์> : ํํ์ ์ข ๋ฅ๊ฐ K๋ผ๊ณ ํ ๋, ์์ค ์ฝ๋์ ์๊ฐ ๋ณต์ก๋๋ O(K) ์ด๋ค.
- ์ด ์๊ณ ๋ฆฌ์ฆ์ ์๊ฐ ๋ณต์ก๋๋ ๊ฑฐ์ฌ๋ฌ์ค์ผ ํ๋ ๊ธ์ก๊ณผ๋ ๋ฌด๊ดํ๋ฉฐ, ๋์ ์ ์ด ์ข ๋ฅ์๋ง ์ํฅ์ ๋ฐ๋๋ค.
<๋ฌธ์ 2> 1์ด ๋ ๋๊น์ง
- ์ด๋ ํ ์ N์ด 1์ด ๋ ๋๊น์ง ๋ค์์ ๋ ๊ณผ์ ์ค ํ๋๋ฅผ ๋ฐ๋ณต์ ์ผ๋ก ์ ํํ์ฌ ์ํํ๋ ค๊ณ ํ๋ค. ๋จ, ๋๋ฒ์งธ ์ฐ์ฐ์ N์ด K๋ก ๋๋์ด ๋จ์ด์ง ๋๋ง ์ ํํ ์ ์๋ค.
1. N์์ 1์ ๋บ๋ค.
2.N์ K๋ก ๋๋๋ค.
- ์๋ฅผ ๋ค์ด N์ด 17, K๊ฐ 4๋ผ๊ณ ๊ฐ์ ํ๋ค. ์ด๋ 1๋ฒ์ ๊ณผ์ ์ ํ ๋ฒ ์ํํ๋ฉด N์ 16์ด ๋๋ค. ์ดํ์ 2๋ฒ์ ๊ณผ์ ์ ๋ ๋ฒ ์ํํ๋ฉด N์ 1์ด ๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ์ด ๊ฒฝ์ฐ ์ ์ฒด ๊ณผ์ ์ ์คํํ ํ์๋ 3ใ ฃ ๋๋ค. ์ด๋ N์ 1๋ก ๋ง๋๋ ์ต์ ํ์์ด๋ค.
<๋ฌธ์ ํด๊ฒฐ>
- ์ฃผ์ด์ง N์ ๋ํ์ฌ ์ต๋ํ ๋ง์ด ๋๋๊ธฐ๋ฅผ ์ํํ๋ฉด ๋๋ค.
<์ ๋น์ฑ ๋ถ์>
- N์ด ์๋ฌด๋ฆฌ ํฐ ์์ฌ๋, K๋ก ๊ณ์ ๋๋๋ค๋ฉด ๊ธฐํ๊ธ์์ ์ผ๋ก ๋น ๋ฅด๊ฒ ์ค์ผ ์ ์๋ค.
-> K๊ฐ 2 ์ด์์ด๊ธฐ๋ง ํ๋ฉด, K๋ก ๋๋๋ ๊ฒ์ด 1์ ๋นผ๋ ๊ฒ๋ณด๋ค ํญ์ ๋น ๋ฅด๊ฒ N์ ์ค์ผ ์ ์๋ค.
<์ฝ๋>
# N,K์ ๊ณต๋ฐฑ์ ๊ธฐ์ค์ผ๋ก ๊ตฌ๋ถํ์ฌ ์
๋ ฅ ๋ฐ๊ธฐ
n,k = map(int, input().split())
result = 0;
while True:
# N์ด K๋ก ๋๋์ด ๋จ์ด์ง๋ ์๊ฐ ๋ ๋๊น์ง ๋นผ๊ธฐ
target = (n//k)*k
result += (n-target)
n = target
# N์ด K๋ณด๋ค ์์ ๋ (๋ ์ด์ ๋๋ ์ ์์ ๋) ๋ฐ๋ณต๋ฌธ ํ์ถ
if n < k:
break
# K๋ก ๋๋๊ธฐ
result += 1
n //= k
# ๋ง์ง๋ง์ผ๋ก ๋จ์ ์์ ๋ํ์ฌ 1์ฉ ๋นผ๊ธฐ
result += (n-1)
print(result)
<๋ฌธ์ 3> ๊ณฑํ๊ธฐ ํน์ ๋ํ๊ธฐ
- ๊ฐ ์๋ฆฌ๊ฐ ์ซ์(0๋ถํฐ 9)๋ก๋ง ์ด๋ฃจ์ด์ง ๋ฌธ์์ด S๊ฐ ์ฃผ์ด์ก์ ๋, ์ผ์ชฝ๋ถํฐ ์ค๋ฅธ์ชฝ์ผ๋ก ํ๋์ฉ ๋ชจ๋ ์ซ์ ๋ฅผ ํ์ธํ๋ฉฐ ์ซ์ ์ฌ์ด์ 'x' ํน์ '+' ์ฐ์ฐ์๋ฅผ ๋ฃ์ด ๊ฒฐ๊ณผ์ ์ผ๋ก ๋ง๋ค์ด์ง ์ ์๋ ๊ฐ์ฅ ํฐ ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์ธ์. ๋จ, +๋ณด๋ค x๋ฅผ ๋จผ์ ๊ณ์ฐํ๋ ์ผ๋ฐ์ ์ธ ๋ฐฉ์๊ณผ๋ ๋ฌ๋ฆฌ, ๋ชจ๋ ์ฐ์ฐ์ ์ผ์ชฝ์์๋ถ ํฐ ์์๋๋ก ์ด๋ฃจ์ด์ง๋ค๊ณ ๊ฐ์ ํฉ๋๋ค.
- ์๋ฅผ ๋ค์ด 02984๋ผ๋ ๋ฌธ์์ด๋ก ๋ง๋ค ์ ์๋ ๊ฐ์ฅ ํฐ ์๋ ((((0+ 2) x 9) x 8) x 4) = 576์ ๋๋ค. ๋ ํ ๋ง๋ค์ด์ง ์ ์๋ ๊ฐ์ฅ ํฐ ์๋ ํญ์ 20์ต ์ดํ์ ์ ์๊ฐ ๋๋๋ก ์ ๋ ฅ์ด ์ฃผ์ด์ง๋๋ค.
<๋ฌธ์ ํด๊ฒฐ>
- ๋๋ถ๋ถ์ ๊ฒฝ์ฐ '+'๋ณด๋ค๋ 'x'๊ฐ ๋ ๊ฐ์ ํฌ๊ฒ ๋ง๋ ๋ค.
- ๋ค๋ง ๋ ์ ์ค์์ ํ๋๋ผ๋ '0' ํน์ '1'์ธ ๊ฒฝ์ฐ, ๊ณฑํ๊ธฐ๋ณด๋ค๋ ๋ํ๊ธฐ๋ฅผ ์ํํ๋ ๊ฒ์ด ํจ์จ์ ์ด๋ค.
<์ฝ๋>
data = input()
#์ฒซ ๋ฒ์งธ ๋ฌธ์๋ฅผ ์ซ์๋ก ๋ณ๊ฒฝํ์ฌ ๋์
result = int(data[0])
for i in range(1, len(data)):
#๋ ์ ์ค์์ ํ๋๋ผ๋ '0' ํน์ '1'์ธ ๊ฒฝ์ฐ, ๊ณฑํ๊ธฐ๋ณด๋ค๋ ๋ํ๊ธฐ ์ํ
num = int(data[i])
if num<=1 or result <=1:
result += num
else:
result *= num
print(result)
<๋ฌธ์ 4> ๋ชจํ๊ฐ ๊ธธ๋
- ํ ๋ง์์ ๋ชจํ๊ฐ๊ฐ N๋ช ์๋ค. ๋ชจํ๊ฐ ๊ธธ๋์์๋ N๋ช ์ ๋ชจํ๊ฐ๋ฅผ ๋์์ผ๋ก ๊ณตํฌ๋' ๋ฅผ ์ธก์ ํ๋๋ฐ, '๊ณตํฌ๋'๊ฐ ๋์ ๋ชจํ๊ฐ๋ ์ฝ๊ฒ ๊ณตํฌ๋ฅผ ๋๊ปด ์ํ ์ํฉ์์ ์ ๋๋ก ๋์ฒํ ๋ฅ๋ ฅ์ด ๋จ์ด์ง๋ค.
- ๋ชจํ๊ฐ ๊ธธ๋์ฅ์ธ ๋๋น์ด๋ ๋ชจํ๊ฐ ๊ทธ๋ฃน์ ์์ ํ๊ฒ ๊ตฌ์ฑํ๊ณ ์ ๊ณตํฌ๋๊ฐ X์ธ ๋ชจํ๊ฐ๋ ๋ฐ๋์ X๋ช ์ด์์ผ๋ก ๊ตฌ์ฑํ ๋ชจํ๊ฐ ๊ทธ๋ฃน์ ์ฐธ์ฌํด์ผ ์ฌํ์ ๋ ๋ ์ ์๋๋ก ๊ท์ ํ๋ค.
- ๋๋ฐ์ด๋ ์ต๋ ๋ช ๊ฐ์ ๋ชจํ๊ฐ ๊ทธ๋ฃน์ ๋ง๋ค ์ ์๋์ง ๊ถ๊ธํ๋ค. N๋ช ์ ๋ชจํ๊ฐ์ ๋ํ ์ ๋ณด๊ฐ ์ฃผ์ด์ก์ ๋, ์ฌํ์ ๋ ๋ ์ ์๋ ๊ทธ๋ฃน ์์ ์ต๋๊ฐ์ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ๋ผ.
<๋ฌธ์ ํด๊ฒฐ>
• ์์์๋ถํฐ ๊ณตํฌ๋๋ฅผ ํ๋์ฉ ํ์ธํ๋ฉฐ 'ํ์ฌ ๊ทธ๋ฃน์ ํฌํจ๋ ๋ชจํ๊ฐ์ ์'๊ฐ 'ํ์ฌ ํ์ธํ๊ณ ์๋ ๊ณตํฌ๋' ๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๋ค๋ฉด ์ด๋ฅผ ๊ทธ๋ฃน์ผ๋ก ์ค์ ํ๋ฉด ๋๋ค.
• ์ด๋ฌํ ๋ฐฉ๋ฒ์ ์ด์ฉํ๋ฉด ๊ณตํฌ๋๊ฐ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ๋์ด ์๋ค๋ ์ ์์, ํญ์ ์ต์ํ์ ๋ชจํ๊ฐ์ ์๋ง ํฌํจํ์ฌ ๊ทธ๋ฃน์ ๊ฒฐ์ฑํ๊ฒ ๋๋ค.
<์ฝ๋>
n = int(input())
data = list(map(int, input().split()))
data.sort() # ๋ฆฌ์คํธ ์ค๋ฆ์ฐจ์ ์ ๋ ฌ
result = 0 # ์ด ๊ทธ๋ฃน์ ์
count = 0 # ํ์ฌ ๊ทธ๋ฃน์ ํฌํจ๋ ๋ชจํ๊ฐ์ ์
for i in data: # ๊ณตํฌ๋๋ฅผ ๋ฎ์ ๊ฒ๋ถํฐ ํ๋์ฉ ํ์ธํ๋ฉฐ
count += 1 # ํ์ฌ ๊ทธ๋ฃน์ ํด๋น ๋ชจํ๊ฐ๋ฅผ ํฌํจ์ํค๊ธฐ
if count >= i: # ํ์ฌ ๊ทธ๋ฃน์ ํฌํจ๋ ๋ชจํ๊ฐ์ ์๊ฐ ํ์ฌ์ ๊ณตํฌ๋ ์ด์์ด๋ผ๋ฉด, ๊ทธ๋ฃน ๊ฒฐ์ฑ
result += 1 # ์ด ๊ทธ๋ฃน์ ์ ์ฆ๊ฐ์ํค๊ธฐ
count = 0 # ํ์ฌ ๊ทธ๋ฃน์ ํฌํจ๋ ๋ชจํ๊ฐ์ ์ ์ด๊ธฐํ
print(result) #์ด ๊ทธ๋ฃน์ ์ ์ถ๋ ฅ
๊ตฌํ (Implemetation)
- ๊ตฌํ์ด๋, ๋จธ๋ฆฟ์์ ์๋ ์๊ณ ๋ฆฌ์ฆ์ ์์ค์ฝ๋๋ก ๋ฐ๊พธ๋ ๊ณผ์ ์ด๋ค. (problem -> thinking -> solution)
- ๊ตฌํ ์ ํ์ ๋ฌธ์ ๋ ? ํ์ด๋ฅผ ๋ ์ฌ๋ฆฌ๋ ๊ฒ์ ์ฝ์ง๋ง ์์ค์ฝ๋๋ก ์ฎ๊ธฐ๊ธฐ ์ด๋ ค์ด ๋ฌธ์ -> ๋ง์ ์ฐ์ต์ด ํ์ํ ์ ํ
- ๊ตฌํ ์ ํ์ ์์
- ์๊ณ ๋ฆฌ์ฆ์ ๊ฐ๋จํ๋ฐ ์ฝ๋๊ฐ ์ง๋์น ๋งํผ ๊ธธ์ด์ง๋ ๋ฌธ์
- ์ค์ ์ฐ์ฐ์ ๋ค๋ฅด๊ณ , ํน์ ์์์ ์๋ฆฌ๊น์ง ์ถ๋ ฅํด์ผ ํ๋ ๋ฌธ์
- ๋ฌธ์์ด์ ํน์ ํ ๊ธฐ์ค์ ๋ฐ๋ผ์ ๋์ด ์ฒ๋ฆฌํด์ผ ํ๋ ๋ฌธ์ (ํ์ด์ฌ์์ ๊ตฌํ์ด ์ฌ์ฐ๋ฏ๋ก ๋ฎ์ ๋์ด๋์ 1~2๋ฒ ๋ฌธ์ ๋ก ๋์ด)
- ์ ์ ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฐพ์์ ์ฌ์ฉํด์ผ ํ๋ ๋ฌธ์
- ์ผ๋ฐ์ ์ผ๋ก ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ์์์ 2์ฐจ์ ๊ณต๊ฐ์ ํ๋ ฌ (Matrix) ์ ์๋ฏธ๋ก ์ฌ์ฉ๋๋ค.
- ์๋๋ก ์ด๋ํ ์๋ก ํ์ด ์ฆ๊ฐ, ์ค๋ฅธ์ชฝ์ผ๋ก ์ด๋ํ ์๋ก ์ด์ด ์ฆ๊ฐ
- ์๋ฎฌ๋ ์ด์ ๋ฐ ์์ ํ์ ๋ฌธ์ ์์๋ 2์ฐจ์ ๊ณต๊ฐ์์์ ๋ฐฉํฅ ๋ฒกํฐ๊ฐ ์์ฃผ ํ์ฉ๋๋ค.
# ๋, ๋ถ, ์, ๋จ
dx = [0, -1, 0, 1]
dy = [1, 0, -1, 0]
# ํ์ฌ ์์น
x, y = 2, 2
for i in range(4):
# ๋ค์ ์์น
nx = x + dx[i]
ny = y + dy[i]
print(nx,ny)
dx ๋ ํ์ ์ด๋
dy ๋ ์ด์ ์ด๋
<๋ฌธ์ 1> ์ํ์ข์ฐ
- ์ฌํ๊ฐ A๋ N x N ํฌ๊ธฐ์ ์ ์ฌ๊ฐํ ๊ณต๊ฐ ์์ ์ ์๋ค. ์ด ๊ณต๊ฐ์ 1 x 1 ํฌ๊ธฐ์ ์ ์ฌ๊ฐํ์ผ๋ก ๋๋์ด์ ธ ์๋ค. ๊ฐ์ฅ ์ผ์ชฝ ์ ์ขํ๋ (1, 1)์ด๋ฉฐ, ๊ฐ์ฅ ์ค๋ฅธ์ชฝ ์๋ ์ขํ๋ (N, N)์ ํด๋นํ๋ค. ์ฌํ๊ฐ A ๋ ์, ํ, ์ข, ์ฐ ๋ฐฉํฅ์ผ๋ก ์ด๋ํ ์ ์์ผ๋ฉฐ, ์์ ์ขํ๋ ํญ์ (1, 1)์ด๋ค. ์ฐ๋ฆฌ ์์๋ ์ฌํ๊ฐ A๊ฐ ์ด๋ ํ ๊ณํ์ด ์ ํ ๊ณํ์๊ฐ ๋์ฌ ์๋ค.
- ๊ณํ์์๋ ํ๋์ ์ค์ ๋์ด์ฐ๊ธฐ๋ฅผ ๊ธฐ์ค์ผ๋ก ํ์ฌ L, R, U, D ์ค ํ๋์ ๋ฌธ์๊ฐ ๋ฐ๋ณต์ ์ผ๋ก ์ ํ ์๋ค. ๊ฐ ๋ฌธ์์ ์๋ฏธ๋ ๋ค์๊ณผ ๊ฐ๋ค.
- L: ์ผ์ชฝ์ผ๋ก ํ ์นธ ์ด๋
- R: ์ค๋ฅธ์ชฝ์ผ๋ก ํ ์นธ ์ด๋
- U: ์๋ก ํ ์นธ ์ด๋
- D: ์๋๋ก ํ ์นธ ์ด๋
- ์ด๋ ์ฌํ๊ฐ A๊ฐ N X N ํฌ๊ธฐ์ ์ ์ฌ๊ฐํ ๊ณต๊ฐ์ ๋ฒ์ด๋๋ ์์ง์์ ๋ฌด์๋๋ค. ์๋ฅผ ๋ค์ด (1, 1)์ ์์น ์์ L ํน์ U๋ฅผ ๋ง๋๋ฉด ๋ฌด์๋๋ค. ๋ค์์ N = 5์ธ ์ง๋์ ๊ณํ์์ด๋ค.
<๋ฌธ์ ํด๊ฒฐ>
- ์ด ๋ฌธ์ ๋ ์๊ตฌ์ฌํญ๋๋ก ์ถฉ์คํ ๊ตฌํํ๋ฉด ๋๋ ๋ฌธ์ ์ด๋ค.
- ์ผ๋ จ์ ๋ช ๋ น์ ๋ฐ๋ผ์ ๊ฐ์ฒด๋ฅผ ์ฐจ๋ก๋๋ก ์ด๋์ํจ๋ค๋ ์ ์์ ์๋ฎฌ๋ ์ด์ (Simulation) ์ ํ์ผ๋ก๋ ๋ถ๋ฅ๋๋ฉฐ ๊ตฌํ์ด ์ค์ํ ๋ํ์ ์ธ ๋ฌธ์ ์ ํ์ด๋ค.
- ๋ค๋ง, ์๊ณ ๋ฆฌ์ฆ ๊ต์ฌ๋ ๋ฌธ์ ํ์ด ์ฌ์ดํธ์ ๋ฐ๋ผ์ ๋ค๋ฅด๊ฒ ์ผ์ปฌ์ ์ ์์ผ๋ฏ๋ก, ์ฝ๋ฉ ํ ์คํธ์์์ ์๋ฎฌ๋ ์ด์ ์ ํ, ๊ตฌํ ์ ํ, ์์ ํ์ ์ ํ์ ์๋ก ์ ์ฌํ ์ ์ด ๋ง๋ค๋ ์ ๋๋ก๋ง ๊ธฐ์ตํ์.
<์ฝ๋>
# N ์
๋ ฅ ๋ฐ๊ธฐ
n = int(input())
x, y = 1, 1
plans = input().split()
# L, R, U, D์ ๋ฐ๋ฅธ ์ด๋ ๋ฐฉํฅ
dx = [0, 0, -1, 1]
dy = [-1, 1, 0, 0]
move_types = ['L', 'R', 'U', 'D']
# ์ด๋ ๊ณํ์ ํ๋์ฉ ํ์ธํ๊ธฐ
for plan in plans:
# ์ด๋ ํ ์ขํ ๊ตฌํ๊ธฐ
for i in range(len(move_types)):
if plan == move_types[i]:
nx = x + dx[i]
ny = y + dy[i]
# ๊ณต๊ฐ์ ๋ฒ์ด๋๋ ๊ฒฝ์ฐ ๋ฌด์
if nx < 1 or ny < 1 or nx > n or ny > n:
continue
# ์ด๋ ์ํ
x, y = nx, ny
print(x, y)
<๋ฌธ์ 2> ์๊ฐ
- ์ ์ N์ด ์ ๋ ฅ๋๋ฉด 00์ 00๋ถ 00์ด๋ถํฐ N์ 59๋ถ 59์ด๊น์ง์ ๋ชจ๋ ์๊ฐ ์ค์์ 3์ด ํ๋๋ผ๋ ํฌํจ๋๋ ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ๋ผ. ์๋ฅผ ๋ค์ด 1์ ์ ๋ ฅํ์ ๋ ๋ค์์ 3์ด ํ๋๋ผ๋ ํฌํจ๋์ด ์์ผ๋ฏ๋ก ์ธ์ด์ผ ํ๋ ์๊ฐ์ด๋ค.
- 00์ 00๋ถ 03์ด
- 00์ 13๋ถ 30์ด
- ๋ฐ๋ฉด์ ๋ค์์ 3์ด ํ๋๋ ํฌํจ๋์ด ์์ง ์์ผ๋ฏ๋ก ์ธ๋ฉด ์ ๋๋ ์๊ฐ์ด๋ค.
- 00์ 07๋ถ 55์ด
- 01์ 27๋ถ 45์ด
<๋ฌธ์ ํด๊ฒฐ>
- ์ด ๋ฌธ์ ๋ ๊ฐ๋ฅํ ๋ชจ๋ ์๊ฐ์ ๊ฒฝ์ฐ๋ฅผ ํ๋์ฉ ๋ชจ๋ ์ธ์ ํ ์ ์๋ ๋ฌธ์ ์ด๋ค.
- ํ๋ฃจ๋ 86,400์ด์ด๋ฏ๋ก, 00์ 00๋ถ 00์ด๋ถํฐ 23์ 59๋ถ 59์ด๊น์ง์ ๋ชจ๋ ๊ฒฝ์ฐ๋ 86,400๊ฐ์ง์ด๋ค.
- 24 * 60 * 60 = 86,400
- ๋ฐ๋ผ์ ๋จ์ํ ์๊ฐ์ 1์ฉ ์ฆ๊ฐ์ํค๋ฉด์ 3์ด ํ๋๋ผ๋ ํฌํจ๋์ด ์๋์ง๋ฅผ ํ์ธํ๋ฉด ๋๋ค.
- ์ด๋ฌํ ์ ํ์ ์์ ํ์(Brute Forcing) ๋ฌธ์ ์ ํ์ด๋ผ๊ณ ๋ถ๋ฆฐ๋ค.
- ๊ฐ๋ฅํ ๊ฒฝ์ฐ์ ์๋ฅผ ๋ชจ๋ ๊ฒ์ฌํด๋ณด๋ ํ์ ๋ฐฉ๋ฒ์ ์๋ฏธํ๋ค.
<์ฝ๋>
# H ์
๋ ฅ ๋ฐ๊ธฐ
h = int(input())
count = 0
for i in range(h+1):
for j in range(60):
for k in range(60):
#๋งค ์๊ฐ ์์ '3'์ด ํฌํจ๋์ด ์๋ค๋ฉด ์นด์ดํธ ์ฆ๊ฐ
if '3' in str(i) + str(j) + str(k):
count += 1
print(count)
range ๋ด์ ์ซ์๋ 0๋ถํฐ ์ซ์-1 ๊น์ง์ด๊ธฐ ๋๋ฌธ์ h์ 1์ ๋ํด์ค๋ค.
<๋ฌธ์ 3> ์์ค์ ๋์ดํธ
- ํ๋ณต ์๊ตญ์ ์์ค ์ ์์ ์ฒด์คํ๊ณผ ๊ฐ์ 8 x 8 ์ขํ ํ๋ฉด์ ๋๋ค. ์์ค ์ ์์ ํน์ ํ ํ ์นธ์ ๋์ดํธ๊ฐ ์ ์์ต๋๋ค. ๋์ดํธ๋ ๋งค์ฐ ์ถฉ์ฑ์ค๋ฌ์ด ์ ํ๋ก์ ๋งค์ผ ๋ฌด์ ์ ์ฐ๋งํ๋ค.
- ๋์ดํธ๋ ๋ง์ ํ๊ณ ์๊ธฐ ๋๋ฌธ์ ์ด๋์ ํ ๋๋ L์ ํํ๋ก๋ง ์ด๋ํ ์ ์์ผ๋ฉฐ ์ ์ ๋ฐ์ผ๋ก๋ ๋๊ฐ ์ ์๋ค.
- ๋์ดํธ๋ ํน์ ์์น์์ ๋ค์๊ณผ ๊ฐ์ 2๊ฐ์ง ๊ฒฝ์ฐ๋ก ์ด๋ํ ์ ์๋ค.
- ์ํ์ผ๋ก ๋ ์นธ ์ด๋ํ ๋ค์ ์์ง์ผ๋ก ํ ์นธ ์ด๋ํ๊ธฐ
- ์์ง์ผ๋ก ๋ ์นธ ์ด๋ํ ๋ค์ ์ํ์ผ๋ก ํ ์นธ ์ด๋ํ๊ธฐ
- ์ด์ฒ๋ผ 8 x 8 ์ขํ ํ๋ฉด์์์ ๋์ดํธ์ ์์น๊ฐ ์ฃผ์ด์ก์ ๋ ๋์ดํธ๊ฐ ์ด๋ํ ์ ์๋ ๊ฒฝ์ฐ์ ์๋ฅผ ์ถ๋ ฅํ ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ๋ผ. ์์ค์ ์ ์์์ ํ ์์น๋ฅผ ํํํ ๋๋ 1๋ถํฐ 8๋ก ํํํ๋ฉฐ, ์ด ์์น๋ฅผ ํํํ ๋๋ a๋ถํฐ h๋ก ํํํ๋ค.
- C2์ ์์ ๋ ์ด๋ํ ์ ์๋ ๊ฒฝ์ฐ์ ์๋ 6๊ฐ์ง์ด๋ค.
<๋ฌธ์ ํด๊ฒฐ>
- ์๊ตฌ์ฌํญ๋๋ก ์ถฉ์คํ ๊ตฌํํ๋ฉด ๋๋ ๋ฌธ์ ์ด๋ค.
- ๋์ดํธ์ 8๊ฐ์ง ๊ฒฝ๋ก๋ฅผ ํ๋์ฉ ํ์ธํ๋ฉฐ ๊ฐ ์์น๋ก ์ด๋์ด ๊ฐ๋ฅํ์ง ํ์ธํ๋ค.
- ๋ฆฌ์คํธ๋ฅผ ์ด์ฉํ์ฌ 8๊ฐ์ง ๋ฐฉํฅ์ ๋ํ ๋ฐฉํฅ ๋ฒกํฐ๋ฅผ ์ ์ํ๋ค.
<์ฝ๋>
# ํ์ฌ ๋์ดํธ์ ์์น ์
๋ ฅ๋ฐ๊ธฐ
input_data = input()
row = int(input_data[1])
column = int(ord(input_data[0])) - int(ord('a')) + 1
# ๋์ดํธ๊ฐ ์ด๋ํ ์ ์๋ 8๊ฐ์ง ๋ฐฉํฅ ์ ์
steps = [(-2,1), (-1,-2), (1,-2), (2,-1), (2,1), (1,2), (-1,2), (-2,1)]
# 8๊ฐ์ง ๋ฐฉํฅ์ ๋ํ์ฌ ๊ฐ ์์น๋ก ์ด๋์ด ๊ฐ๋ฅํ์ง ํ์ธ
result = 0
for step in steps:
# ์ด๋ํ๊ณ ์ ํ๋ ์์น ํ์ธ
next_row = row + step[0]
next_column = column + step[1]
# ํด๋น ์์น๋ก ์ด๋์ด ๊ฐ๋ฅํ๋ค๋ฉด ์นด์ดํธ ์ฆ๊ฐ
if next_row >= 1 and next_row <= 8 and next_column >= 1 and next_column <= 8:
result+= 1
print(result)
ord() : ๋ฌธ์๋ฅผ ์์คํค์ฝ๋๋ก ๋ณํ
ex) ord('a') : 97
โป ๋ฐฉํฅ ๋ฒกํฐ ์ฌ์ฉํ๋ ๊ฒ์ ์ต์ํด์ง๊ธฐ!
<๋ฌธ์ 4> ๋ฌธ์์ด ์ฌ์ ๋ ฌ
- ์ํ๋ฒณ ๋๋ฌธ์์ ์ซ์(0~ 9)๋ก๋ง ๊ตฌ์ฑ๋ ๋ฌธ์์ด์ด ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง๋ค. ์ด๋ ๋ชจ๋ ์ํ๋ฒณ์ ์ค๋ฆ์ฐจ์์ผ ๋ก ์ ๋ ฌํ์ฌ ์ด์ด์ ์ถ๋ ฅํ ๋ค์, ๊ทธ ๋ค์ ๋ชจ๋ ์ซ์๋ฅผ ๋ํ ๊ฐ์ ์ด์ด์ ์ถ๋ ฅํ๋ค.
- ์๋ฅผ ๋ค์ด K1KA5CB7์ด๋ผ๋ ๊ฐ์ด ๋ค์ด์ค๋ฉด ABCKK13์ ์ถ๋ ฅํ๋ค.
<๋ฌธ์ ํด๊ฒฐ>
- ์๊ตฌ์ฌํญ๋๋ก ์ถฉ์คํ ๊ตฌํํ๋ฉด ๋๋ ๋ฌธ์ ์ด๋ค.
- ๋ฌธ์์ด์ด ์
๋ ฅ๋์์ ๋ ๋ฌธ์๋ฅผ ํ๋์ฉ ํ์ธํ๋ค.
- ์ซ์์ธ ๊ฒฝ์ฐ ๋ฐ๋ก ํฉ๊ณ๋ฅผ ๊ณ์ฐํ๋ค.
- ์ํ๋ฒณ์ธ ๊ฒฝ์ฐ ๋ณ๋์ ๋ฆฌ์คํธ์ ์ ์ฅํ๋ค.
- ๊ฒฐ๊ณผ์ ์ผ๋ก ๋ฆฌ์คํธ์ ์ ์ฅ๋ ์ํ๋ฒณ์ ์ ๋ ฌํด ์ถ๋ ฅํ๊ณ , ํฉ๊ณ๋ฅผ ๋ค์ ๋ถ์ฌ ์ถ๋ ฅํ๋ฉด ์ ๋ต์ด๋ค.
<์ฝ๋>
data = input()
result = []
value = 0
# ๋ฌธ์๋ฅผ ํ๋์ฉ ํ์ธํ๋ฉฐ
for x in data:
# ์ํ๋ฒณ์ธ ๊ฒฝ์ฐ ๊ฒฐ๊ณผ ๋ฆฌ์คํธ์ ์ฝ์
if x.isalpha():
result.append(x)
# ์ซ์๋ ๋ค๋ก ๋ํ๊ธฐ
else:
value += int(x)
# ์ํ๋ฒณ์ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ
result.sort()
# ์ซ์๊ฐ ํ๋๋ผ๋ ์กด์ฌํ๋ ๊ฒฝ์ฐ ๊ฐ์ฅ ๋ค์ ์ฝ์
if value !=0:
result.append(str(value))
# ์ต์ข
๊ฒฐ๊ณผ ์ถ๋ ฅ (๋ฆฌ์คํธ๋ฅผ ๋ฌธ์์ด๋ก ๋ณํํ์ฌ ์ถ๋ ฅ)
printf(''.join(result))
isalpha() : ๋ฌธ์๊ฐ ์ํ๋ฒณ์ธ์ง ํ์ธ
print(" ", end = "") : end = "" ๋ฅผ ์ถ๊ฐํ๋ฉด ์ค๋ฐ๊ฟ์์ด ์ถ๋ ฅ๋จ
''.join(๋ฆฌ์คํธ) : ๋งค๊ฐ๋ณ์๋ก ๋ค์ด์จ ['a', 'b', 'c'] ์ด๋ฐ ์์ ๋ฆฌ์คํธ๋ฅผ 'abc'์ ๋ฌธ์์ด๋ก ํฉ์ณ์ ๋ฐํํด์ฃผ๋ ํจ์์
๋ฆฌ์คํธ.append() : ๋ฆฌ์คํธ์ ์ฝ์