dx, dy ํ…Œํฌ๋‹‰๐Ÿฅธ

โ€์„œ์ง€์˜คยท2022๋…„ 8์›” 2์ผ
7

์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ

๋ชฉ๋ก ๋ณด๊ธฐ
1/19
post-thumbnail

ํ•™๊ต์—์„œ ์ œ๊ณตํ•˜๋Š” ์—ฌ๋ฆ„๋ฐฉํ•™ ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ ๋Œ€๋น„ ์บ ํ”„ with ์ฝ”๋“œํŠธ๋ฆฌ | ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์ค€๋น„๋ฅผ ์œ„ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ •์„์— ์ˆ˜๋ก๋œ ๋ฌธ์ œ ํ’€์ด ๋ฐ ๊ฐ•์˜ ์ •๋ฆฌ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.


dx, dy ํ…Œํฌ๋‹‰์ด๋ž€?

ํ˜„์žฌ ์ขŒํ‘œ x, y = (0, 0)์ด๋ผ๊ณ  ํ•  ๋•Œ ๋™์ชฝ์œผ๋กœ ์ด๋™ํ•˜๋ฉด x = x + 1, y = y + 0, ๋‚จ์ชฝ์œผ๋กœ ์ด๋™ํ•˜๋ฉด x = x + 0, y = y - 1, ์„œ์ชฝ์œผ๋กœ ์ด๋™ํ•˜๋ฉด x = x - 1, y = y + 0, ๋ถ์ชฝ์œผ๋กœ ์ด๋™ํ•˜๋ฉด x = x + 0, y = y + 1์œผ๋กœ ์ขŒํ‘œ๊ฐ€ ๋ณ€ํ•˜๊ฒŒ ๋œ๋‹ค.

์ด๋ฅผ if๋ฌธ์œผ๋กœ ํ‘œํ˜„ํ•˜๊ฒŒ ๋˜๋ฉด ๋ฐ‘์—์™€ ๊ฐ™์ด 8์ค„๋กœ ํ‘œํ˜„๋˜๋Š”๋ฐ ์ด๋Š” ๋น„์Šทํ•œ ์ฝ”๋“œ์˜ ๋ฐ˜๋ณต์ ์ธ ํ˜•ํƒœ๋ฅผ ์ง€๋…€ ์‹ค์ˆ˜๋ฅผ ์œ ๋ฐœํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด dx, dy ํ…Œํฌ๋‹‰์ด ๋“ฑ์žฅํ•˜์˜€๋‹ค.

์ˆœ์ˆ˜ if-elif๋ฌธ ์‚ฌ์šฉ

x, y = 0, 0 #์ถœ๋ฐœ ์ง€์  ์„ค์ •
dir_num = 0 #์ด๋™ ๋ฐฉํ–ฅ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค

if dir_num == 0:
    nx, ny = x + 1, y + 0
elif dir_num == 1:
    nx, ny = x + 0, y - 1
elif dir_num == 2:
    nx, ny = x - 1, y + 0
else:
    nx, ny = x + 0, y + 1

dx, dy ํ…Œํฌ๋‹‰์˜ ์‚ฌ์šฉ ๋ชจ์Šต

x, y = 0, 0 #์ถœ๋ฐœ ์ง€์  ์„ค์ •
dir_num = 0 #์ด๋™ ๋ฐฉํ–ฅ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค

# ๋ฐฉํ–ฅ์„ ์ €์žฅํ•˜๋Š” ์ˆœ์„œ๋Š” ๋ฌธ์ œ์— ๋”ฐ๋ผ ์‚ฌ์šฉ์ž๊ฐ€ ์ง€์ •
#     0  1   2  3
dx = [1, 0, -1, 0]
dy = [0, -1, 0, 1]

#์กฐ๊ฑด์— ๋”ฐ๋ผ ์ด๋™
nx, ny = x + dx[dri_num], y + dy[dir_num]

๋ฐฉํ–ฅ ํšŒ์ „ ๋ฌธ์ œ์— dx, dy์˜ ์ ์šฉ

dir_num = 3 #์ดˆ๊ธฐ ์ด๋™ ๋ฐฉํ–ฅ
x, y = 1, 5 #์ดˆ๊ธฐ ์œ„์น˜
dx, dy = [1, 0, -1, 0], [0, -1, 0, 1] #๋™๋‚จ์„œ๋ถ ์ˆœ์„œ(์‹œ๊ณ„๋ฐฉํ–ฅ ์ˆœ)

#==dx, dy ํ…Œํฌ๋‹‰ ์‚ฌ์šฉ ์•ˆํ–ˆ์„ ๊ฒฝ์šฐ==

# ์‹œ๊ณ„๋ฐฉํ–ฅ 90' ํšŒ์ „()
# if dir_num == 0:
#     dir_num = 1
# elif dir_num == 1:
#     dir_num = 2
# elif dir_num == 2:
#     dir_num = 3
# else:
#     dir_num = 0

#==dx, dy ํ…Œํฌ๋‹‰ ์‚ฌ์šฉํ–ˆ์„ ๊ฒฝ์šฐ==

# ์‹œ๊ณ„ ๋ฐฉํ–ฅ 90' ํšŒ์ „
# 0 -> 1
# 1 -> 2
# 2 -> 3
# 3 -> 0

dir_num = (dir_num + 1) % 4
nx, ny = x + dx[dir_num], y + dy[dir_num]

# ๋ฐ˜์‹œ๊ณ„ ๋ฐฉํ–ฅ 90' ํšŒ์ „
# 3 -> 2
# 2 -> 1
# 1 -> 0
# 0 -> 3

dir_num = (dir_num -1 + 4) % 4
nx, ny = x + dx[dir_num], y + dy[dir_num]

dx, dy์—์„œ ๋ฐฉํ–ฅ ๋ฒˆํ˜ธ๋ฅผ ์‹œ๊ณ„ ๋ฐฉํ–ฅ ์ˆœ์„œ๋Œ€๋กœ ์ž…๋ ฅํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฒฐ๊ตญ ์‹œ๊ณ„ ๋ฐฉํ–ฅ์œผ๋กœ 90๋„ ํšŒ์ „ํ•˜๋Š” ๊ฒƒ์€ dir_num์„ 1 ์ฆ๊ฐ€์‹œํ‚ค๋Š” ๊ฒƒ๊ณผ ๊ฐ™๋‹ค.

์ด๋•Œ ์ฃผ์˜ํ•ด์•ผ ํ•  ์ ์ด ์กด์žฌํ•˜๋Š”๋ฐ, ์‹œ๊ณ„ ๋ฐฉํ–ฅ์œผ๋กœ ํšŒ์ „ํ•  ๊ฒฝ์šฐ ํ˜„์žฌ dir_num์ด 3์ธ ๊ฒฝ์šฐ dir_num = dir_num + 1 ์‹คํ–‰ ์‹œ dri_num์ด 4๊ฐ€ ๋˜์–ด list index out of range ์˜ค๋ฅ˜๊ฐ€ ๋œจ๊ฒŒ ๋œ๋‹ค.(๋ฑกํ–ฅ์€ ์ด 0,1,2,3 4๊ฐœ ๊นŒ์ง€ ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์—)

์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด dir_num = (dir_num + 1) % 4์„ ์‚ฌ์šฉํ•œ๋‹ค.

(3+1) % 4 = 0์ด๊ธฐ ๋•Œ๋ฌธ์— 3->0์œผ๋กœ ๋ณ€๊ฒฝ์ด ์ž˜ ์ด๋ค„์ง„๋‹ค.

๋ฐ˜์‹œ๊ณ„ ๋ฐฉํ–ฅ์œผ๋กœ ํšŒ์ „ํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์‹œ๊ณ„๋ฐฉํ–ฅ๊ณผ ๋ฐ˜๋Œ€๋กœ dir_num์„ 1์”ฉ ๋นผ์ฃผ๋ฉด ๋˜๋Š”๋ฐ ์ด ๊ฒฝ์šฐ์—๋Š” ๋ฐ”๋€Œ๊ธฐ ์ „ dir_num์ด 0์ธ ๊ฒฝ์šฐ dir_num = dir_num - 1 ์ˆ˜ํ–‰ ์‹œ dir_num์ด -1์ด ๋˜์–ด ์œ„ ๊ฒฝ์šฐ์™€ ๋™์ผํ•˜๊ฒŒ list index out of range ์˜ค๋ฅ˜๊ฐ€ ๋œจ๊ฒŒ ๋œ๋‹ค.

์ด ๊ฒฝ์šฐ์—๋„ ์œ„์— ๋ฐฉ๋ฒ•๊ณผ ์œ ์‚ฌํ•˜๊ฒŒ ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๋Š”๋ฐ dir_num = (dir_num -1 + 4) % 4๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

(0 - 1 + 4) % 4 = 3์ด๊ธฐ ๋•Œ๋ฌธ์— 0 -> 3์œผ๋กœ ๋ณ€๊ฒฝ์ด ์ž˜ ์ด๋ฃจ์–ด์ง„๋‹ค.

์‹œ๊ณ„, ๋ฐ˜์‹œ๊ณ„๊ฐ€ ์•„๋‹ˆ๊ณ  ํŠน์ • ์ง€์ ์—์„œ ๋ฐ˜๋Œ€๋กœ ๋Œ์•„ ๊ฐ€๋Š” ๊ฒฝ์šฐ๋ผ๋ฉด ์ด์™€ ๊ฐ™์ด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑ

n, t = map(int, input().split())
x, y, dir_c = input().split()

#ํ–‰,์—ด์ด 1ํ–‰ 1์—ด๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋ฏ€๋กœ -1 ์”ฉ ํ•ด์ค€๋‹ค.
x = int(x) - 1
y = int(y) - 1

#์ž…๋ ฅ์— ๋”ฐ๋ฅธ ๋ฐฉํ–ฅ ์ง€์ •
dict_dir = {
    "U": 2,
    "D": 1,
    "R": 0,
    "L": 3
}

#dxs, dys๋ฅผ ์ง€์ •ํ•  ๋•Œ ๋ฐ˜๋Œ€ ๋ฐฉํ–ฅ์ธ ๊ฑธ ๊ณ„์‚ฐํ•˜๊ธฐ ์‰ฝ๋„๋ก ์ง€์ •
dir_num = dict_dir[dir_c]
dxs = [0, 1, -1, 0]
dys = [1, 0, 0, -1]

def in_range(x, y):
    return x >= 0 and x <n and y >= 0 and y < n

for i in range(t):
    nx, ny = x + dxs[dir_num], y + dys[dir_num]

    if in_range(nx, ny):
        x, y = nx, ny
    else:  #๋ฐ˜๋Œ€ ๋ฐฉํ–ฅ์„ ์˜
        dir_num = 3 - dir_num

    # ์ดˆ๊ธฐ ํ’€์ด(๊ฐ€๋…์„ฑ์ด ๋–จ์–ด์ง)
    # if not in_range(nx, ny):
    #     dir_num = 3 - dir_num
    #     continue
    # x, y = nx, ny

#์ •๋‹ต์„ ๋„์ถœํ•  ๋•Œ๋Š” ๋นผ์คฌ๋˜ 1์„ ๋‹ค์‹œ ๋”ํ•ด์ค€๋‹ค.
x = x + 1
y = y + 1

print(x, y)
  • ํ–‰, ์—ด์ด 1ํ–‰, 1์—ด ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๊ธฐ์— ์ž…๋ ฅ๋ฐ›์€ x,y๋ฅผ 1์”ฉ ๋นผ์ฃผ๊ณ  ๋‹ต์„ ์ฐพ์€ ํ›„ ๋‹ต์„ ์ถœ๋ ฅํ•  ๋•Œ ๋‹ค์‹œ 1์”ฉ ๋”ํ•ด์ค€๋‹ค. (๊ฒฉ์ž๋Š” ํ–‰๊ณผ ์—ด์ด 0๋ฒˆ ์ธ๋ฑ์Šค ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์—)
  • dxs, dys๋ฅผ ์ง€์ •ํ•  ๋•Œ ๋™,์„œ -> 0๋ฒˆ,3๋ฒˆ ์ธ๋ฑ์Šค / ๋‚จ,๋ถ -> 1, 2๋ฒˆ ์ธ๋ฑ์Šค๋กœ ๋‘๋Š” ์ด์œ ๋Š” ๋ฐ˜๋Œ€ ๋ฐฉํ–ฅ์„ ์‰ฝ๊ฒŒ ์ฐพ๊ธฐ ์œ„ํ•ด์„œ์ด๋‹ค.
  • dir_num = 3 - dir_num์„ ํ•˜๋ฉด ๋ฐ˜๋Œ€๋ฐฉํ–ฅ์„ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ฒฉ์ž ์† dx, dy

๋จผ์ € dx, dy๋ฅผ ์ด์ฐจ์› ๋ฐฐ์—ด(๊ฒฉ์ž)์—์„œ ์ƒ๊ฐํ•ด ๋ณด๋ฉด x๋ฅผ ํ–‰, y๋ฅผ ์—ด๋กœ ์ƒ๊ฐํ•ด์•ผํ•œ๋‹ค.

๋‹ค์Œ์œผ๋กœ ์ด๋™ํ•  ์œ„์น˜๊ฐ€ ๊ฒฉ์ž์—์„œ ๋ฒ—์–ด๋‚˜๋Š”์ง€๋ฅผ ํŒ๋‹จํ•ด์ฃผ๋Š” in_range() ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•˜๊ณ  ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค.

์ƒํ•˜ ์ขŒ์šฐ์— ์ธ์ ‘ํ•œ 1์˜ ๊ฐœ์ˆ˜๊ฐ€ 3๊ฐœ ์ด์ƒ์ธ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ์‚ดํŽด๋ณด์ž

n = int(input())  #n * n์—์„œ์˜ n
arr = [list(map(int, input().split())) for _ in range(n)] #์ด์ฐจ์› ๋ฐฐ์—ด ์ž…๋ ฅ

#์šฐํ•˜์ขŒ์ƒ
dxs = [0, 1, 0, -1]
dys = [1, 0, -1, 0]

#๊ฒฉ์ž์—์„œ ๋ฒ—์–ด๋‚˜๋Š”์ง€ ํŒ๋‹จ
def in_range(x, y):
    return x >= 0 and x < n and y >= 0 and y < n

result = 0
for x in range(n):
    for y in range(n):ใ…‘
        count = 0
        for dx, dy in zip(dxs, dys): 
            nx, ny = x + dx, y + dy
            if in_range(nx, ny) and arr[nx][ny] == 1:
                count += 1
            if count == 3:
                result += 1
                break
print(result)

if in_range(nx, ny) and arr[nx][ny] == 1: ์ด ์ฝ”๋“œ์—์„œ in_range() ์กฐ๊ฑด์ด ๋จผ์ € ์ˆ˜ํ–‰๋˜์–ด์•ผ ํ•œ๋‹ค. if arr[nx][ny] == 1 and in_range(nx, ny):๋ผ๊ณ  ์ˆœ์„œ๋ฅผ ๋ฐ”๊พผ๋‹ค๋ฉด arr[nx][ny] == 1์—์„œ index out of range() ์˜ค๋ฅ˜๊ฐ€ ๋œจ๊ธฐ ๋•Œ๋ฌธ์— ์ˆœ์„œ๋ฅผ ์ฃผ์˜ํ•ด์•ผ ํ•œ๋‹ค.


dx, dy in Python

  • python์„ ์‚ฌ์šฉํ•˜์—ฌ dx, dy technique์„ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด dx, dy ๋ฐฐ์—ด์„ dxs, dys๋ผ๊ณ  ์„ ์–ธํ•œ ํ›„ ์—ฌ๋Ÿฌ ๊ฐœ์˜ collection์„ ์ธ์ž๋กœ ๋ฐ›์•„ ์ˆœ์„œ๋Œ€๋กœ ์ฒซ๋ฒˆ์งธ ์›์†Œ๋ถ€ํ„ฐ ๋งˆ์ง€๋ง‰ ์›์†Œ๊นŒ์ง€ ์Œ์œผ๋กœ returnํ•ด์ฃผ๋Š” zip ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ dx, dy๋ฅผ ์ถ”์ถœํ•˜์—ฌ ์‚ฌ์šฉํ•œ๋‹ค.
x, y = 0, 0
dxs = [0, 1, 0, -1]
dys = [1, 0, -1, 0]

for dx, dy in zip(dxs, dys):
    x, y = x + dx, y + dy
  • for๋ฌธ ์•ˆ์— ๋ฆฌ์ŠคํŠธ, dictionary ์„ ์–ธ ์‹œ ํฌ๊ธฐ๋ฅผ ๋ณด๊ณ  for๋ฌธ ์•ˆ์— ๋‘˜์ง€ ๋ฐ–์— ๋‘˜์ง€ ์ƒ๊ฐํ•ด๋ณด์•„์•ผ ํ•œ๋‹ค

  • map์œผ๋กœ return ํ›„ ํ˜•๋ณ€ํ™˜์„ ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด len()๊ณผ ๊ฐ™์€ ๋ฆฌ์ŠคํŠธ๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค. ๋”ฐ๋ผ์„œ ํŒŒ์ด์ฌ map์‚ฌ์šฉ ์‹œ return ๊ฐ’์ด map์ด๋ฏ€๋กœ tuple์ด๋‚˜ list๋กœ ๊ฐ์‹ธ์ฃผ๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

    • ex) tuple(map(int, arr))

    ๊ฒฐ๋ก  : unpacking ์‹œ ํ˜•๋ณ€ํ™˜์„ ํ•˜๊ณ  ์ง„ํ–‰!!

  • ๋”•์…”๋„ˆ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ dir_num๊ณผ ๋ฐฉํ–ฅ์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ž…๋ ฅํ˜•์‹์„ ๋งคํ•‘ํ•ด์ค€๋‹ค.

#์ž…๋ ฅ์— ๋”ฐ๋ฅธ ๋ฐฉํ–ฅ ์ง€์ •
dict_dir = {
    "U": 2,
    "D": 1,
    "R": 0,
    "L": 3
}
dir_num = dict_dir[์ž…๋ ฅ๊ฐ’]
profile
๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž๋ฅผ ๊ฟˆ๊พธ๋Š” ํ•™์ƒ์ž…๋‹ˆ๋‹ค!

0๊ฐœ์˜ ๋Œ“๊ธ€

๊ด€๋ จ ์ฑ„์šฉ ์ •๋ณด