[解答]PART 1しっかりした基本功(1~5回)


ペクジュン問題は基本からチェ・ドビンまで出題する。


準備運動第1部堅実な基本功


テストエンコーディングの準備をし、複数の問題を解決しようとします。 試験の練習問題はたくさんあるので、厳格に選んだ問題に従って順番に答えます。 今回習う問題の路線図はここです。 Covernantの路線図

1.薬液を得る(🥉 ブロンズ3層、2501 W)


質問する
ある自然数pとqがある場合、pがqで除算され、残りが0である場合、qはpの約数である.
6を例にとると、6の約数は1、2、3、6で、全部で4つである.
2つの自然数NとKが与えられた場合、Nの約数の中で最小の数Kを出力するプログラムを作成します.
入力
最初の行では、NとKはスペースを隔てて与えられる.Nは1以上10000以下である.Kは1以上N以下である.
しゅつりょく
第1行は、Nの約数のうちK番目の小数を出力する.Nの約数がK個未満であるため、K番目の約数が存在しない場合は、0を出力します.
🙋‍♀️ 説明する
N, K = map(int,input().split())
k_list = []
for q in range(1,N+1):
    if (N%q == 0) : k_list.append(q)
try : print(k_list[K-1])
except : print(0)
👩‍💻 他人の草
a, b = map(int, input().split())
c = [i for i in range(1, a+1) if a%i==0]
print(0 if len(c)<b else c[b-1])

2.バイナリ数(🥉 ブロンズ3階、sane 2710人)


質問する
正の整数nが与えられた場合、バイナリで表される1のすべての位置を検索するプログラムを作成します.最下位ビット(最小有効ビット、lsb)の位置は0である.
入力
第1行は、試験例の個数Tを与える.各試験例は1行からなり、nは与えられる.(1 ≤ T ≤ 10, 1 ≤ n ≤ 106)
しゅつりょく
各テストケースについて、1の位置はスペースで区切られ、1行に出力されます.位置の低さから出力を開始します.
🙋‍♀️ 説明する
T = int(input())
for _ in range(T):
    n = bin(int(input()))[2:]
    for i in range(len(n)):
        if n[::-1][i] == '1':
            print(i, end = ' ')
1
13
0 2 3 
👩‍💻 他人を解く
T = int(input())
for _ in range(T):
    n = bin(int(input()))[2:]
    for i in range(len(n)):
        if n[-i - 1] == '1':  # 이부분 다른 방법 (거꾸로 하나씩 세기)
            print(i, end = ' ')
1
13
0 2 3 

3.最小、最大(🥉 ブロンズ3層、3460番)


質問する
N個の整数を与える.このとき、最高価格と最低価格を求めるプログラムを作成してください.
入力
第1行は整数の個数N(1≦N≦1000000)を与える.2行目はN個の整数をスペースで区切ります.すべての整数は-10000以上、1000000以下です.
しゅつりょく
1行目に与えられる整数N個の最切り上げと最切り上げは、スペースで区切られて出力される.
🙋‍♀️ 説明する
from sys import stdin
N = int(input())
all = list(map(int,stdin.readline().split()))
print(all,min(all), max(all))
# 주피터는 오류지만 백준은 정답
👩‍💻 他人の草
import sys
_, *n = map(int, sys.stdin.read().split())
print(min(n),max(n))
  • 入力例
    5
    20 10 35 30 7
  • 📌 整数Nと次の行の整数を受け取るときに役立つコード📌_, *n = map(int, sys.stdin.read().split())89 readline()私が作ったようにlistを使わないとエラーになります.
    ただしこの場合は1行なので、リストXを作成する必要があります

    4.インテリジェントカー2(🥉 ブロンズ3層、10818層)


    質問(質問が長いので、リンクサイトで確認することをお勧めします)
    最近開発されたスマート列車は、1駅(出発駅)から10駅(終点駅)まで10駅の路線で運行されている.この列車には上下の人数を自動的に認識する装置がある.この装置を利用して、出発駅から終点駅までの途中で、列車の中で最も人が多い時の人数を計算します.しかし、この列車を利用する人は秩序意識が強く、駅で列車に乗るとき、降りる人はみな降りてから列車に乗ると仮定している.
    入力
    各駅下車人数と乗車人数の間にスペースをあけて、1列目から10列目まで逆順に1行ずつ.
    しゅつりょく
    最初の行は最大人数を出力します.
    🙋‍♀️ 説明する
    import sys
    train = [0]
    for _ in range(10):
        i,j = map(int,sys.stdin.readline().split())
        train.append(train[-1] - i + j)
    print(max(train))
    👩‍💻 他人の草
    import sys
    
    current=0
    maxpass=0
    for i in range(10):
        A,B=map(int,sys.stdin.readline().split())
        current-=A
        current+=B
        if maxpass<current : maxpass=current
    print(maxpass)
    あまり悪くないように見えますが...52ミリ秒、私のコード(72ミリ秒)より速い!
    この人の直接比較で置き換えると、maxpassには1つの値しか残っていません.
    私のはappendだからですか?
    上をベースにして直すともっと早くなりますか?ゞ❌❌变慢...ゞ76ms
    import sys
    train = 0
    max_n = 0
    for _ in range(10):
        i,j = map(int,sys.stdin.readline().split())
        train = train-i+j
        if max_n<train : max_n = train
    print(max_n)

    5.フィボナッチ数5(🥉 ブロンズ第2層


    質問する
    フィボナッチ数は0と1で始まる.0番目のフィボナッチ数は0で、1番目のフィボナッチ数は1です.2番目から前の2つのフィボナッチ数の和です.
    このようにしてFn=Fn−1+Fn−2(n≧2)となる.
    n=17までは、次のようにフィボナッチ数を用いる.
    0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597
    nが与えられると,n次フィボナッチ数を求めるプログラムを記述する.
    入力
    最初の行はnです.nは20以下の自然数または0である
    しゅつりょく
    1行目はn番目のフィボナッチ数を出力する.
    🙋‍♀️ 説明する
    最初はそうしていたが、白俊は間違っていた.
    しかし鼻音で再生すると、正しいフィボナッチ数が得られます.0番が間違っていましたが…1日からが正しいから間違ってるのかな?
    n = int(input())
    fib = [0,1,1]
    for i in range(n-1):
        fib[2] = fib[0]+fib[1]
        fib[0] = fib[1]
        fib[1] = fib[2]
    print(fib[2])
    だから変えました.これが正解
    n = int(input())
    fib = [0,1]
    for i in range(2,n+1):
        num = fib[i-1]+fib[i-2]
        fib.append(num)
    print(fib[n])
    👩‍💻 他人を解く
    私がするコードに最も近いコード2460番
    def p(n):
        x=0
        y=1
        for i in range(n):
            x,y=y,x+y;
        return x
    a=int(input())
    print(p(a))
    再帰関数のコードを使用します.クレバー...🤓✨
    def r(x):
        if x < 2: return x
        return r(x-1)+r(x-2)
    print(r(int(input())))