鼻門ゴム(bj.1543号、8980号/lc.125号)


💻コーディングの問題を解く


🔎ひょうじゅんもんだい


#154.3.ドキュメントの検索<難易度:3>リス


質問:
「ドキュメント」と検索する「単語」を指定した場合に、重複しないようにプログラムを作成します.
ex.1)
Input:
ababababa
aba
Output:
2

質問に答える(Python)

s = input()
find = input()
index = 0
result = 0

while len(s) - index >= len(find):
    if s[index:index+len(find)] == find:
        result +=1
        index += len(find)
    else:
        index += 1
print(result)
文字列全体で検索する単語が最大数回現れると繰り返し判断します.
文字列全体で検索した文字は重複できないため、文字列のスライドを使用して重複を防止します.
検索する単語が文字列全体にわたって見つかった場合は、結果値を1に増やし、単語の最後のインデックス+1インデックスの位置から同じ文字を再検索します.
すべての場合、結果値に移動し、合計何個の単語を出力します.

#8980.速達<難易度:4>スマッシュ


質問:
村ごとに配送する荷物を箱に入れて送ります.本部は箱を送る村番号、箱を受け取る村番号、箱を送る箱の数を知っています.箱は同じ大きさです.トラックには最大で入れられる箱の数、つまりトラックの容量があります.このトラックを利用して、以下のすべての条件を満たす場合、できるだけ多くの箱を配送します.
条件1:トラックに箱を積むと、この箱は受け入れられた村でしか降りられません.
条件2:トラックは通った村に戻らない.
条件3:箱の中には一部しか配送できない場合があります.
村の数、トラックの容量、箱の情報(送信された村番号、受信された村番号、箱の数)を指定すると、1台のトラックが運ぶ最大の箱の数が得られるプログラムを作成します.しかし、受け取った村番号はいつも送信した村番号より大きい.

質問に答える(Python)

import sys

if __name__ == "__main__":
    n, c = map(int, sys.stdin.readline().split())
    m = int(sys.stdin.readline())
    box = [list(map(int, sys.stdin.readline().split())) for _ in range(m)]


    box.sort(key=lambda x:x[1])  

    answer = 0  
    remain = [c] * (n + 1)  

    for i in range(m):
        temp = c  
        for j in range(box[i][0], box[i][1]):
            temp = min(temp, remain[j])
        temp = min(temp, box[i][2])
        for j in range(box[i][0], box[i][1]):
            remain[j] -= temp
        answer += temp

    print(answer)
変数ボックスを格納している箱を到着時間の速い順に並べます.
次に、変数reserveに各位置の残りの空間を格納します.
文を送信するメッセージボックスの数でm回繰り返します.
村の個数、トラックの容量、箱情報(送信された村番号、受信された村番号、箱の個数)を与えると、1台のトラックが搬送できる最大箱数が得られる.

🔎Leetcode


#125.ValidPalindrome<難易度:4>リス


問題の説明:
これは、文字列が前に読むか後ろに読むか、同じ文字列なのか、返事なのかを探索する問題です.
返信はtrueまたはfalseを返します.
ex.1)
Input: s = "A man, a plan, a canal: Panama"
Output: true
Explanation: "amanaplanacanalpanama"is a palindrome.
ex.2)
Input: s = "race a car"
Output: false
Explanation: "raceacar"is not a palindrome.
△回文であることを確認するときは、特殊文字とスペースのほか、アルファベットのみを考慮します.
問題を解く(js)
var isPalindrome = function(s) {
    let arr = s.toLowerCase().split('').filter(a=>/[a-z0-9]/i.test(a));
    return arr.join('') === arr.reverse().join('');
};
arr変数で確認する文字列をすべて小文字に変更し、スペースを削除し、特殊文字を削除し、純アルファベットのみを残すように変更します.
次にarrを逆arrと比較する.
すべての特殊文字を条件として区別するかどうかを考えますが、他の人が解読した代表コードを確認することで、仕方があることがわかります.だから使いやすくて、特殊文字を外しました.
この問題は分かりやすいが,符号化に変換するのは難しい.
レビュー...
今のところプログラマーよりエンコーダに近いようです.
解決した問題をコードを書き直させると、コードを書くことができず、今のように解決しなければならないようです.
心の中では解題数の平方数で自分の実力を向上させたいと思っていますが、1、2日符号化して実力を向上させるという考えではなく、勉強を続けなければなりません.

<難易度>


-難易度1,2:Googleを使わずに直接答える質問
-難易度3:自分で解いたけど、グーグル化した問題
-難易度4,5:自分で解くことはできません.
やり直しの問題リンク
これからやる白俊問題リンク.