오늘 알고리즘 풀이는 최대한 효율적으로 해나가려고 노력했다. 코드를 부분별로 바꿔보면서 어떤 방식이 가장 실행시간이 짧은지 고민해보았다. 반복문의 실행횟수를 줄이는 것과 같은 방식으로 문제에서 요구한 실행시간을 맞출 수 있었다.
백준 17103번 골드바흐 파티션
'''시간초과
from sys import stdin
def prime(num):
if num == 1 or num == 0:
return False
else:
for i in range(2, int(num ** 0.5)+1):
if num % i == 0:
return False
return True
prime_list = [prime(i) for i in range(1000001)]
T = int(stdin.readline())
for j in range(T):
N = int(stdin.readline())
count = 0
for k in range(N//2+1):
if prime_list[k]==True and prime_list[N-k]==True:
count+=1
print(count)
'''
# 오늘 가장 오래걸린 방식
import sys
T = int(sys.stdin.readline())
prime = [True for i in range(1000001)]
# 전체 리스트를 만들고 확인하는 방식이 효율적
prime[0] = prime[1] = False
for i in range(2, 1001):
for j in range(i*2, 1000001, i):
prime[j] = False
for i in range(T):
count = 0
N = int(sys.stdin.readline())
for j in range(2,int(N/2)+1):
if prime[j] and prime[N-j]:
count += 1
print(count)
백준 11005번 진법 변환 2
# 헤맸지만 생각보다 간단했던 문제
import sys
system = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" #10진법이면 9 까지, 36진법이면 Z까지 표현
N, B = map(int,sys.stdin.readline().split())
answer = ''
while N != 0:
answer += str(system[N % B])
N //= B
print(answer[::-1]) # 역순 정렬
백준 2745번 진법 변환
import sys
N, B = sys.stdin.readline().split()
system = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
count = 0
for i in range(0,len(N)):
index = system.find(N[len(N)-i-1])
count += index*int(B)**i
print(count)