BAEKJOON : 1212, 2089, 17103
No. 1212
1. Problem
2. My Solution
- 첫 번째 방법 (직접 구현)
import sys
def oct_to_bin(oct_num):
result = ''
for i in oct_num:
temp = ''
while True:
a,b = divmod(i,2)
if a == 0:
temp += str(b)
temp += str(a)
break
else:
temp += str(b)
i = a
if len(temp) == 2:
temp += '0'
elif len(temp) == 4:
temp = temp.rstrip('0')
result += temp[::-1]
while result[0]=='0':
result = result.lstrip('0')
return result
oct_num = list(map(int,list(str(sys.stdin.readline().rstrip()))))
if oct_num[0] == 0:
print(0)
else:
print(oct_to_bin(oct_num))
- bin() 함수 이용
oct_num = int(sys.stdin.readline().rstrip(), 8)
print(bin(oct_num)[2:])
No. 2089
1. Problem
2. Others' Solutions
- 10진수를 2진수로 변환하는 원리를 그대로 이용
- 2로 계속 나누지 않고 -2로 나눔
import sys
n = int(sys.stdin.readline().rstrip())
if n == 0:
print(0)
exit()
result =''
while(True):
a,b = divmod(n,-2)
if n == 0:
break
elif n % -2:
result += '1'
n = n//-2 +1
else:
result += '0'
n //= -2
print(result[::-1])
3. Learned
- 10진수를 2진수로 변환하는 원리를 그대로 이용하자
-13 = -2*(7) + 1
7 = -2*(-3) + 1
-3 = -2*(2) + 1
2 = -2*(-1) + 0
-1 = -2*(1) + 1
1 = -2*(0) + 1
- 하지만 파이썬에서 음수로 나머지 연산을 수행하면 나머지가 무조건 양수가 나오지 않음 (C언어는 양수)
No. 17103
1. Problem
2. My Solution
- 에라토스테네스의 체 이용
- 같은 쌍 제거를 위해 n//2 까지만 판단
import sys
import math
test_n = int(sys.stdin.readline().rstrip())
prime = [False,False] + [True] * 999999
for i in range(2,int(math.sqrt(1000000))+2,1):
if prime[i] == False:
continue
else:
for j in range(i+i, 1000001, i):
prime[j] = False
for _ in range(test_n):
n = int(sys.stdin.readline().rstrip())
gold_num = []
for i in range(2, (n//2)+1, 1):
if prime[i] == True and prime[n-i] == True:
gold_num.append([i,n-i])
print(len(gold_num))
3. Others' Solutions
- prime 리스트에 소수만 append -> 시간 단축 3420ms -> 1264ms
import sys
input = sys.stdin.readline
nums = [1] * 1000001
prime = []
for i in range(2, 1000001):
if nums[i] == 0:
continue
prime.append(i)
for j in range(2*i, 1000001, i):
nums[j] = 0
for _ in range(int(input())):
n = int(input())
count = 0
for i in prime:
if i > n//2:
break
if nums[i] and nums[n-i]:
count += 1
print(count)
4. Learned
- 순서만 다르고 요소의 구성이 같은 쌍을 제거하기 위해 n//2 까지만 비교
- 시간을 최소로하는 방법도 추가적으로 생각해보자
n = 10 일 때
1 2 3 4 5 6 7 8 9 10 5를 기준으로 양쪽의 조합이 같음
Author And Source
이 문제에 관하여(BAEKJOON : 1212, 2089, 17103), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@codren/BAEKJOON-1212저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)