코딩테스트를 위한 백준 문제 풀어보기
두 개의 자연수 N과 K가 주어졌을 때, N의 약수들 중 K번째로 작은 수를 출력하는 프로그램을 작성하시오.
첫째 줄에 N과 K가 빈칸을 사이에 두고 주어진다. N은 1 이상 10,000 이하이다. K는 1 이상 N 이하이다.
첫째 줄에 N의 약수들 중 K번째로 작은 수를 출력한다. 만일 N의 약수의 개수가 K개보다 적어서 K번째 약수가 존재하지 않을 경우에는 0을 출력하시오.
N, K = map(int, input().split())
result = 0
for i in range(1, N + 1):
    if N % i == 0:
        K -= 1
        if K == 0:
            result = i
            break
print(result)양의 정수 n이 주어졌을 때, 이를 이진수로 나타냈을 때 1의 위치를 모두 찾는 프로그램을 작성하시오. 최하위 비트(least significant bit, lsb)의 위치는 0이다.
첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, n이 주어진다. \((1 ≤ T ≤ 10, 1 ≤ n ≤ 10^6)\)
각 테스트 케이스에 대해서, 1의 위치를 공백으로 구분해서 줄 하나에 출력한다. 위치가 낮은 것부터 출력한다.
t = int(input())
for _ in range(t):
    n = int(input())
    b = bin(n)[2:]
    
    for i in range(len(b)):
        if b[::-1][i] == '1':
            print(i, end=' ')def my_bin(num):
    a = num//2
    b = num%2
    if a == 0:
        return '1'
    else:
        return my_bin(a)+str(b)N개의 정수가 주어진다. 이때, 최솟값과 최댓값을 구하는 프로그램을 작성하시오.
첫째 줄에 정수의 개수 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 N개의 정수를 공백으로 구분해서 주어진다. 모든 정수는 -1,000,000보다 크거나 같고, 1,000,000보다 작거나 같은 정수이다.
첫째 줄에 주어진 정수 N개의 최솟값과 최댓값을 공백으로 구분해 출력한다.
input()
l = list(map(int, input().split()))
high = low = l[0]
for i in l[1:]:
    if high < i:
        high = i
    if low > i:
        low = i
        
print(low, high)k = []
count=0
for _ in range(10):
    a,b = map(int, input().split())
    count = count-a+b
    k.append(count)
print(max(k))if n == 0:
    ans = 0
elif n == 1:
    ans = 1
else:
    f = [0,1]
    for i in range(n-1):
        nplus = sum(f)
        f[0]=f[1]
        f[1]=nplus
    ans = nplus
print(ans)h = []
for _ in range(9):
    h.append(int(input()))
from itertools import combinations
hs = combinations(h, 7)
for i in hs:
    if sum(i)==100:
        break
i=list(i)
i.sort()
for k in i:
    print(k)a, b = map(int, input().split())
# 직관적인 방법이지만 시간초과
for i in range(min(a,b), 0, -1):
    if a%i == 0 and b%i == 0:
        print(i)
        break
for j in range(max(a,b), (a*b)+1):
    if j%a == 0 and j%b == 0:
        print(j)
        break
    
# 유클리드 호제법
def gcd(a, b):
    while b > 0:
        a, b = b, a%b
        
    return a
def lcm(a, b):
    return a*b//gcd(a,b)
print(gcd(a,b))
print(lcm(a,b))n = int(input())
for i in range(n):
    l = list(map(int,input().split()))
    l.sort()
    print(l[-3])n = int(input())
l = list(map(int, input().split()))
for i in l:
    if i == 1:
        n -= 1
    else:
        for j in range(2, i):
            if i%j == 0:
                n -= 1
                break
print(n)a,b = map(int,input().split())
arr = [0]
for i in range(45):
    for j in range(i):
        arr.append(i)
print(sum(arr[a:b+1]))a = int(input())
b = int(input())
ans = []
for i in range(a, b+1):
    if i==1:
        pass
    else:
        ans.append(i)
        for j in range(2,i):
            if i%j == 0:
                del ans[-1]
                break
if len(ans) == 0:
    print(-1)
else:
    print(sum(ans))
    print(min(ans))For attribution, please cite this work as
nackta (2022, May 19). nackta blog: [백준 문제풀이] 기본기. Retrieved from https://nackta.github.io/til/2022-05-19-cotepart1/
BibTeX citation
@misc{nackta2022[백준,
  author = {nackta, },
  title = {nackta blog: [백준 문제풀이] 기본기},
  url = {https://nackta.github.io/til/2022-05-19-cotepart1/},
  year = {2022}
}