インプリメンテーション

18604 ワード

就職のためのコードテストとPython(羅東彬著)の本と講義を読んで整理した文章だ.
レッスンソース:https://www.youtube.com/channel/UChflhu32f5EUHlY7_SetNWw

実装:シミュレーションと完全なナビゲーション


実装とは,頭の中のアルゴリズムをソースコードに変換する過程である.
  • problem - thinking - solution
  • これは、簡単に考えられますが、ソースコードに移動するのは難しいという問題です.

    実装タイプの例

  • アルゴリズムは簡単ですが、コードが長すぎる問題
  • の実数演算を処理する特定の小数点以下の桁数に出力する必要がある問題
  • .
  • 文字列が特定の基準に従って切断され、処理する必要がある問題
  • 適切なライブラリを検索して使用する必要があります-すべてのシーケンスとすべての組合せの問題
  • インプリメンテーション


    一般に,アルゴリズム問題における二次元空間は行列の意味として用いられる.
    たとえば、2 Dマップ内の座標に存在するキャラクタが位置に繰り返し移動する場合、マトリクスの概念を適切に解決する必要があります.
  • 行列:2 Dデータを表のような役割として簡単に表示できる数学的概念.(Pythonでは2 Dリスト)

  • シミュレーションと完全探索問題では,二次元空間における方向ベクトルがしばしば用いられる.
    # 동, 북, 서, 남
    dx = [0, -1, 0, 1]
    dy = [1, 0, -1, 0]
    
    # 현재 위치
    x, y = 2, 2
    
    for i in range(4):
        # 다음 위치
        nx = x + dx[i]
        ny = y + dy[i]
        print(nx, ny)
    
        # 2 3 동
        # 1 2 북
        # 2 1 서
        # 3 2 남

    上下左右の問題.


    旅行家AはNxNサイズの正方形空間に立っている.始点座標は常に(1,1)上、下、左、右方向に移動できます.
    <移動計画書>
    行置き書きを基準に、L、R、U、Dの1文字を繰り返し書きます.
    入力条件
  • の第1行は、空間サイズを表すNを与える.(1 <= N <= 100)
  • 行は旅行家Aが移動する計画書の内容を示した.(1<=移動回数<=100)
  • しゅつりょくじょうけん
  • の最初の行では、スペースを基準に、旅行者Aが最終的に到着した場所の座標(X,Y)を別々に印刷します.
  • # N 입력 받기
    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を入力する場合は、0時00分00秒からN時59分59秒までのすべての時刻のうち、1つの時刻だけが3を含む場合でも、プログラムを作成します.
    入力条件
  • 第1行は整数Nを入力する.(0 <= N <= 23)
  • しゅつりょくじょうけん
  • 00時00分00秒からN時59分59秒までの全時刻において、3が1つでも全ての場合の数字が出力されます.
  • <ソリューション>
    すべての可能な角度から逐一計算して解決できる問題です.
    1日86400秒なので、00時00分00秒から23時59分59秒まで、すべて86400種類です.したがって,1の視点を増やし,3が含まれているかどうかを確認する.
  • このタイプを「完全ナビゲーション」問題タイプと呼ぶ.これは可能な場合にすべての数の探索方法を検査することである.
  • N = int(input(""))
    
    count = 0
    
    for k in range(N+1):
        for j in range(60):
            for i in range(60):
                if "3" in str(k) + str(j)+str(i):
                    count += 1
    
    print(count)

    王室の夜


    王室庭園とチェス盤は8×8座標平面です.ナイトは王室の庭の特定の部屋に立っている.ナイトはL字でしか移動できず、庭の外から出られません.
    特定の場所から次の2つの場合に移動できます.
    1.2つのセルを水平に移動し、1つのセルを垂直に移動
    2.垂直に2つのグリッドを移動し、水平に1つのグリッドを移動
    座標平面上にノードの位置が指定され、ノードが移動できる場合は、その数を出力します.

    入力条件
  • の最初の行に、現在の夜間店の位置座標を表す2つの文字列が入力されます.
  • しゅつりょくじょうけん
  • は、第1行の移動可能なナイト数を出力する.
  • point = input("")
    
    points = [point[0], point[1]]
    
    dx = [2, 2, -2, -2, 1, -1, 1, -1]
    dy = [1, -1, 1, -1, 2, 2, -2, -2]
    
    x, y = (ord(points[0])-ord('a') + 1), int(points[1])
    
    count = 0
    
    for i in range(8):
        nx = x + dx[i]
        ny = y + dy[i]
        if nx < 1 or ny < 1 or nx > 8 or ny > 8:
            continue
        count += 1
    
    print(count)
    

    文字列の再配置


    アルファベットの大分子と数字(0~9)からなる文字列を入力します.このとき、すべてのアルファベットを昇順に並べて出力し、後ろに助聴数字の値を付けて印刷します.
    ex) K1KA5CB7 -> ABCKK13
    入力条件
  • の最初の行には文字列Sがあります.(1<=S長<=10000)
  • .
    a = list(input(""))
    
    b = []
    sum = 0
    
    for i in a:
        if 65 <= ord(i) <= 90:  # i.isalpha()
            b.append(i)
        elif 48 <= ord(i) <= 57:
            sum += int(i)
    
    # b.sort()
    # for i in b:
    #     print(i, end="")
    # print(sum)
    
    b.sort()
    if sum != 0:
        b.append(str(sum))
    
    print(''.join(b))