11. 온보딩 알고리즘 사전스터디 6일차

코이그·2023년 3월 11일

항해99

목록 보기
10/54

스파르티코딩클럽 알고리즘 강의

페어 프로그래밍

문제풀이

1. ATM

처음에 조금 헤매긴 했는데 함수를 사용해서 간단하게 구현할 수 있었던 것 같다.

  1. 입력받은 값의 리스트를 바로 정렬 후 nums에 저장
  2. 리스트를 순회하면서 sum에 nums의 0번째부터 i번째 인덱스들 값의 합을 더함

전체 코드

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)

2. 최소공배수

최소공배수를 구하는 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))

3. 영화감독 숌

전체 코드

문제를 읽고나서 생각한 방법은 규칙을 찾아내는 것이었다. 이전 문제들에서 규칙을 알아내는 게 포인트였던 적이 많아서.. 하지만 현황판에 적힌 주제는 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)
profile
COYG🔴⚪

0개의 댓글