목록알고리즘 문제 (57)
성장일기
두 자연수 A, B의 최대공약수를 GCD(A, B)라고 할 때, A와 B가 서로소면 GCD(A, B) = 1 두 자연수 A, B의 최소공배수를 LCM(A, B)라고 할 때, A와 B가 서로소면 LCM(A, B) = A x B 자연수 N이 주어질 때, N을 최소공배수로 하는 서로 자연수 쌍의 개수 출력 def gcd(a,b): #최대공약수 if b==0: return a else: return gcd(b,a%b) def lcm(a,b): #최소공배수 return (a*b)//gcd(a,b) def divisor(n): #약수 구하기(참조) n=int(n) divisor=[] divisor_back=[] for i in range(1,int(n**(1/2))+1): if n%i==0: divisor.appe..
AC는 R(뒤집기), D(버리기) 연산이 있는 함수 첫째 줄에 테스트케이스의 개수, 다음 줄에는 수행할 함수, 배열의 개수, 배열에 들어있는 수가 주어진다. 연산을 수행한 후 결과를 출력하라 🧨 이 문제를 3시간은 넘게 잡고있었다. 단순해 보였는데 시간초과, 런타임에러 다양하게 겪었다. ㅠㅠ,, 그래도 내 첫 골드문제!! from collections import deque n=int(input()) #테스트케이스의 수 for i in range(n): check=0 #R이 몇번 들어갔는지 체크하기 위하여 선언 length=0 #길이 error=False #에러여부 order=input().rstrip() #연산 명령 num=int(input().rstrip()) #배열 수 case=input().rst..
첫째 줄에 N의 약수의 개수, 두번째 줄에 약수가 모두 주어질 때, N을 구하는 프로그램 🧨약수가 모두 주어지니까 가장 작은 숫자랑 가장 큰 숫자랑 곱하면 된다 import sys input=sys.stdin.readline n=int(input().rstrip()) a=list(map(int,input().split())) if len(a)==1: print(a[0]*a[0]) else: a.sort() print(a[0]*a[-1]) #가장 작은 수*가장 큰 수 🎇약수의 개수가 한 개일 때, 곱해지지 않을까봐 따로 뺐는데, 그냥 if~else 문 없이 해도 출력이 가능 import sys input=sys.stdin.readline n=int(input().rstrip()) a=list(map(int..
입력받은 숫자들을 섞어 30의 배수가 되는 가장 큰 수 출력하기 존재하지 않으면 -1 출력 🧨1. 30의 배수 조건: 0이 존재하고, 각 자리의 합이 3의 배수 2. 자릿수만큼 10 곱해주기(시간초과) -> 그냥 join해주자(¬_¬ )(허탈) import sys input=sys.stdin.readline num=list(map(int,input().rstrip())) num=sorted(num,reverse=True) #내림차순 sorting # 30의 배수 : 모든 자리 수의 합이 3의 배수, 0이 하나 이상 #print(num) if 0 in num: #0이 리스트에 있고 if sum(num)%3==0: #3으로 나눠지면 temp=0 for i in range(len(num)-1): temp+= ..
S = A[0] × B[0] + ... + A[N-1] × B[N-1] 라고 할 때, S의 값을 가장 작게 만들기 위해 수를 재배열 S의 최솟값을 출력 첫째줄에 N 둘째 줄에 A에 들어있는 N개의 숫자 셋째 줄에 B에 들어있는 N개의 숫자 🎇a의 최솟값과 b의 최댓값을 곱한 후 리스트에서 삭제하는 방식으로 해결 🧨문제에 B는 재배열하면 안된다고 적혀있는데 재배열해도 풀린다. 재배열 안하고 푸는 법을 고민해보기 import sys input=sys.stdin.readline n=int(input().rstrip()) a=list(map(int,input().split())) b=list(map(int,input().split())) sum_ab=0 for i in range(n): sum_ab+=min(a..