[약수구하기]-2501번
My answer
divisor=[]
N,k=input().split()
N=int(N)
k=int(k)
for i in range(1,N+1):
if(N%i==0):
divisor.append(i)
if(len(divisor)<k):
print(0)
else:
print(divisor[k-1])
Another answer
N,K=map(int,input().split())
divisor=[i for i in range(1,N+1) if(N%i==0)]
if(len(divisor)<k):
print(0)
else:
print(divisor[k-1])
map(f, iterable)은 함수(f)와 반복 가능한(iterable) 자료형을 입력으로 받는다. map은 입력받은 자료형의 각 요소를 함수 f가 수행한 결과를 묶어서 돌려주는 함수이다. 내 코드와 아래코드와의 차이점은 우선 N,k를 map을 이용해서 한번에 표현하였고 약수집합 divisor도 간단하게 구현한 것이다.
[이진수]-3460번
My answer
k=int(input())
for i in range(k):
N=int(input())
tmp=bin(N)[2:]
result=[len(tmp)-1-i for i in range(len(tmp)) if(tmp[i]=='1')]
result.reverse()
for i in result: print(i,end=" ")
tmp=[]
result=[]
Another answer
k=int(input())
for i in range(k):
N,idx=int(input()),0
while N:
if(N%2):print(idx,end=' ')
N//=2
idx+=1
------------------------------------
for _ in[0]*int(input()):
a,b=int(input()),0
while a:
if a%2:print(b,end=' ')
a//=2;b+=1
내 코드는 수 자체를 bin함수를 통해 이진수로 바꾼다음 1로 세주었지만, 아래코드는 문제의도 그대로 1의 위치만을 찾기위해 이진수로 변형하는게 아니라 그냥 나머지가 1인 자리를 구하는 방법으로 짰다.
그 아래 코드는 변수 _ 가 0, 1, 2, 3, 4 값을 가지고 반복을 수행한다
실제 사용되지는 않기 때문에 " _ " 를 사용함 => dummy variable
-인터프리터에서 마지막 값을 저장하고 싶을 때
-값을 무시하고 싶을 때
-변수나 함수 명에 특별한 의미 부여하고 싶을 때
-숫자 리터럴 값의 자릿수 구분을 위한 구분자로 사용할 때
[최소,최대]-10818번
My answer
k=int(input())
array=input().split()
array=[int(i) for i in array]
print(min(array),max(array))
Another answer
print(min(a:=[*map(int,[*open(0)][1].split())]),max(a))
stdin = open(0)
indata = list(stdin)
s = list(map(int, indata[1].split()))
print(min(s), max(s))
위 코드를 풀어서 쓰면 아래처럼 된다고 한다. open(0)으로 모든 stdin을 리스트로 만들고 그 중 [1]값 즉 숫자들을 split해서 s에 넣고 min과 max를 구한 것이다. 즉 내 코드에서 k와 n들을 따로 입력해준 것을 한번에 하기 위해서 쓴 것 같다. -도움을 주신 백준
bupjae 님 감사합니다 ㅠㅠ
[지능형기차2]-2460번
My answer
arr=[]
people,max=0,0
for i in range(10):
a,b=input().split()
arr.append(int(a))
arr.append(int(b))
for idx,i in enumerate(arr):
if(idx%2==0):
people-=i
else:
people+=i
if(max<people):
max=people
print(max)
Another answer
result=0
people=0
for i in range(10):
a,b=map(int,input().split())
people+=b-a
result=max(result,people)
print(result)
내가 문제를 잘못 이해한 것 같다. 나는 가는도중 사람이 가장 많을 때를 구하라해서 사람이 내리고 타기전에도 수를 비교해주고 했는데 다른 답들을 보니 정거장마다 사람 수를 비교하였다. 사람이 내리고 타고 비교하고 이런식으로.
[피보나치수5]-10870번
My answer
n=int(input())
pnum=[0,1]
if(n<2):
print(pnum[n])
else:
for i in range(2,n+1):
pnum.append(pnum[i-2]+pnum[i-1])
print(pnum[-1])
Another answer
a=0;b=1
for i in range(int(input())):
a,b=a+b,a
print(a)
나처럼 피보나치 수들을 배열에 넣은게 아니라 바로바로 갱신해줬다. 이게 메모리를 훨씬 덜 잡아먹을 듯..
[일곱 난쟁이]-2309번
My answer
arr=[]
for i in range(9):
arr.append(int(input()))
tmp=sum(arr)-100
for i in range(len(arr)-1):
for j in range(i+1,len(arr)):
if(arr[i]+arr[j]==tmp):
a,b=arr[i],arr[j]
arr.remove(a)
arr.remove(b)
arr.sort()
for k in arr:
print(k)
exit()
Another answer
a=[]
for i in range(9):a.append(int(input()))
for i in a:
b=sum(a)-i-100
if b in a and i!=b:a.remove(i);a.remove(b);break
a.sort()
for i in a:
print(i)
--------------------------------
import itertools as i
for s in i.combinations(map(int,open(0)),7):
if sum(s)==100:
print(*sorted(s));break
아래 코드중에서 위에껀 내 코드랑 똑같은 방법인데 훨씬 간단하게 했다;; 그 밑에 코드는 조합을 이용하여 풀었다. 조합으로 푸는 방법이 기억나긴했는데 함수가 기억이 안나서 못썼다. 그리고 저번에도 나온건데 open(0)은 읽은 전체를 받아들인다는 것이다.
[최대공약수와 최소공배수]-2609번
My answer
a,b=input().split()
a,b=int(a),int(b)
lcm,gcd=1,a*b
while(lcm!=0):
lcm=a%b
a,b=b,lcm
print(a)
print(int(gcd/a))
Another answer
a,b=map(int,input().split())
L=a*b
while b:
a,b=b,a%b
print(a,L//a)
똑같이 유클리드 호제법을 통해서 푼 문제인데, 아래가 더 간단하게 짰다.
[N번째 큰 수]-2693번
My answer
for i in range(int(input())):
tmp=input().split()
tmp=[int(i) for i in tmp]
tmp.sort()
print(tmp[-3])
tmp=[]
Another answer
for _ in range(int(input())):
print(sorted(map(int,input().split()))[-3])
[소수 찾기]-1978번
My answer
n=int(input())
result=0
tmp=list(map(int,input().split()))
for i in tmp:
cnt=0
for j in range(1,i+1):
if(i%j==0):
cnt+=1
if(cnt==2):
result+=1
print(result)
Another answer
input()
print(sum(all(i%j for j in range(2,i))for i in map(int,input().split())if i>1))
아래는 all()을 이용하여 조건에 해당하는 모든인자들이 참일 때만 1을 반환하고, sum으로 그 갯수들을 더해줬다.
'코딩테스트 > 백준[Python]' 카테고리의 다른 글
[Python/백준] #3085 -[사탕게임] (0) | 2021.11.19 |
---|---|
[Python/백준] #1062 - [가르침] [try_again] (0) | 2021.11.16 |
[Python/백준] #14719 - [빗물] (0) | 2021.11.15 |
[Python/백준] #14888 - [연산자 끼워넣기] / #2504 -[괄호의 값] (0) | 2021.11.12 |
[Python/백준] #1292 - [쉽게푸는문제] / #2581 -[소수] (0) | 2021.11.12 |