๐Ÿ“š ๊ตฌํ˜„ (Implementation) ์•Œ๊ณ ๋ฆฌ์ฆ˜

โ€˜๋จธ๋ฆฟ์†์— ์žˆ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์†Œ์Šค ์ฝ”๋“œ๋กœ ๋ฐ”๊พธ๋Š” ๊ณผ์ •โ€™

๋ฌธ์ œ ํ•ด๊ฒฐ ๋ถ„์•ผ์—์„œ ๊ตฌํ˜„ ์œ ํ˜•์˜ ๋ฌธ์ œ๋Š”

  • ํ’€์ด๋ฅผ ๋– ์˜ฌ๋ฆฌ๋Š” ๊ฒƒ์€ ์‰ฝ์ง€๋งŒ ์†Œ์Šค ์ฝ”๋“œ๋กœ ์˜ฎ๊ธฐ๊ธฐ ์–ด๋ ค์šด ๋ฌธ์ œ
  • ํ”ผ์ง€์ปฌ(์–ธ์–ด ๋ฌธ๋ฒ•์— ๋Šฅ์ˆ™, ๋น ๋ฅธ ํƒ€์ž)์„ ์š”๊ตฌํ•˜๋Š” ๋ฌธ์ œ

์†Œ์Šค ์ฝ”๋“œ๋กœ ์˜ฎ๊ธฐ๊ธฐ ์–ด๋ ค์šด ๋ฌธ์ œ๋ž€?

  • ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๊ฐ„๋‹จํ•œ๋ฐ ์ฝ”๋“œ๊ฐ€ ์ง€๋‚˜์น  ๋งŒํผ ๊ธธ์–ด์ง€๋Š” ๋ฌธ์ œ
  • ํŠน์ • ์†Œ์ˆ˜์  ์ž๋ฆฌ๊นŒ์ง€ ์ถœ๋ ฅํ•ด์•ผ ํ•˜๋Š” ๋ฌธ์ œ
  • ๋ฌธ์ž์—ด์ด ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์กŒ์„ ๋•Œ ํ•œ ๋ฌธ์ž ๋‹จ์œ„๋กœ ๋Š์–ด์„œ ๋ฆฌ์ŠคํŠธ์— ๋„ฃ์–ด์•ผ ํ•˜๋Š”(ํŒŒ์‹ฑ์„ ํ•ด์•ผ ํ•˜๋Š”) ๋ฌธ์ œ

โฉ ๋Œ€์ฒด๋กœ ์‚ฌ์†Œํ•œ ์กฐ๊ฑด ์„ค์ •์ด ๋งŽ์€ ๋ฌธ์ œ์ผ์ˆ˜๋ก ๊นŒ๋‹ค๋กœ์›€

๋ฌธ๋ฒ•์„ ์ •ํ™•ํžˆ ์ˆ™์ง€ํ•˜๊ณ , ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

  • Ex) N๊ฐœ์˜ ์›์†Œ๊ฐ€ ๋“ค์–ด ์žˆ๋Š” ๋ฆฌ์ŠคํŠธ์—์„œ R๊ฐœ์˜ ์›์†Œ๋ฅผ ๋ฝ‘์•„ ํ•œ ์ค„๋กœ ์„ธ์šฐ๋Š” ๋ชจ๋“  ๊ฒฝ์šฐ(์ˆœ์—ด)๋ฅผ ๊ตฌํ•ด์•ผ ํ•˜๋Š” ๋ฌธ์ œ itertools์™€ ๊ฐ™์€ ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉํ•˜๋ฉด ์‰ฝ๊ฒŒ ์ฝ”๋“œ๋ฅผ ์งค ์ˆ˜ ์žˆ๋‹ค. ์ด๋Š” ๊ณง ์–ธ์–ด์˜ ๋ฌธ๋ฒ•์˜ ์ดํ•ด์™€ ๊ฒฝํ—˜์ด ์žˆ์–ด์•ผ ๋– ์˜ฌ๋ฆด ์ˆ˜ ์žˆ๋Š” ํ•ด๊ฒฐ๋ฐฉ๋ฒ•์ด๋‹ค.

์ด ์ฑ…์˜ โ€˜๊ตฌํ˜„โ€™ ์œ ํ˜•์€ ์™„์ „ ํƒ์ƒ‰, ์‹œ๋ฎฌ๋ ˆ์ด์…˜์„ ๋ชจ๋‘ ๋ฌถ์–ด ๋‹ค๋ฃฌ๋‹ค.

  • ์™„์ „ ํƒ์ƒ‰ (Brute Forcing) : ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์ฃผ์ € ์—†์ด ๋‹ค ๊ณ„์‚ฐํ•˜๋Š” ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

  • ์‹œ๋ฎฌ๋ ˆ์ด์…˜ (Simulation) : ๋ฌธ์ œ์—์„œ ์ œ์‹œํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ•œ ๋‹จ๊ณ„์”ฉ ์ฐจ๋ก€๋Œ€๋กœ ์ง์ ‘ ์ˆ˜ํ–‰


๐Ÿ“ƒ [์˜ˆ์ œ 1] ์ƒํ•˜์ขŒ์šฐ

  • ๋‚œ์ด๋„: โญ
  • ํ’€์ด ์‹œ๊ฐ„: 15๋ถ„
  • ์‹œ๊ฐ„ ์ œํ•œ: 1์ดˆ
  • ๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ: 128MB

[๋ฌธ์ œ]

์—ฌํ–‰๊ฐ€ A๋Š” N x N ํฌ๊ธฐ์˜ ์ •์‚ฌ๊ฐํ˜• ๊ณต๊ฐ„ ์œ„์— ์„œ ์žˆ๋‹ค. ์ด ๊ณต๊ฐ„์€ 1x1 ํฌ๊ธฐ์˜ ์ •์‚ฌ๊ฐํ˜•์œผ๋กœ ๋‚˜๋ˆ„์–ด์ ธ ์žˆ๋‹ค. ๊ฐ€์žฅ ์™ผ์ชฝ ์œ„ ์ขŒํ‘œ๋Š” (1,1)์ด๋ฉฐ, ๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ ์•„๋ž˜ ์ขŒํ‘œ๋Š” (N,N)์— ํ•ด๋‹นํ•œ๋‹ค. ์—ฌํ–‰๊ฐ€ A๋Š” ์ƒ,ํ•˜,์ขŒ,์šฐ ๋ฐฉํ–ฅ์œผ๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์‹œ์ž‘ ์ขŒํ‘œ๋Š” ํ•ญ์ƒ (1,1)์ด๋‹ค. ์šฐ๋ฆฌ ์•ž์—๋Š” ์—ฌํ–‰๊ฐ€ A๊ฐ€ ์ด๋™ํ•  ๊ณ„ํš์ด ์ ํžŒ ๊ณ„ํš์„œ๊ฐ€ ๋†“์—ฌ ์žˆ๋‹ค.

  • L: ์™ผ์ชฝ์œผ๋กœ ํ•œ ์นธ ์ด๋™
  • R: ์˜ค๋ฅธ์ชฝ์œผ๋กœ ํ•œ ์นธ ์ด๋™
  • U: ์œ„๋กœ ํ•œ ์นธ ์ด๋™
  • D: ์•„๋ž˜๋กœ ํ•œ ์นธ ์ด๋™

์ด๋•Œ ์—ฌํ–‰๊ฐ€ A๊ฐ€ N x N ํฌ๊ธฐ์˜ ์ •์‚ฌ๊ฐํ˜• ๊ณต๊ฐ„์„ ๋ฒ—์–ด๋‚˜๋Š” ์›€์ง์ž„์€ ๋ฌด์‹œํ•œ๋‹ค.

๊ณ„ํš์„œ๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ ์—ฌํ–‰๊ฐ€ A๊ฐ€ ์ตœ์ข…์ ์œผ๋กœ ๋„์ฐฉํ•  ์ง€์ ์˜ ์ขŒํ‘œ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

[์ž…๋ ฅ์กฐ๊ฑด]

  • ์ฒซ์งธ ์ค„์— ๊ณต๊ฐ„์˜ ํฌ๊ธฐ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” N์ด ์ฃผ์–ด์ง„๋‹ค. (1<=N<=100)
  • ๋‘˜์งธ ์ค„์— ์—ฌํ–‰๊ฐ€ A๊ฐ€ ์ด๋™ํ•  ๊ณ„ํš์„œ ๋‚ด์šฉ์ด ์ฃผ์–ด์ง„๋‹ค. (1<=์ด๋™ํšŸ์ˆ˜<=100)

[์ถœ๋ ฅ ์กฐ๊ฑด]

  • ์ฒซ์งธ ์ค„์— ์—ฌํ–‰๊ฐ€ A๊ฐ€ ์ตœ์ข…์ ์œผ๋กœ ๋„์ฐฉํ•  ์ง€์ ์˜ ์ขŒํ‘œ (X, Y)๋ฅผ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ์ถœ๋ ฅํ•œ๋‹ค.
# ์ž…๋ ฅ ์˜ˆ์‹œ
5
R R R U D D

# ์ถœ๋ ฅ ์˜ˆ์‹œ
3 4
# 1. ๋‚˜์˜ ํ’€์ด

n = int(input())
x, y = 1, 1
plans = input().split()

for i in plans:  # ์ž…๋ ฅ ์ขŒํ‘œ ํ•˜๋‚˜์”ฉ ํ™•์ธํ•˜์—ฌ ์ด๋™
	if i == 'L' and y < 1:
		y -= 1
	elif i == 'R' and y < n+1:
		y += 1
	elif i == 'U' and x > 1:
		x -= 1
	elif i == 'D' and x < n+1:
		x += 1

print(x, y)



# 2. ๊ต์žฌ ๋‹ต์•ˆ

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)

  • ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ์œ ํ˜• : ์ผ๋ จ์˜ ๋ช…๋ น์— ๋”ฐ๋ผ์„œ ๊ฐœ์ฒด๋ฅผ ์ฐจ๋ก€๋Œ€๋กœ ์ด๋™์‹œํ‚ค๊ธฐ ๋•Œ๋ฌธ์—

  • ์—ฐ์‚ฐ ํšŸ์ˆ˜๋Š” ์ด๋™ ํšŸ์ˆ˜์— ๋น„๋ก€

    ์ด๋™ ํšŸ์ˆ˜๊ฐ€ N๋ฒˆ์ธ ๊ฒฝ์šฐ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(N) ์ด๋‹ค.

๋ฌธ์ œ๋ฅผ ํ’€์ดํ•œ ๊ณผ์ •์„ ๋ณด๋ฉด ์ขŒ, ์šฐ, ์œ„, ์•„๋ž˜ 4๊ฐ€์ง€ ์ด๋™๋ฐฉํ–ฅ์„ List๋กœ ๋งŒ๋“ค์–ด์„œ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค.

๊ทธ๋ฆฌ๋”” ์œ ํ˜•์˜ ๊ฑฐ์Šค๋ฆ„๋ˆ ๋ฌธ์ œ์—์„œ๋„ 500์›, 100์›, 50์›, 10์›์˜ ํ™”ํ๋‹จ์œ„๋ฅผ List๋กœ ๋งŒ๋“ค์–ด์„œ ์‚ฌ์šฉํ–ˆ์—ˆ๋Š”๋ฐ, ๋ฐ˜๋ณต์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ’๋“ค์— ๋Œ€ํ•ด์„œ๋Š” ๋ฆฌ์ŠคํŠธ์— ๋‹ด์•„๋‘๊ณ  ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด ์ข€ ๋” ํšจ์œจ์ ์œผ๋กœ ํ’€ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ ๊ฐ™๋‹ค.

โ€˜๋‚˜์˜ ํ’€์ดโ€™ ์ฒ˜๋Ÿผ if๋ฌธ์œผ๋กœ ์ ‘๊ทผํ•œ๋‹ค๋ฉด ์ด๋™๋ฐฉํ–ฅ์ด ์‚ฌ๋ฐฉํŒ”๋ฐฉ์œผ๋กœ ๋Š˜์–ด๋‚˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์ฝ”๋“œ๊ฐ€ ๊ธธ์–ด์ง€๊ฒŒ ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€๋…์„ฑ ์ธก๋ฉด์—์„œ๋„ ์ข‹์ง€ ์•Š์•„ ๋ณด์ธ๋‹ค.


๐Ÿ“ƒ [์˜ˆ์ œ 2] ์‹œ๊ฐ

  • ๋‚œ์ด๋„: โญ
  • ํ’€์ด ์‹œ๊ฐ„: 15๋ถ„
  • ์‹œ๊ฐ„ ์ œํ•œ: 2์ดˆ
  • ๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ: 128MB

[๋ฌธ์ œ]

์ •์ˆ˜ N์ด ์ž…๋ ฅ๋˜๋ฉด 00์‹œ 00๋ถ„ 00์ดˆ๋ถ€ํ„ฐ N์‹œ 59๋ถ„ 59์ดˆ๊นŒ์ง€์˜ ๋ชจ๋“  ์‹œ๊ฐ ์ค‘์—์„œ 3์ด ํ•˜๋‚˜๋ผ๋„ ํฌํ•จ๋˜๋Š” ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

[์ž…๋ ฅ ์กฐ๊ฑด]

  • ์ฒซ์งธ ์ค„์— ์ •์ˆ˜ N์ด ์ž…๋ ฅ๋œ๋‹ค. (0<=N<=23)

[์ถœ๋ ฅ ์กฐ๊ฑด]

  • 00์‹œ 00๋ถ„ 00์ดˆ๋ถ€ํ„ฐ N์‹œ 59๋ถ„ 59์ดˆ๊นŒ์ง€์˜ ๋ชจ๋“  ์‹œ๊ฐ ์ค‘์—์„œ 3์ด ํ•˜๋‚˜๋ผ๋„ ํฌํ•จ๋˜๋Š” ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.
# ์ž…๋ ฅ ์˜ˆ์‹œ
5

# ์ถœ๋ ฅ ์˜ˆ์‹œ
11475
# 1. ๋‚˜์˜ ํ’€์ด

h = int(input())
cnt = 0

for i in range(h+1):
	for j in range(60):
		for k in range(60):
			if '3' in str(i) + str(j) + str(k):  # if item in list: list ์•ˆ์— ํŠน์ • ๊ฐ’ ํ™•์ธ ๋ฐฉ๋ฒ•
				cnt += 1
print(cnt)


# 2. ๊ต์žฌ ํ’€์ด

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)
  • ์™„์ „ํƒ์ƒ‰(Brute Forcing) ์œ ํ˜• : ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋ชจ๋‘ ๊ฒ€์‚ฌ

  • ๋ชจ๋“  ์‹œ๊ฐ์˜ ๊ฒฝ์šฐ๋ฅผ ํ•˜๋‚˜์”ฉ ๋ชจ๋‘ ์„ธ์„œ ํ‘ธ๋Š” ๋ฌธ์ œ ์ „์ฒด ์‹œ, ๋ถ„, ์ดˆ์— ๋Œ€ํ•œ ๊ฒฝ์šฐ์˜ ์ˆ˜ : 24 ร— 60 ร— 60

์ผ๋ฐ˜์ ์œผ๋กœ ์™„์ „ ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋น„ํšจ์œจ์ ์ธ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฏ€๋กœ ์ „์ฒด ๋ฐ์ดํ„ฐ์˜ ์ˆ˜๊ฐ€ 100๋งŒ ๊ฐœ ์ดํ•˜์ผ ๋•Œ ์™„์ „ ํƒ์ƒ‰์„ ์‚ฌ์šฉํ•˜๋ฉด ์ ์ ˆํ•˜๋‹ค.


๋Œ“๊ธ€๋‚จ๊ธฐ๊ธฐ