アクセス長(Programmers 49994)


🧑‍💻 阿克塞斯的长度

  • キャラクターは4種類のコマンドで移動します.コマンドは次のとおりです.
  • U:上へ
  • D:下段
  • R:右一マス
  • L:左一マス
  • キャラクタは、座標平面(0,0)の位置から開始します.座標平面の境界は、左上角(-5、5)、左下角(-5、-5)、右上角(5、5)および右下角(5、-5)からなる.
  • たとえば、コマンドが「ULURRDLLU」の場合
  • 1番から7番まで:
  • 8番から9番まで:
  • このとき、私たちはゲームキャラクターが歩いた道の中でキャラクターが初めて歩いた道の長さを要求します.たとえば、上記の例では、ゲームキャラクタが移動する長さは9ですが、キャラクタが最初に歩く長さは7です.(第8、9号命令が行った道は第2、3号命令で通った)
  • セグメントで、座標平面の境界を超えたコマンドは無視されます.
  • たとえば、コマンドがLULLLUの場合
  • 1号命令から6号命令に従って移動し、7,8号命令を無視します.さらに9番の命令に従って行動します.
  • このときキャラクターが初めて歩いた道の長さは7です.
  • 命令にパラメータdirsが付与されると、ゲームキャラクタが初めて歩く道の長さを求め、返される求解関数を完了する.
  • せいげんじょうけん
  • dirsは、「U」、「D」、「R」および「L」を除いて文字列形式で与えられる.
  • dirsの長さは500以下の自然数である.
  • I/O例
    dirsanswer"ULURRDLLU"7"LULLLLLLU"7

    🧑‍💻 解決策

  • を移動するたびに位置x,yの値が加算され、始点の値を変換しようとしたが、異常処理の問題が解決できず失敗した.
  • ディレクトリで、「U」、「D」、「L」、「R」(key)の値を設定し、次の値より前の値を比較して道路リスト(プリセット)に入れます.
  • と道路の長さを2で割った値
  • を返します.

    🧑‍💻 コード#コード#

    def solution_fail(dirs):
       answer = 0
       sp = [0, 0]
       point = []
       u, d, l, r = [0, 1], [0, -1], [-1, 0], [1, 0]
       road = []
    
       point.append([0, 0])
       for cmd in dirs :
           tmp = []
           # 여기에 x > 5, x < -5, y > 5, y < -5 요건 추가
           if cmd == 'U' :
               sp[0] += u[0]
               sp[1] += u[1]
               tmp.append(sp[0])
               tmp.append(sp[1])
    
           elif cmd == 'D' :
               sp[0] += d[0]
               sp[1] += d[1]
               tmp.append(sp[0])
               tmp.append(sp[1])
    
           elif cmd == 'L' :
               sp[0] += l[0]
               sp[1] += l[1]
               tmp.append(sp[0])
               tmp.append(sp[1])
    
           elif cmd == 'R' :
               sp[0] += r[0]
               sp[1] += r[1]
               tmp.append(sp[0])
               tmp.append(sp[1])
    
           point.append(tmp)
    
       print(point)
    
       # 길 루틴
       for i in range(len(point) - 1) :
           tmp = []
           tmp.append(point[i])
           tmp.append(point[i + 1])
           if tmp not in road :
               road.append(tmp)
           else :
               continue
    
       print(road)
    
       return answer
    
    def solution(dirs) :
       cmd = {
           'U': (0, 1),
           'D': (0, -1),
           'L': (-1, 0),
           'R': (1, 0)
       }
       road = set()
       cur_x, cur_y = (0, 0)
    
       for rou in dirs :
           next_x, next_y = cur_x + cmd[rou][0], cur_y + cmd[rou][1]
           if -5 <= next_x <= 5 and -5 <= next_y <= 5 :
               road.add((cur_x, cur_y, next_x, next_y))
               road.add((next_x, next_y, cur_x, cur_y))
               cur_x, cur_y = next_x, next_y
    
       return len(road) // 2

    🧑‍💻 総評

  • の頭の中では、論理はずっとそうだったが、条件文の方法はまだ熟練していない.
  • の柔軟な思考を育成する方法を探求します...