λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
μ•Œκ³ λ¦¬μ¦˜ 문제 풀이

[μ΄μ½”ν…Œ] μƒν•˜μ’Œμš°

by syLim___ 2023. 2. 22.
728x90

좜처: 이것이 취업을 μœ„ν•œ μ½”λ”©ν…ŒμŠ€νŠΈλ‹€  with 파이썬 (λ‚˜λ™λΉˆ)

https://www.youtube.com/watch?v=2zjoKjt97vQ&list=PLRx0vPvlEmdAghTr5mXQxGpHjWqSz0dgC&index=2

 

 

문제

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

 

문제 쑰건

  • ν’€μ΄μ‹œκ°„: 15λΆ„
  • μ‹œκ°„μ œν•œ: 2초
  • λ©”λͺ¨λ¦¬ μ œν•œ: 128MB


λ‹¨μˆœ κ΅¬ν˜„ 문제둜 λ¬Έμ œμ—μ„œ ν•˜λΌλŠ” λŒ€λ‘œλ§Œ ν•˜λ©΄ λœλ‹Ή

 

μž‘μ„± μ½”λ“œ

N = int(input())
data = list(input().split())

x,y = 1,1

for i in data:
  if i=='L':
    nextX=x
    nextY=y-1
  elif i=='R':
    nextX=x
    nextY=y+1
  elif i=='U':
    nextX=x-1
    nextY=y
  elif i=='D':
    nextX=x+1
    nextY=y

  if 1<=nextX<=N and 1<=nextY<=N:
    x=nextX
    y=nextY


print(x,y)

 

L,R,U,D에 따라 λ‹€μŒ μ’Œν‘œλ₯Ό κ΅¬ν•˜κ³  κ·Έ μ’Œν‘œλ‘œ 이동 κ°€λŠ₯ν•˜λ‹€λ©΄(λ²”μœ„ 체크) μ΄λ™ν•˜λŠ” μ‹μœΌλ‘œ μ½”λ“œλ₯Ό μž‘μ„±ν–ˆλ‹€.

μ–΄μ°¨ν”Ό 이동 κ°€λŠ₯ν•œ 칸이 μΈμ ‘ν•œ μƒν•˜μ’Œμš° 4κ°œλ°–μ— μ—†λŠ” 맀우 λ‹¨μˆœν•œ λ¬Έμ œλΌμ„œ 무지성  if-else둜 μ μ—ˆλŠ”λ°,

μ΄λ ‡κ²Œ ν•˜λ‹ˆκΉŒ μ’€ λ¨Έλž„κΉŒ μ—†μ–΄λ³΄μ΄λŠ” 것 κ°™κΈ΄ ν•˜λ‹€.

 

κ°•μ˜ 보고 μˆ˜μ •ν•œ μ½”λ“œ

N = int(input())
plans = list(input().split())

moveTypes = ['L','R','U','D']
dx=[0,0,-1,1]
dy=[-1,1,0,0]

x,y = 1,1

for plan in plans:
  for i in range(len(moveTypes)):
    if plan == moveTypes[i]:
      nx = x + dx[i] #nextX
      ny = y + dy[i] #nextY

  if 1<=nx<=N and 1<=ny<=N:
      x,y = nx,ny

print(x,y)

 

728x90