BOJ

문제 링크 https://www.acmicpc.net/problem/1654 1654번: 랜선 자르기 첫째 줄에는 오영식이 이미 가지고 있는 랜선의 개수 K, 그리고 필요한 랜선의 개수 N이 입력된다. K는 1이상 10,000이하의 정수이고, N은 1이상 1,000,000이하의 정수이다. 그리고 항상 K ≦ N 이다. 그 www.acmicpc.net 문제 문제 풀이 이분 탐색으로 풀이를 하면 되는 문제이다. 길이를 기준으로 랜선의 개수를 결과내면 된다. 1을 시작값, 입력받은 길이 중 최댓값을 마지막값으로 하여 중간값을 정하고 해당 중간값으로 길이를 나누어 나온 개수를 합쳐 해당 개수가 요구받은 N값보다 작을 경우 중간값을 줄이기 위해 end 값을 mid - 1로, N값보다 클 경우 중간값을 늘리기 위해..
문제 링크 https://www.acmicpc.net/problem/1373 1373번: 2진수 8진수 첫째 줄에 2진수가 주어진다. 주어지는 수의 길이는 1,000,000을 넘지 않는다. www.acmicpc.net 문제 문제 풀이 처음에 제출했던 코드는 아래와 같다. n = input()[::-1] convert10 = 0 result = "" for i in range(len(n)): convert10 += int(n[i]) * (2 ** i) while convert10 != 0: result += convert10 % 8 convert10 //= 8 print(result[::-1]) 이렇게 직접 2진수를 10진수로 변환하고, 그것을 다시 8진수로 변환하는 코드를 짜서 제출했는데 수정을 계속 해..
문제 링크 https://www.acmicpc.net/problem/2745 2745번: 진법 변환 B진법 수 N이 주어진다. 이 수를 10진법으로 바꿔 출력하는 프로그램을 작성하시오. 10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를 www.acmicpc.net 문제 문제 풀이 1234(2)를 10진수로 변환하려 할 때 2^3 * 1 + 2^2 * 2 + 2^1 * 3 + 2^0 * 4 의 계산으로 변환된다. 이 원리를 활용해서 N을 입력받고 0부터 순서대로 B^(len(N) - 1)까지 곱해지는 것에 대해 for문으로 작성하였다. N, B = input().split() N = N[::-1] B = int(B) table = "012345678..
문제 링크 https://www.acmicpc.net/problem/11005 11005번: 진법 변환 2 10진법 수 N이 주어진다. 이 수를 B진법으로 바꿔 출력하는 프로그램을 작성하시오. 10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를 www.acmicpc.net 문제 문제 풀이 진법 변환 과정이 갑자기 기억이 안나서 헤맸다..ㅋㅋㅋ B진법으로 변환하려면 10진수 N을 숫자 B로 나머지가 0이 될 때까지 계속 나누어 나온 나머지를 저장하고 그 저장된 나머지를 반대로 표현하면 변환이 완료된 것이다. 이것을 코드로 표현하면 문제 풀이는 끝난다. 또 한가지 주의할 점은 10부터 35까지는 숫자 표현이 불가능하므로 미리 문자열에 알파벳을 저장해두어..
문제 링크 https://www.acmicpc.net/problem/9613 9613번: GCD 합 첫째 줄에 테스트 케이스의 개수 t (1 ≤ t ≤ 100)이 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있다. 각 테스트 케이스는 수의 개수 n (1 < n ≤ 100)가 주어지고, 다음에는 n개의 수가 주어진 www.acmicpc.net 문제 문제 풀이 t = int(input()) def gcd(a, b): if b == 0: return a else: return gcd(b, a % b) for _ in range(t): arr = list(map(int, input().split())) k = arr.pop(0) sum = 0 for i in range(k): for j in range(k)..
문제 링크 https://www.acmicpc.net/problem/1850 1850번: 최대공약수 모든 자리가 1로만 이루어져있는 두 자연수 A와 B가 주어진다. 이때, A와 B의 최대 공약수를 구하는 프로그램을 작성하시오. 예를 들어, A가 111이고, B가 1111인 경우에 A와 B의 최대공약수는 1이고, A www.acmicpc.net 문제 문제 풀이 유클리드 호제법을 사용해 나온 최대공약수에 대해 출력할 때 문자열 1을 최대공약수만큼 반복 출력하도록 한다. a, b = map(int, input().split()) if a < b: a, b = b, a while b != 0: a = a % b a, b = b, a print("1" * a)
문제 링크 https://www.acmicpc.net/problem/1934 1934번: 최소공배수 두 자연수 A와 B에 대해서, A의 배수이면서 B의 배수인 자연수를 A와 B의 공배수라고 한다. 이런 공배수 중에서 가장 작은 수를 최소공배수라고 한다. 예를 들어, 6과 15의 공배수는 30, 60, 90등이 있 www.acmicpc.net 문제 문제 풀이 t = int(input()) for i in range(t): a, b = map(int, input().split()) mul = a * b while b != 0: a = a % b a, b = b, a print(int(mul / a))
문제 링크 https://www.acmicpc.net/problem/2609 2609번: 최대공약수와 최소공배수 첫째 줄에는 입력으로 주어진 두 수의 최대공약수를, 둘째 줄에는 입력으로 주어진 두 수의 최소 공배수를 출력한다. www.acmicpc.net 문제 문제 풀이 유클리드 호제법을 이용하는 문제이다. 유클리드 호제법에서는 숫자 a, b가 있을 때, a를 b로 나눈 나머지와 b의 최대 공약수가 a와 b의 최대공약수 와 같다.기존 b를 a에 / a를 b로 나누어 나온 나머지를 b에 대입하는 과정을 반복하여b가 0이 나올 경우 a가 최대공약수가 된다. 예)(18, 12) => (12, 6) => (6, 0)b가 0이 되는 a값은 6이므로 6이 18과 12의 최대공약수가 된다. 최소공배수는 a, b의 곱..
YOONJELLY
'BOJ' 태그의 글 목록 (3 Page)