목록알고리즘 (193)
홍우진의 개발 일기장
문제 링크 https://www.acmicpc.net/problem/2670 2670번: 연속부분최대곱 첫째 줄은 나열된 양의 실수들의 개수 N이 주어지고, 그 다음 줄부터 N개의 수가 한 줄에 하나씩 들어 있다. N은 10,000 이하의 자연수이다. 실수는 소수점 첫째자리까지 주어지며, 0.0보다 크거나 www.acmicpc.net 풀이 코드 n = int(input()) nums = [float(input()) for _ in range(n)] for i in range(1, n): nums[i] = max(nums[i - 1] * nums[i], nums[i]) print("{:.3f}".format(max(nums))) 코드 해석 숫자들을 float 형식으로 nums 리스트에 저장합니다. 그 후 ..
문제 링크 https://www.acmicpc.net/problem/1059 풀이 코드 L = int(input()) S = list(map(int,input().split())) n = int(input()) S.sort() if n in S: print(0) else: min = 0 max = 0 for num in S: if num n and max == 0: max = num max -= 1 min += 1 print((n-min)*(max-n+1) + (max-n)) 코드 해석 (n보다 작은 수의 개수) * (n을 포함한 n보다 큰 수의 개수) + (n보다 큰 수의 개수) 라는 규칙을 적용한다. 먼저 수를 받은 후 리스트에 저장한다. 만약 리스트 안..
문제 링크 https://www.acmicpc.net/problem/10158 풀이 코드 w, h = map(int, input().split()) p, q = map(int, input().split()) t = int(input()) a = (p + t) // w b = (q + t) // h if a % 2 == 0: x = (p + t) % w else: x = w - (p + t) % w if b % 2 == 0: y = (q + t) % h else: y = h - (q + t) % h print(x, y) 코드 해석 가로와 세로를 따로 생각한다. 초기값에서 시간을 더한값을 격자의 길이로 나눈 나머지를 구하면 된다. 만약 나며지가 0이 아니면 그 값에서 격자의 길이를 뺀다.
문제 링크 https://www.acmicpc.net/problem/1940 1940번: 주몽 첫째 줄에는 재료의 개수 N(1 ≤ N ≤ 15,000)이 주어진다. 그리고 두 번째 줄에는 갑옷을 만드는데 필요한 수 M(1 ≤ M ≤ 10,000,000) 주어진다. 그리고 마지막으로 셋째 줄에는 N개의 재료들이 가진 고 www.acmicpc.net 풀이 코드 n = int(input()) m = int(input()) nums = list(map(int,input().split())) nums.sort() left, right = 0, len(nums) - 1 count = 0 while left < right: sum_num = nums[left] + nums[right] if sum_num < m: l..
문제 링크 https://www.acmicpc.net/problem/2491 2491번: 수열 0에서부터 9까지의 숫자로 이루어진 N개의 숫자가 나열된 수열이 있다. 그 수열 안에서 연속해서 커지거나(같은 것 포함), 혹은 연속해서 작아지는(같은 것 포함) 수열 중 가장 길이가 긴 것을 찾 www.acmicpc.net 풀이 코드 N = int(input()) arr = list(map(int, input().split())) cnt = 1 max_l = 1 for i in range(1, N): if arr[i-1] >= arr[i]: cnt += 1 else: cnt = 1 if max_l < cnt: max_l = cnt cnt = 1 for i in range(1, N): if arr[i-1]
문제 링크 https://www.acmicpc.net/problem/16395 16395번: 파스칼의 삼각형 파스칼의 삼각형은 이항계수를 삼각형 형태로 배열한 것인데, 블레즈 파스칼(1623-1662)을 따라 이름 붙여졌다. 단순한 형태로, 파스칼의 삼각형은 다음과 같은 방법으로 만들 수 있다. N번째 행 www.acmicpc.net 풀이 코드 data = [[1 for _ in range(i)] for i in range(1, 31)] for i in range(2, 30) : for j in range(1, i) : data[i][j] = data[i-1][j-1] + data[i-1][j] n, k = map(int, input().split()) print(data[n-1][k-1]) 코드 해석 ..
문제 링크 https://www.acmicpc.net/problem/1769 1769번: 3의 배수 문제가 잘 풀리지 않을 때, 문제를 바라보는 시각을 조금만 다르게 가지면 문제가 쉽게 풀리는 경험을 종종 해 보았을 것이다. 여러 가지 방법이 있지만 그 중 하나로 우리가 풀고 싶은 문제를 www.acmicpc.net 풀이 코드 def conversion(string, cnt): if len(string) > 1: cnt += 1 n = 0 for i in string: n += int(i) conversion(str(n), cnt) else: if int(string) % 3 == 0: print(cnt) print("YES") else: print(cnt) print("NO") if __name__ =..
문제 링크 https://www.acmicpc.net/problem/14490 14490번: 백대열 n과 m이 :을 사이에 두고 주어진다. (1 ≤ n, m ≤ 100,000,000) www.acmicpc.net 풀이 코드 n, m = map(int, input().split(':')) def gcd(a, b): while b > 0: tmp = a a = b b = tmp % b return a a = gcd(n, m) print('%d:%d' %(n // a, m // a)) 코드 해석 유클리드 호제법을 사용해 최대공약수를 구한 후, 각 값에 최대공약수를 나눠준 뒤 출력해준다.