์•Œ๊ณ ๋ฆฌ์ฆ˜

๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜ (Greedy Algorithm)

adorableco 2023. 1. 16. 12:49
๋ฐ˜์‘ํ˜•

 ๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋ž€?

- ํ˜„์žฌ ์ƒํ™ฉ์—์„œ ์ง€๊ธˆ ๋‹น์žฅ ์ข‹์€ ๊ฒƒ๋งŒ ๊ณ ๋ฅด๋Š” ๋ฐฉ๋ฒ•

- ์ •๋‹น์„ฑ ๋ถ„์„์ด ์ค‘์š”ํ•จ! -> ์ตœ์ ์˜ ํ•ด๋ฅผ ๋ณด์žฅํ•  ์ˆ˜ ์—†์„ ๋•Œ๊ฐ€ ๋งŽ๊ธฐ ๋•Œ๋ฌธ

 

 

 

<๋ฌธ์ œ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๊ฐ€์ง€ ๊ฒฝ์šฐ๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋‹ค.
  1. ์ˆ˜ํ‰์œผ๋กœ ๋‘ ์นธ ์ด๋™ํ•œ ๋’ค์— ์ˆ˜์ง์œผ๋กœ ํ•œ ์นธ ์ด๋™ํ•˜๊ธฐ
  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() : ๋ฆฌ์ŠคํŠธ์— ์‚ฝ์ž…

๋ฐ˜์‘ํ˜•