λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

Algorithm/μ΄μ½”ν…Œ

[이것이 취업을 μœ„ν•œ μ½”λ”©ν…ŒμŠ€νŠΈλ‹€] κ΅¬ν˜„ - μƒν•˜μ’Œμš°

 

문제 

 

μ—¬ν–‰κ°€ AλŠ” N × N 크기의 μ •μ‚¬κ°ν˜• 곡간 μœ„μ— μ„œ μžˆλ‹€. 이 곡간은 1 × 1 크기의 μ •μ‚¬κ°ν˜•μœΌλ‘œ λ‚˜λˆ„μ–΄μ Έ μžˆλ‹€. κ°€μž₯ μ™Όμͺ½ μœ„ μ’Œν‘œλŠ” (1, 1)이며, κ°€μž₯ 였λ₯Έμͺ½ μ•„λž˜ μ’Œν‘œλŠ” (N, N)에 ν•΄λ‹Ήν•œλ‹€.

 

μ—¬ν–‰κ°€ AλŠ” 상, ν•˜, 쒌, 우 λ°©ν–₯으둜 이동할 수 있으며, μ‹œμž‘ μ’Œν‘œλŠ” 항상 (1, 1)이닀. 우리 μ•žμ—λŠ” μ—¬ν–‰κ°€ Aκ°€ 이동할 κ³„νšμ΄ 적힌 κ³„νšμ„œκ°€ 놓여 μžˆλ‹€. κ³„νšμ„œμ—λŠ” ν•˜λ‚˜μ˜ 쀄에 띄어쓰기λ₯Ό κΈ°μ€€μœΌλ‘œ L, R, U, D 쀑 ν•˜λ‚˜μ˜ λ¬Έμžκ°€ 반볡적으둜 μ ν˜€μžˆλ‹€. 각 문자의 μ˜λ―ΈλŠ” λ‹€μŒκ³Ό κ°™λ‹€

 

L: μ™Όμͺ½μœΌλ‘œ ν•œ μΉΈ 이동
R: 였λ₯Έμͺ½μœΌλ‘œ ν•œ μΉΈ 이동
U: μœ„λ‘œ ν•œ μΉΈ 이동
D: μ•„λž˜λ‘œ ν•œ μΉΈ 이동

 

μ΄λ•Œ μ—¬ν–‰κ°€ Aκ°€ N × N 크기의 μ •μ‚¬κ°ν˜• 곡간을 λ²—μ–΄λ‚˜λŠ” μ›€μ§μž„μ€ λ¬΄μ‹œλœλ‹€
예λ₯Ό λ“€μ–΄ (1, 1)의 μœ„μΉ˜μ—μ„œ L ν˜Ήμ€ Uλ₯Ό λ§Œλ‚˜λ©΄ λ¬΄μ‹œλœλ‹€
λ‹€μŒμ€ N = 5인 지도와 κ³„νšμ΄λ‹€

 

 

μž…λ ₯ 

 

첫째 쀄에 κ³΅κ°„μ˜ 크기λ₯Ό λ‚˜νƒ€λ‚΄λŠ” N이 μ£Όμ–΄μ§‘λ‹ˆλ‹€. (1<=N<=100)
λ‘˜μ§Έ 쀄에 μ—¬ν–‰κ°€ Aκ°€ 이동할 κ³„νšμ„œ λ‚΄μš©μ΄ μ£Όμ–΄μ§‘λ‹ˆλ‹€. (1<=이동 횟수<=100)

 

 

좜λ ₯ 

 

첫째 쀄에 κ²Œμž„μ˜ 룰에 맞게 μ„ νƒν•œ μΉ΄λ“œμ— 적힌 숫자λ₯Ό 좜λ ₯

 

 

λ‚˜μ˜ μ½”λ“œ
# size와 μ—¬ν–‰ κ³„νšμ„œ λ³€μˆ˜ μ„€μ •
size = int(input())
way = list(map(str,input().split()))

# ν˜„μž¬ μœ„μΉ˜λ₯Ό λ°°μ—΄λ‘œ 지정 
now = [1, 1]

for i in way:
  # 였λ₯Έμͺ½μœΌλ‘œ μ΄λ™ν•˜λŠ” 경우 now[1]값이 μ΅œλŒ€ size만큼만 이동 κ°€λŠ₯
  if i == "R":
    if now[1] < size:
      now[1] += 1
  # μ™Όμͺ½μœΌλ‘œ μ΄λ™ν•˜λŠ” 경우 now[1]값이 μ΅œμ†Œ 1κΉŒμ§€λ§Œ 이동 κ°€λŠ₯ 
  elif i == "L":
    if now[1] > 1:
      now[1] -= 1
  # μœ„λ‘œ μ΄λ™ν•˜λŠ” 경우 now[0]값이 μ΅œμ†Œ 1κΉŒμ§€λ§Œ 이동 κ°€λŠ₯
  elif i == "U":
    if now[0] > 1:
      now[0] -= 1

  # μ•„λž˜λ‘œ μ΄λ™ν•˜λŠ” 경우 μ΅œλŒ€ now[0]값이 μ΅œλŒ€ size만큼만 이동 κ°€λŠ₯
  else:
    if now[0] < size:
      now[0] += 1
      
print(now[0],now[1])

 

 

ν•΄μ„€ μ½”λ“œμ— λŒ€ν•œ 뢄석 
# 크기 μž…λ ₯ 
n = int(input())
# ν˜„μž¬ μœ„μΉ˜ μž…λ ₯
x,y = 1,1
# μ—¬ν–‰ κ³„νš μž…λ ₯ 
plans = input().split()

# 이동쑰건 
dx = [0,0,-1,1]
dy = [-1,1,0,0]
move_types = ["L","R","U","D"]

# μ—¬ν–‰ κ³„νšμ„ ν•˜λ‚˜μ”© ν›‘μ–΄λ΄„
for plan in plans:
  # move_types의 길이만큼 λ°˜λ³΅ν•˜λ©°, move_types의 μ›μ†Œμ™€ μ—¬ν–‰κ³„νš 비ꡐ
  for i in range(len(move_types)):
    if plan == move_types[i]:
      nx = x + dx[i]
      ny = y + dy[i]

  # nx,ny의 경우 λͺ¨λ‘ μ΅œλŒ€λŠ” n, μ΅œμ†ŒλŠ” 1이기 λ•Œλ¬Έμ— μ˜ˆμ™Έμ‚¬ν•­λ“€μ„ μ μ–΄μ€Œ
  if nx < 1 or ny < 1 or nx > n or ny > n:
    continue

  x,y = nx,ny

print(x,y)

μ—¬κΈ°μ„œ κΈ°μ–΅ν•΄μ•Ό ν•  점은 move_types λΌλŠ” 배열을 λ§Œλ“€κ³  μ΄λ“€μ˜ x,y 의 μ›€μ§μž„μ„ 각각 따라 dx 와 dy에 λΆ„λ¦¬ν•˜μ—¬ 적어, λ°˜λ³΅λ¬Έμ„ 돌 λ•Œ move_types와 같은 인덱슀λ₯Ό 가진 dx, dy λ°°μ—΄ 속 μ›μ†Œλ“€μ„ ν˜„μž¬ μœ„μΉ˜μ—μ„œ λ”ν•˜κ³  빼게 λ§Œλ“€μ—ˆλ‹€λŠ” 점이닀. λ‚˜λŠ” μ΄λ“€μ˜ μ›€μ§μž„μ„ 각각 쑰건문에 μ μ–΄μ„œ ν•΄κ²°ν•˜μ˜€λŠ”λ°, μ΄λ ‡κ²Œ λ°˜λ³΅λ¬Έμ„ ν™œμš©ν•΄ move_types 와 plans 배열을 비ꡐ할 수 μžˆλ‹€λŠ” 점이 μΈμƒκΉŠμ—ˆλ‹€. 그리고 λ§ˆμ§€λ§‰μ— μ˜ˆμ™Έ 사항듀은 continue둜 λΉΌμ£Όμ–΄μ„œ 쑰건에 λΆ€ν•©ν•˜λŠ” 경우만 λ°˜λ³΅λ¬Έμ„ 돌 수 μžˆλ„λ‘ λ§Œλ“€μ–΄μ€€ 점이 효율적인 것 κ°™λ‹€.