처음에 조금 헤매긴 했는데 함수를 사용해서 간단하게 구현할 수 있었던 것 같다.
import sys
input = sys.stdin.readline
N = int(input())
def sum_until(list, i):
sum = 0
for j in range(i + 1):
sum += list[j]
return sum
nums = sorted(list(map(int, input().split())))
sum = 0
for i in range(len(nums)):
sum += sum_until(nums, i)
print(sum)
최소공배수를 구하는 3가지 케이스로 구현했다.
1. A가 B의 배수이거나 반대의 경우 큰 값이 최소공배수
2. A와 B의 약수가 없는 경우 A와 B를 곱한 값이 최소공배수
3. A와 B의 최대공약수를 구해서 A*B를 최대공약수로 나눈 값이 최소공배수
T = int(input())
ans = 0
for i in range(T):
A, B = map(int, input().split())
if B % A == 0:
print(B)
continue
elif A % B == 0:
print(A)
continue
C = B if B < A else A
D = 0
for j in range(2, C+1):
if A % j == 0 and B % j == 0:
d = j
if D == 0:
print(A*B)
continue
print(int((A*B) / D))
문제를 읽고나서 생각한 방법은 규칙을 찾아내는 것이었다. 이전 문제들에서 규칙을 알아내는 게 포인트였던 적이 많아서.. 하지만 현황판에 적힌 주제는 brute force였다. 브루트포스의 사전적 정의는 brute: 무식한 force: 힘 이다. 말 그대로 무식하게 모든 데이터를 탐색하는 기법이다. 강력한 장점은 무조건 원하는 값을 100% 얻을 수 있다는 점인데, 반대로 단점은 엄청난 크기나 양의 데이터를 탐색할 때 시간이 오래 걸린다는 점이다.
입력값으로 엄청 큰 값이 주어지는게 아니어서 그냥 단순하게, 무식하게 구현해보았다.
풀이:
숫자를 1부터 무한대로 반복하다가 666이 포함된 수마다 count를 증가시켜주는데, 이 count가 N과 같아지면 이 때 반복문을 종료시키고 당시 숫자가 정답이 된다.
N = int(input())
count = 0
i = 0
while N != count:
i += 1
if '666' in str(i):
count += 1
print(i)