[Python/백준] [기초문제]

2021. 11. 10. 18:00·코딩테스트/백준[Python]

[약수구하기]-2501번

 

2501번: 약수 구하기

첫째 줄에 N과 K가 빈칸을 사이에 두고 주어진다. N은 1 이상 10,000 이하이다. K는 1 이상 N 이하이다.

www.acmicpc.net

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번

 

3460번: 이진수

양의 정수 n이 주어졌을 때, 이를 이진수로 나타냈을 때 1의 위치를 모두 찾는 프로그램을 작성하시오. 최하위 비트(least significant bit, lsb)의 위치는 0이다.

www.acmicpc.net

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번

 

10818번: 최소, 최대

첫째 줄에 정수의 개수 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 N개의 정수를 공백으로 구분해서 주어진다. 모든 정수는 -1,000,000보다 크거나 같고, 1,000,000보다 작거나 같은 정수이다.

www.acmicpc.net

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번

 

2460번: 지능형 기차 2

최근에 개발된 지능형 기차가 1번역(출발역)부터 10번역(종착역)까지 10개의 정차역이 있는 노선에서 운행되고 있다. 이 기차에는 타거나 내리는 사람 수를 자동으로 인식할 수 있는 장치가 있다.

www.acmicpc.net

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번

 

10870번: 피보나치 수 5

피보나치 수는 0과 1로 시작한다. 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1이다. 그 다음 2번째 부터는 바로 앞 두 피보나치 수의 합이 된다. 이를 식으로 써보면 Fn = Fn-1 + Fn-2 (n ≥ 2)가

www.acmicpc.net

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번

 

2609번: 최대공약수와 최소공배수

첫째 줄에는 입력으로 주어진 두 수의 최대공약수를, 둘째 줄에는 입력으로 주어진 두 수의 최소 공배수를 출력한다.

www.acmicpc.net

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번

 

2693번: N번째 큰 수

첫째 줄에 테스트 케이스의 개수 T(1 ≤ T ≤ 1,000)가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 배열 A의 원소 10개가 공백으로 구분되어 주어진다. 이 원소는 1보다 크거나 같고, 1,000

www.acmicpc.net

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번

 

1978번: 소수 찾기

첫 줄에 수의 개수 N이 주어진다. N은 100이하이다. 다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다.

www.acmicpc.net

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으로 그 갯수들을 더해줬다.

728x90

'코딩테스트 > 백준[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
'코딩테스트/백준[Python]' 카테고리의 다른 글
  • [Python/백준] #1062 - [가르침] [try_again]
  • [Python/백준] #14719 - [빗물]
  • [Python/백준] #14888 - [연산자 끼워넣기] / #2504 -[괄호의 값]
  • [Python/백준] #1292 - [쉽게푸는문제] / #2581 -[소수]
창빵맨
창빵맨
  • 창빵맨
    Let's be Developers
    창빵맨
    로그인/로그아웃
  • 전체
    오늘
    어제
    • 분류 전체보기 (471)
      • 알쓸신잡 (79)
      • ML & DL (85)
        • Computer v.. (22)
        • NLP (22)
        • 파이썬 머신러닝 완.. (3)
        • 개념정리 (38)
      • 리눅스 (21)
      • 프로젝트 (29)
        • 산불 발생 예측 (6)
        • 음성비서 (12)
        • pdf 병합 프로그.. (0)
        • 수위 예측 (5)
        • 가짜 뉴스 분류 (5)
        • 전력사용량 예측 (1)
      • 코딩테스트 (217)
        • 프로그래머스[Pyt.. (17)
        • 프로그래머스[Fai.. (3)
        • 백준[Python] (160)
        • 이것이취업을위한코딩.. (18)
        • 파이썬 알고리즘 (19)
      • 데이터분석실습 (25)
        • 데이터 과학 기반의.. (18)
        • 헬로 데이터 과학 (7)
      • 메모장 (0)
      • 잡담 (4)
  • Personal

    GITHUB
    Instagram
  • 공지사항

  • 인기 글

  • 태그

    백준
    파이썬
    나동빈
    이것이취업을위한코딩테스트다
    이분탐색
    BFS
    그리디
    dp
    DFS
    이코테
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3

HOME

HOME

상단으로

티스토리툴바