문제 2089번: -2진수 -2진법은 부호 없는 2진수로 표현이 된다. 2진법에서는 20, 21, 22, 23이 표현 되지만 -2진법에서는 (-2)0 = 1, (-2)1 = -2, (-2)2 = 4, (-2)3 = -8을 표현한다. 10진수로 1부터 표현하자면 1, 110, 111, 100, 101, 11010, 110 www.acmicpc.net 문제 풀이 처음에는 어떻게 구해야 하나 고민을 했는데, 가만히 생각해 보면 2진수를 계산하듯이 동일하게 계산하면 된다. 문제의 예시인 -13의 경우 다음과 같이 계산 된다. 코드 if __name__ == '__main__': num = int(input()) binary = '' if not num: print('0') exit() else: while nu..
문제 17103번: 골드바흐 파티션 첫째 줄에 테스트 케이스의 개수 T (1 ≤ T ≤ 100)가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 정수 N은 짝수이고, 2 < N ≤ 1,000,000을 만족한다. www.acmicpc.net 문제 풀이 골드바흐의 추측은 두 소수의 차가 가장 큰 것을 반환하는 것이므로 최초에 만족하는 소수를 찾은 경우 더 이상 진행하지 않고 중지하면 된다. 이와 달리 골드 바흐 파티션은 순서가 다른 소수 예를 들어 6인 경우 (1, 5) (5, 1)은 동일하게 취급하고 짝수가 주어 질 때 만족하는 개수를 반환하는 문제이다. from sys import stdin def is_prime(n): nums = [True] * n for i in range(2, int(n..
문제 17087번: 숨바꼭질 6 수빈이는 동생 N명과 숨바꼭질을 하고 있다. 수빈이는 현재 점 S에 있고, 동생은 A1, A2, ..., AN에 있다. 수빈이는 걸어서 이동을 할 수 있다. 수빈이의 위치가 X일때 걷는다면 1초 후에 X+D나 X-D로 이� www.acmicpc.net 문제 풀이 최대 공약수를 구할 수 있다면 쉽게 풀 수 있는 문제이다. 나의 위치와 동생들의 위치 차이를 계산한뒤, 전체의 위치에서 최대 공약수를 찾아서 반환하면 문제의 정답이 된다. 최대 공약수를 구할 때 세 수의 최대 공약수를 구한다고 하면 a, b에 대한 최대 공약수를 구하고, 구해진 최대 공약수와 c의 최대 공약수를 구하면 a, b, c의 최대 공약수와 같아진다. 이 성질을 활용하여 코드를 구현하면 간단하게 문제를 풀 ..
문제 2004번: 조합 0의 개수 첫째 줄에 정수 n, m(0≤m≤n≤2,000,000,000, n!=0)이 들어온다. www.acmicpc.net 문제 풀이 이 문제는 조합의 성질을 이해할 수 있어야 풀 수 있는 문제이다. 조합은 nCm이므로 n! / m! (n - m)!으로 계산 된다. 이때 n!, m!, (n - m)!에 대해 각각 2, 5로 나누어지는지 확인하고 카운트하면 된다. 그럼 실제 계산을 위해 n! 값들 중에 2, 5의 배수를 찾아야 할까? 아니다. 만약 9인 경우 2의 배수는 2 4 6 8로 4개가 되며, 5의 배수는 5 1개이므로 9 // 2, 9 // 5로 9!에 대한 각 배수들을 찾을 수 있다. 코드 def cnt(n, divisor): ret = 0 while n != 0: n ..