[これがコードテスト]12日目


▼▼緒論
昨日学んだ実装アルゴリズム(완전탐색시뮬레이션)タイプを再復習します.
▼▼本題왕실의 나이트アルゴリズムは2つの方法で解くことができ,今日の重点は本に言及されていない方法を解決することである.
まず、これは本のコードです.cases変数は、移動方向を示すコードである.
第1のコードはcases変数を宣言し、new_arraynew_rowを計算する際にdx = case[0]dy = case[1]と同じ役割を果たす.
data = input()
column = int(chr(ord(data[0]) - 48))
row = int(data[1])
count = 0

cases = [(-2, -1), (-2, 1), (2, -1), (2, 1), (-1, -2), (1, -2), (-1, 2), (1, 2)]

for case in cases:
    new_column = column + case[0]
    new_row = row + case[1]
    if new_column > 0 and new_row > 0 and new_column <= 8 and new_row <= 8:
        count = count + 1
        print(new_row, new_column)
print(count)
👉🏽 입력: al
👉🏽 출력: 2
2番目のコードは、dxdyを含むコードであり、casesで記述される.
アルゴリズムは、一般に、dxdyを宣言することによってアクセスされる.
data = input()
column = int(chr(ord(data[0]) - 48))
row = int(data[1])
count = 0

move_types = [True for _ in range(8)]
dx = [-2, -2, 2, 2, -1, 1, -1, 1]
dy = [-1, 1, -1, 1, -2, -2, 2, 2]

for i in range(len(move_types)):
    nx = column + dx[i]
    ny = row + dy[i]
    if nx > 0 and ny > 0 and nx <= 8 and ny <= 8:
        count = count + 1
print(count)
👉🏽 입력: al
👉🏽 출력: 2
次は白駿の브루트 포스型問題です.
📍 [質問]バージン・ブラックジャック(2798)
質問する
いろいろな解法がありますが、itertools -> combinationを採用しています.if result < sum(card) <= m:コードにresultを追加し、最小値から出力値を出力することができる.
結果として、最終的に得られた値をresultに保存すればよい.
これからはちゃんと使えると思います.
import itertools

n, m = map(int, input().split())
cards = list(map(int, input().split()))

result = 0

# 배열값을 큰 순으로 정렬하려면 result보다 크게 범위를 설정한다.
for card in itertools.combinations(cards, 3):
    if result < sum(card) <= m:
        result = sum(card)
print(result)
▼▼結論
実現アルゴリズムを2日間勉強しました
1つの問題をするたびに長い時間がかかった.
Baek Junでは,フェーズアルゴリズムでは関連する問題が多いが,いずれも問題であるため,進度が非常に遅い.
しかし、私は構造を完璧に理解してこそ、次の文に移行することができるので、ゆっくり歩いても、私はそれを完璧に理解しなければなりません.
アルゴリズムが難しいと思うたびに、諦めたいときは、少なくとも30日はやって、あきらめます.
とりあえず30日くらいしましょうそうなると実力が上がるでしょう.😎