문제

은민이는 4와 7을 좋아하고, 나머지 숫자는 싫어한다. 금민수는 어떤 수가 4와 7로만 이루어진 수를 말한다.

N이 주어졌을 때, N보다 작거나 같은 금민수 중 가장 큰 것을 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 N이 주어진다. N은 4보다 크거나 같고 1,000,000보다 작거나 같은 자연수이다.

출력

첫째 줄에 N보다 작거나 같은 금민수 중 가장 큰 것을 출력한다.

예제 입력 1 복사

100

예제 출력 1 복사

77

예제 입력 2 복사

75

예제 출력 2 복사

74

예제 입력 3 복사

5

예제 출력 3 복사

4

예제 입력 4 복사

474747

예제 출력 4 복사

474747

내 풀이:

import itertools

arr=[]

for i in range(1,7):
    a = list(map(''.join, itertools.product((['4','7']), repeat=i)))
    for j in a:
        arr.append(j)
       
arr=reversed(list(map(int, arr)))

n=int(input())

for i in arr:
    if i>n:
        continue
    print(i)
    break

#

브루트포스 6번째 문제만에 드디어 itertools를 찾아서 쓰게 되었다. 

4랑 7의 중복조합으로 만들 건데 한자릿수부터 6자릿수까지 따로 생각을 해서 조합을 구한다. 

그다음에 뭐 리스트를 정수형으로 만들고 큰 수부터 하나씩 n이랑 비교해서 n이랑 같거나 작아지는 순간 i를 출력한다.

 

#

이거는 백준 파이썬 기준 맞힌사람 2241명 중에서 열 번째라고 나오니까 뭔가 잘한 것 같음. 근데 뭐가 잘한 건지는 모르겠다.

 

if __name__ == '__main__':
    n = int(input())

    while True:
        flag = True
        for i in str(n):
            if i != '4' and i != '7':
                flag = False
                n -= 1
        if flag:
            print(n)
            break

#

다른 사람의 신기한 풀이

입력값 n부터 1 씩 빼가면서 모든 숫자가 4또는 7이 나올 때까지 for문을 돌리는 것이다. 내가 한 것처럼 하면 조합이랑 n이랑 비교하니까 비교할 게 많지는 않은데 이건 n부터 시작해서 모든 수, 그리고 그 수 안의 모든 자릿수를 살펴봐야 하니까 오래 걸리긴 할 것 같다.

 

'알고리즘 PS > BruteForce' 카테고리의 다른 글

백준 #1065 한수  (0) 2023.10.02
백준 #7568 덩치  (0) 2023.10.02
백준 #2309 일곱난쟁이  (2) 2023.08.31
백준 #1977 완전제곱수  (0) 2023.08.31
백준 #2231 분해합  (0) 2023.08.31

문제

왕비를 피해 일곱 난쟁이들과 함께 평화롭게 생활하고 있던 백설공주에게 위기가 찾아왔다. 일과를 마치고 돌아온 난쟁이가 일곱 명이 아닌 아홉 명이었던 것이다.

아홉 명의 난쟁이는 모두 자신이 "백설 공주와 일곱 난쟁이"의 주인공이라고 주장했다. 뛰어난 수학적 직관력을 가지고 있던 백설공주는, 다행스럽게도 일곱 난쟁이의 키의 합이 100이 됨을 기억해 냈다.

아홉 난쟁이의 키가 주어졌을 때, 백설공주를 도와 일곱 난쟁이를 찾는 프로그램을 작성하시오.

입력

아홉 개의 줄에 걸쳐 난쟁이들의 키가 주어진다. 주어지는 키는 100을 넘지 않는 자연수이며, 아홉 난쟁이의 키는 모두 다르며, 가능한 정답이 여러 가지인 경우에는 아무거나 출력한다.

출력

일곱 난쟁이의 키를 오름차순으로 출력한다. 일곱 난쟁이를 찾을 수 없는 경우는 없다.

예제 입력 1 복사

20
7
23
19
10
15
25
8
13

예제 출력 1 복사

7
8
10
13
19
20
23

내 풀이:

a=0

arr=[]
   
for i in range(9):
    b=int(input())
    arr.append(b)
    a+=b
   
c=a-100

for i in arr:
    for j in arr:
        if i+j==c and i!=j:
            arr.remove(i)
            arr.remove(j)
    if len(arr)==7:
        break
       

arr.sort()
for i in arr:
    print(i)

 

#

무려 다섯 번 틀리고 맞아버렸다. 

난쟁이 키 아홉 개중에서 합이 100이 되는 7개를 골라서 작은 순서대로 출력하는 문제.

 

#

한 줄에 한 명 씩, 아홉 개의 키를 입력 받고 a에 그 합을 저장. 

c는 a에서 얼마나 빠져야 100이 되는지, 그니까 빠져야 하는 난쟁이 둘의 키의 합을 의미함. 

아홉 중 돌아가면서 두 명 고르고 키 더해서 c와 같고 각각의 원소가 서로 다른 수면 두 명을 뺌. 

(여기서 고른 건 예외 없이 모든 조합을 돌았으니까 중복순열로 볼 수 있음)

(원래 했어야 하는 건 걍 조합.그러면 i!=j가 필요 없어지고 두 수가 순서만 바꿔서 다시 조합되는 중복도 없어짐)

근데 서로 다른 수를 더해서 c가 나오는 조합이 두 개 이상일 수 있으니 첫번째 조합이 빠지면 바로 전체 for문을 종료함.

arr 오름차순으로 배열하고 원소 한 줄에 한 개씩 출력

 

#

처음 두 번은 런타임 에러가 났는데 프린트 부분을

for i in range(7):
    print((sorted(arr))[i]) 이렇게 적어서 그렇다. 형식 오류인 듯하다.

 

#

그 다음에 세 번 더 틀린 이유

for i in arr:
    for j in arr:
        if i+j==c and i!=j:
            arr.remove(i)
            arr.remove(j)
            break

만약에 두 수의 합이 c인 값 두 개를 찾아서 리스트에서 제거를 했다면, 바로 안쪽 for 문을 탈출함. 그럼 바깥쪽 반복문이 남으니까 다음 i값에 대해서 j값이 처음부터 대입되고... 만약에 더해서 c가 나오는 조합이 두 개 이상이면 7난쟁이가 이미 됐는데도 난쟁이가 더 빠질 수 있음.

 

for i in arr:
    for j in arr:
        if i+j==c and i!=j:
            arr.remove(i)
            arr.remove(j)
        break

이건 그냥... 안쪽 for문에서 j한개 대입하면 if문 충족하든말든 안쪽 for문이 종료됨. 그러면 다음 i값으로 넘어가서 다시 첫번째 j를 대입하고 if문에 상관없이 바로 다음 i값으로 넘어가고... 의 반복.

 

for i in arr:
    for j in arr:
        if i+j==c and i!=j:
            arr.remove(i)
            arr.remove(j)
    if len(arr)==7:
        break

정답이 출력되는 코드: 그냥 c찾았다고 break를 하지 말고, 만약에 난쟁이가 7명이 되면 그때 안쪽, 바깥쪽 for문을 같이 break하겠다. 라는 코드이다. 

끝.

 

n = 9
arr = [int(input()) for _ in range(n)]
arr.sort()
 
for i in range(n):
    for j in range(i+1, n):
        if sum(arr) - (arr[i] + arr[j]) == 100:
            for k in range(9):
                if i == k or j == k:
                    continue
                print(arr[k])
            exit()
 
print('\n'.join(map(str, arr)))

남의 풀이 1

n = 9
temp1, temp2 = 0, 0
arr = [int(input()) for _ in range(n)]
 
for i in range(n):
    for j in range(i+1, n):
        if sum(arr) - (arr[i] + arr[j]) == 100:
            temp1 = arr[i]
            temp2 = arr[j]
 
arr.remove(temp1)
arr.remove(temp2)
 
print('\n'.join(map(str, sorted(arr))))

#

남의 풀이 2

import itertools
arr = []

for i in range(9):
    arr.append(int(input()))

for i in itertools.combinations(arr,7):
  if sum(i) == 100:
    for j in sorted(i):
        print(j)
    break

#

남의 풀이 3

엄청 많은 사람들이 itertools로 풀었다. 여기서는 조합 combination을 써먹으면 됨. 이건 어제 배웠으니 앞으로 잘 써먹어야겠다.

 

'알고리즘 PS > BruteForce' 카테고리의 다른 글

백준 #7568 덩치  (0) 2023.10.02
백준 #1526 가장 큰 금민수  (0) 2023.08.31
백준 #1977 완전제곱수  (0) 2023.08.31
백준 #2231 분해합  (0) 2023.08.31
백준 #2798 블랙잭  (0) 2023.08.31

문제

M과 N이 주어질 때 M이상 N이하의 자연수 중 완전제곱수인 것을 모두 골라 그 합을 구하고 그 중 최솟값을 찾는 프로그램을 작성하시오. 예를 들어 M=60, N=100인 경우 60이상 100이하의 자연수 중 완전제곱수는 64, 81, 100 이렇게 총 3개가 있으므로 그 합은 245가 되고 이 중 최솟값은 64가 된다.

입력

첫째 줄에 M이, 둘째 줄에 N이 주어진다. M과 N은 10000이하의 자연수이며 M은 N보다 같거나 작다.

 

출력

M이상 N이하의 자연수 중 완전제곱수인 것을 모두 찾아 첫째 줄에 그 합을, 둘째 줄에 그 중 최솟값을 출력한다. 단, M이상 N이하의 자연수 중 완전제곱수가 없을 경우는 첫째 줄에 -1을 출력한다.

예제 입력 1 복사

60
100

예제 출력 1 복사

245
64

예제 입력 2 복사

75
80

예제 출력 2 복사

-1

 

내 풀이:

m=int(input())
n=int(input())

arr=[]

for i in range(1,101):
    i*=i
    if i>=m and i<=n:
        arr.append(i)
a=0
       
for i in arr:
    a+=i
   
if len(arr)>=1:
    print(a)
    print(arr[0])  
else: print('-1')

#

m,n을 정수형으로 입력받음. M과 N은 10000이하의 자연수 이므로, 

1부터 100까지의 자연수 i에 대해서 i*i가 m이랑 n사이에 있으면 arr이라는 리스트에 i의제곱수를 넣음.

리스트에 있는 수들의 합과 최솟값 출력

 

#

지금 보니까 이것도 합 구할 떄 sum(map(int,str(i)))이거 썼어도 됐겠다.

 

m=int(input())
n=int(input())
num=[]

i=1
while i**2<=n:
    if m<=i**2:
        num.append(i**2)
    i=i+1
if num==[]:
    print(-1)
else:
    print(sum(num))
    print(num[0])

# 다른 사람 풀이

m,n을 정수형으로 입력 받음.

1로 시작하는 i의 제곱이 b보다 작거나 같은 동안, 그게 a보다 크거나 같으면 num이라는 리스트에 i의 제곱수를 넣음.

( i*i라고 하는 대신 이 사람은 i**2라 표혔했음. 제곱하는 수가 커질 수록 저렇게 하는 게 맞긴 함. )

그리고 if조건을 만족시키든 그렇지 않든, while문 한번 돌 때마다 i에 1씩 더함. 

만약 while문이 끝났는데 num이라는 리스트에 원소가 하나도 없으면 -1을 출력, 그게 아니라면 합과 최솟값을 출력.

 

#

이렇게 하면 시간이 좀 덜 걸리는 이유가 뭘까?

1부터 101까지 다 안 보고 m보다 큰 수 나오면 while문이 끝나서?

그럼 나처럼 굳이 for문을 써야겠다면 range를 1,n 이렇게 했으면 훨씬 간단할 뻔했다. (if문 조건도 간단해지니까)

sum함수도 이제 쓸 수 있으면 써야겠다.

 

m = int(input())
n = int(input())
 
num = []
for i in range(m, n+1):
    root = int(i ** 0.5)
    if i == root ** 2:num.append(i)
 
if num == []:
    print(-1)
else:
    print(f'{sum(num)}\n{min(num)}')

#

이건 제곱수를 구한 게 아니라 m과 n의 제곱근을 구하는 방식. 음... 문제 조건에 입력값 범위가 명시되어있지 않았다면 이렇게 해야할 것 같다.

m과 n 사이의 수에 대하여 i의 제곱근은 root

i가 root의 제곱과 같다면 num리스트에 append해라? 이게 이해가 안됐는데 이제 알았다.

출력은 뭐 다 비슷하게 했다.

 

'알고리즘 PS > BruteForce' 카테고리의 다른 글

백준 #1526 가장 큰 금민수  (0) 2023.08.31
백준 #2309 일곱난쟁이  (2) 2023.08.31
백준 #2231 분해합  (0) 2023.08.31
백준 #2798 블랙잭  (0) 2023.08.31
백준 #2501 약수 구하기  (0) 2023.08.27

문제

어떤 자연수 N이 있을 때, 그 자연수 N의 분해합은 N과 N을 이루는 각 자리수의 합을 의미한다. 어떤 자연수 M의 분해합이 N인 경우, M을 N의 생성자라 한다. 예를 들어, 245의 분해합은 256(=245+2+4+5)이 된다. 따라서 245는 256의 생성자가 된다. 물론, 어떤 자연수의 경우에는 생성자가 없을 수도 있다. 반대로, 생성자가 여러 개인 자연수도 있을 수 있다.

자연수 N이 주어졌을 때, N의 가장 작은 생성자를 구해내는 프로그램을 작성하시오.

입력

첫째 줄에 자연수 N(1 ≤ N ≤ 1,000,000)이 주어진다.

출력

첫째 줄에 답을 출력한다. 생성자가 없는 경우에는 0을 출력한다.

예제 입력 1 복사

216

예제 출력 1 복사

198

 

내 풀이:

n=int(input())

b=0

for i in range(n):
    arr=list(map(int, str(i)))
    a=0
    for j in arr:
        a+=j
    if a+int(i)==n:
        print(int(i))
        b+=1
        break
if b==0:
    print('0')
 

#

0부터 n까지의 자연수에 대하여,,

각 자릿수를 원소로 하는 리스트로 만든다. 초기값 0인 a에다가 각자릿수를 하나씩 더하는 게 안쪽 for문의 내용이고, for문이 끝나면 각 자릿수의 합a에다가 그냥 i라는 숫자 그대로를 더해서 그게 n이랑 같다면 출력하고 b에 1 더하고 바깥쪽 for문에서 벗어나기.

만약 b가 0이면(한번도 생성자 출력 안했으면) 0을 출력한다.

쉽다고 생각하고 풀었다가 생성자 없는 경우 조건을 안 봐서 틀렸다. 문제는 잘 읽자 

 

#

다른 사람들보다 출력시간?이 개오래걸리는데 이유를 알아보자.

 

n = int(input()) 

for i in range(1, n+1): 
    num = sum((map(int, str(i)))) 
    num_sum = i + num  
    
    if num_sum == n:
        print(i)
        break
    if i == n:
        print(0)

#

쪼끔 더 빨리 돌아가는 다른 사람의 풀이

num = sum((map(int, str(i)))) 
num_sum = i + num  
이부분 때문에 쓸데없이 n을 리스트로 재정의하지도 않고, 원소 다 더하는데 for문 하나 더 쓰지도 않았다. 생성자가 없는 경우가 i==n인 경우라고 한 것도 다름.
N = input()
a= int(N) - 9*len(N)
b = int(N)

if a < 0:
    a = 0
   
for i in range(a,b):
    total = i + sum(map(int,str(i)))
    if total == int(N):
        print(i)
        break
    if i == b-1:
        print(0)

#

다른 사람이 푼 엄청 빨리 출력되는 풀이

 

일단 생성자는 a와 b사이에 있다고 먼저 설정함. a는 n에서 자릿수만큼 9를 뺀 값이고, b는 그냥 int(n)이다.

그래서 a와 b사이에서 조건을 만족하는 생성자가 나오면 그 값을 프린트한 후 바로 for문 종료(최솟값 구하는 거니까)

만약 a부터 b-1까지 다 돌았는데 생성자가 안 나왔으면 i=b-1일 것이다. 그러면 그냥 0을 출력함.

 

 

#chat gpt가 알려준 차이점

 

내 코드:

0부터 n까지의 모든 수에 대해 조건을 검사하고 조건을 만족하는 값을 찾아내기

0부터 n까지 모든 수에 대해 반복문을 돌리고 각 수마다 자릿수를 분리하고 더하는 작업 등 복잡한 연산을 수행

반복문 안에서 다른 조건문을 사용하여 조건을 만족하는 값을 찾으면 바로 반복문을 종료하고 출력하는데,

이는 검사해야 하는 모든 수에 대해 조건을 검사하는 작업을 줄여주기 때문에 조금 더 최적화된 코드 구조?

 

마지막 코드:

주어진 조건을 만족하는 값을 찾아내기

입력 값 n에 대해서 범위를 제한하여 반복문을 돌림

각 숫자에 대해 연산을 수행하는 데 필요한 작업이 상대적으로 적음

'알고리즘 PS > BruteForce' 카테고리의 다른 글

백준 #1526 가장 큰 금민수  (0) 2023.08.31
백준 #2309 일곱난쟁이  (2) 2023.08.31
백준 #1977 완전제곱수  (0) 2023.08.31
백준 #2798 블랙잭  (0) 2023.08.31
백준 #2501 약수 구하기  (0) 2023.08.27

문제

카지노에서 제일 인기 있는 게임 블랙잭의 규칙은 상당히 쉽다. 카드의 합이 21을 넘지 않는 한도 내에서, 카드의 합을 최대한 크게 만드는 게임이다. 블랙잭은 카지노마다 다양한 규정이 있다.

한국 최고의 블랙잭 고수 김정인은 새로운 블랙잭 규칙을 만들어 상근, 창영이와 게임하려고 한다.

김정인 버전의 블랙잭에서 각 카드에는 양의 정수가 쓰여 있다. 그 다음, 딜러는 N장의 카드를 모두 숫자가 보이도록 바닥에 놓는다. 그런 후에 딜러는 숫자 M을 크게 외친다.

이제 플레이어는 제한된 시간 안에 N장의 카드 중에서 3장의 카드를 골라야 한다. 블랙잭 변형 게임이기 때문에, 플레이어가 고른 카드의 합은 M을 넘지 않으면서 M과 최대한 가깝게 만들어야 한다.

N장의 카드에 써져 있는 숫자가 주어졌을 때, M을 넘지 않으면서 M에 최대한 가까운 카드 3장의 합을 구해 출력하시오.

입력

첫째 줄에 카드의 개수 N(3 ≤ N ≤ 100)과 M(10 ≤ M ≤ 300,000)이 주어진다. 둘ㅜ

합이 M을 넘지 않는 카드 3장을 찾을 수 있는 경우만 입력으로 주어진다.

출력

첫째 줄에 M을 넘지 않으면서 M에 최대한 가까운 카드 3장의 합을 출력한다.

예제 입력 1 복사

5 21
5 6 7 8 9

예제 출력 1 복사

 

21

예제 입력 2 복사

10 500
93 181 245 214 315 36 185 138 216 295

예제 출력 2 복사

497

내 풀이:

n,m=map(int,input().split())

arr=list(map(int,input().split()))

arr_2=[]

for i in arr:
    for j in arr:
        for k in arr:
            if i+j+k<=m and i!=j and j!=k and k!=i:
                arr_2.append(i+j+k)
               
arr_2.sort(reverse=True)                
print(arr_2[0])
               

#

n,m은 숫자로, 카드에 적힌 수는 리스트로 입력받는다.

arr 안의 임의의 세 원소의 합이 m보다 작거나 같고, 세 수 모두 다른 수이면 arr_2라는 새로운 리스트에 그 합을 추가한다.

for문을 끝까지 돈 뒤 arr_2 리스트의 중복을 제거하고 거꾸로 정렬(=내림차순 됨)한 후 0번째 원소를 출력

 

#

i,j,k를 있는대로 다 더하면 세 수 모두 다를 때~라는 조건을 추가해야 하는데 i보다 큰 j, j보다 큰 k만 더하겠다고 하면 자동으로 조합의 경우의 수만 구할 수 있다.

 

 

n, m = map(int, input().split())
a = list(map(int, input().split()))
max = 0
for i in range(n - 2):
    for j in range(i + 1, n - 1):
        for k in range(j + 1, n):
            if a[i] + a[j] + a[k] > m:
                pass
            else:
                sum = a[i] + a[j] + a[k]
                if sum > max:
                    max = sum
print(max)

#남의 풀이 1

 

#

나랑 비슷한 방식으로 했는데 조건을 만족하는 수중에 최댓값을 구하는것까지 for문에 넣어버렸다.

위의 내 풀이보다 시간이 6분의 1밖에 안 걸렸는데 왜일까? 내 풀이는 있는 조건 만족할 때마다 append하는 시간, 리스트 sort하고 reverse하는 시간이 더 걸리는 거 아닐까

 

#

위에서 말한 범위 지정방식을 사용해서 장황한 조건을 안 써도 되는 코드이다.

 

from itertools import combinations

cond = list(map(int, input().split()))
nums = list(map(int, input().split()))

           
combi = list(combinations(nums, 3))
sum_combi=[sum(x) for x in combi if sum(x)<=cond[1]]

print(max(sum_combi))

# itertools 조합을 이용한 남의 풀이

 

#

이거 풀때는 itertools 라이브러리를 몰랐는데 3가지 카드로 이루어진 조합을 구한 다음에 조합끼리 더한 거랑 m을 비교하고 있다. 훨씬 간단한 방법인 건맞는데 그 형식 바꾸고 그런 걸 잘 다뤄야 할 수 있는 방법이다. 이사람은 sum이랑 max까지 써서 엄청 간단해보인다.

 

'알고리즘 PS > BruteForce' 카테고리의 다른 글

백준 #1526 가장 큰 금민수  (0) 2023.08.31
백준 #2309 일곱난쟁이  (2) 2023.08.31
백준 #1977 완전제곱수  (0) 2023.08.31
백준 #2231 분해합  (0) 2023.08.31
백준 #2501 약수 구하기  (0) 2023.08.27

문제

어떤 자연수 p와 q가 있을 때, 만일 p를 q로 나누었을 때 나머지가 0이면 q는 p의 약수이다. 

6을 예로 들면

  • 6 ÷ 1 = 6 … 0
  • 6 ÷ 2 = 3 … 0
  • 6 ÷ 3 = 2 … 0
  • 6 ÷ 4 = 1 … 2
  • 6 ÷ 5 = 1 … 1
  • 6 ÷ 6 = 1 … 0

그래서 6의 약수는 1, 2, 3, 6, 총 네 개이다.

두 개의 자연수 N과 K가 주어졌을 때, N의 약수들 중 K번째로 작은 수를 출력하는 프로그램을 작성하시오.

입력

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

출력

첫째 줄에 N의 약수들 중 K번째로 작은 수를 출력한다. 만일 N의 약수의 개수가 K개보다 적어서 K번째 약수가 존재하지 않을 경우에는 0을 출력하시오.

예제 입력 1 복사

6 3

예제 출력 1 복사

3

예제 입력 2 복사

25 4

예제 출력 2 복사

0

예제 입력 3 복사

2735 1

예제 출력 3 복사

1

 

내 풀이:

n,k=map(int,input().split())

a=[0]

for i in range(1,n+1):
    if n%i==0:
        a.append(i)
if len(a)-1<k:
    print(0)
else:      
    print(a[k])
       

#

n 과 k를 한 줄에 입력 받음.

for 문으로 1부터 n까지 모든 수를 n으로 나눠봐서, 나머지가 0인 애들은 리스트 a 에 원소로 추가함. 

리스트 a의 k번째 값을 프린트 함.

 

 

#

k번째로 작은 수는 리스트의 k+1번째에 있기 때문에 처음에 a의 첫번째 원소로 0을 넣어놓았다. 

그리고 0이 출력되도록 하는 경우에도, length가 k보다 작은 게 아니라 리스트에서 0을 제외한 length가 k보다 작아야 하므로 -1을 해 주었다. 

(이렇게 하지 말고 마지막에 print(a[k-1])을 하면 된다.. 근데 +1인지 -1인지 헷갈려서 그렇게 하지 않았다)

 

N, K = map(int, input().split())

A = 0

for i in range(1, N + 1):
    if N % i == 0:
        K -= 1
        if K == 0:
            A = i
            break

print(A)

# 남의 풀이

K번째 약수를 구하는 거니까 자연수를 1부터 N까지 넣으면서 약수가 나올 때마다 K-1을 했다. 

K가 0이 되면 A에 i 를 넣고 for문을 끝냄. 만약 k가 0이 안되면? (약수의 개수보다 k가 더 크면?) 그냥 A(0)을 출력한다.

 

 

 

 

'알고리즘 PS > BruteForce' 카테고리의 다른 글

백준 #1526 가장 큰 금민수  (0) 2023.08.31
백준 #2309 일곱난쟁이  (2) 2023.08.31
백준 #1977 완전제곱수  (0) 2023.08.31
백준 #2231 분해합  (0) 2023.08.31
백준 #2798 블랙잭  (0) 2023.08.31

+ Recent posts