[백준] 17103, 11005, 2745 (파이썬)

Colacan·2022년 2월 1일
1

[백준]

목록 보기
16/43

오늘 알고리즘 풀이는 최대한 효율적으로 해나가려고 노력했다. 코드를 부분별로 바꿔보면서 어떤 방식이 가장 실행시간이 짧은지 고민해보았다. 반복문의 실행횟수를 줄이는 것과 같은 방식으로 문제에서 요구한 실행시간을 맞출 수 있었다.

백준 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)
profile
For DE, DA / There is no royal road to learning

0개의 댓글