[解答]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))
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])
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
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 = 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())))
Reference
この問題について([解答]PART 1しっかりした基本功(1~5回)), 我々は、より多くの情報をここで見つけました https://velog.io/@ohjiae/문제풀기-PART1.-튼튼한-기본기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol