[파이썬] 백준 1026 : 보물 https://www.acmicpc.net/problem/1026 1026번: 보물 첫째 줄에 N이 주어진다. 둘째 줄에는 A에 있는 N개의 수가 순서대로 주어지고, 셋째 줄에는 B에 있는 수가 순서대로 주어진다. N은 50보다 작거나 같은 자연수이고, A와 B의 각 원소는 100보다 작거 www.acmicpc.net 실버 4 (이게 왜 실버4까지나?) 수학, 그리디 알고리즘, 정렬 접근 곱하기를 할때 가장 작은 값이 나오려면 작은 수는 큰 수와 서로 곱하도록 하면 된다. 그냥 단순하게 A는 오름차순, B는 내림차순해서 서로 곱하면 좋겠지만 B는 재배열 하지 말랬으니 B의 최댓값을 계속해서 갱신하는 방법으로 문제를 풀었다. 코드 풀이 import sys input = s..
[파이썬] 백준 5585 : 거스름돈 https://www.acmicpc.net/problem/5585 5585번: 거스름돈 타로는 자주 JOI잡화점에서 물건을 산다. JOI잡화점에는 잔돈으로 500엔, 100엔, 50엔, 10엔, 5엔, 1엔이 충분히 있고, 언제나 거스름돈 개수가 가장 적게 잔돈을 준다. 타로가 JOI잡화점에서 물건을 사 www.acmicpc.net 브론즈 2 그리디 알고리즘 접근 그리디 알고리즘의 가장 기본적인 문제이다. 거슬러야하는 돈을 단위가 큰 순서대로 리스트에 담고, 몫과 나머지를 적절히 활용하면 쉽게 구할 수 있다. 그리디 알고리즘은 최적의 해를 빠르게 구하기 위해 현재 상황에서 당장 좋은 것만 고르는 방법이다. 코드 풀이 import sys coins = [500, 100..
[파이썬] 백준 1837 : 암호제작 https://www.acmicpc.net/problem/1837 1837번: 암호제작 원룡이는 한 컴퓨터 보안 회사에서 일을 하고 있다. 그러던 도중, 원룡이는 YESWOA.COM 으로부터 홈페이지 유저들의 비밀키를 만들라는 지시를 받았다. 원룡이는 비밀 키를 다음과 같은 방법으로 www.acmicpc.net 브론즈 3 (이게 왜 브3??) 수학, 브루트포스, 큰 수 연산 접근방법 어떤수를 소인수분해하면 소수들의 곱으로 표현할 수 있다. 그 소수들 중 가장 작은 값이 K보다 작은지에 대한 여부를 확인해야 한다. 시행착오가 너무 많았다. p와 q가 소수라는 것 때문에 소인수분해를 하도록 했는데 시간초과가 계속해서 났다. 문제에서 요구하는 것은 입력받은 K값보다 작은 ..
[파이썬] 백준 3053 : 택시 기하학 https://www.acmicpc.net/problem/3053 3053번: 택시 기하학 첫째 줄에는 유클리드 기하학에서 반지름이 R인 원의 넓이를, 둘째 줄에는 택시 기하학에서 반지름이 R인 원의 넓이를 출력한다. 정답과의 오차는 0.0001까지 허용한다. www.acmicpc.net 브론즈 3 수학, 기하학 접근 개념 이해를 위해 나무위키를 참조했다. https://namu.wiki/w/%ED%83%9D%EC%8B%9C%20%EA%B8%B0%ED%95%98%ED%95%99 격자 좌표계에서 파란 점이 중심이라 할때, 중심을 기준으로 거리가 2인 지점을 빨간 점으로 표시하면 왼쪽 그림과 같다. 일반적으로 중심을 기준으로 같은 거리를 표시하면 통상적인 원의 형태를..
[파이썬] 백준 1676 : 팩토리얼 0의 개수 https://www.acmicpc.net/problem/1676 1676번: 팩토리얼 0의 개수 N!에서 뒤에서부터 처음 0이 아닌 숫자가 나올 때까지 0의 개수를 구하는 프로그램을 작성하시오. www.acmicpc.net 실버 4 수학 접근 입력받은 값이 N일때, N!을 구하고 맨 마지막 수가 0일 때만 특정 변수의 값이 1씩 오르도록 하고 마지막에 그 변수의 값을 출력한다. 코드1 import sys, math N = int(sys.stdin.readline()) f = math.factorial(N) cnt = 0 while True: if f % 10 == 0: cnt += 1 f = f // 10 else: print(cnt) break math..
[파이썬] 백준 1010 : 다리 놓기 https://www.acmicpc.net/problem/1010 1010번: 다리 놓기 입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다. 그 다음 줄부터 각각의 테스트케이스에 대해 강의 서쪽과 동쪽에 있는 사이트의 개수 정수 N, M (0 < N ≤ M < 30)이 주어진다. www.acmicpc.net 실버 5 수학, DP, 조합론 다리가 겹치지 않아야한다는 것은 중복을 허용하지 않고 순서에 상관없이 선택하는 것이므로 조합으로 풀어야 한다. nCm = m! // (m-n)! * n!이므로 이를 구현하면 간단하게 풀 수 있다. import sys def factorial(num): val = 1 for i in range(1, num+1): val *= i ..