알고리즘 공부

    [백준 1085번-파이썬/Python] 직사각형에서 탈출

    http://acmicpc.net/problem/1085 {코드} x, y, w, h = map(int, input().split()) print(min(x, y, w-x, h-y)) {설명} 주어진 직사각형은 x축, y축, x=w, y=h로 이루어졌습니다. 즉, 각 경계선까지의 거리는 주어진 x, y, w-x, h-y이므로 이중 가장 작은 값을 출력하면 된다.

    [백준 9020번-파이썬/Python] 골드바흐의 추측

    http://acmicpc.net/problem/9020 {코드} data = [int(input()) for _ in range(int(input()))] n = max(data) sieve = list(range(n+1)) sieve[0], sieve[1] = 0, 0 for i in range(2, n+1): if sieve[i]: for t in range(i+i, n+1, i): if sieve[t]: sieve[t] = 0 for n in data: p, q = n//2, n//2 while True: if sieve[p] and sieve[q]: print(p, q) break else: p -= 1 q += 1 {설명} 최대한 n을 이루는 수의 차가 작아야하므로 n의 절반에서 시작해서 n을..

    [백준 4948번-파이썬/Python] 베르트랑 공준

    http://acmicpc.net/problem/4948 {코드} sieve = [1]*246913 sieve[0] = 0 sieve[1] = 0 for i in range(2, 246913): if sieve[i]: for j in range(i+i, 246913, i): sieve[j] = 0 while True: n = int(input()) if n == 0: break print(sum(sieve[n+1:n*2+1])) {설명} 어떤 범위 안의 소수의 개수는 체에서 해당 범위의 1의 개수와 같고 이는 결국 해당 범위의 합과 같습니다.

    [백준 1929번-파이썬/Python] 소수 구하기

    http://acmicpc.net/problem/1929 {코드} def isPrime(n): if n

    [백준 2581번-파이썬/Python] 소수

    http://acmicpc.net/problem/2581 {코드} def isPrime(n): if n

    [백준 1978번-파이썬/Python] 소수 찾기

    http://acmicpc.net/problem/1978 {코드} def isPrime(n): if n

    [백준 1011번-파이썬/Python] Fly me to Alpha Centauri

    http://acmicpc.net/problem/1011 {코드} from math import sqrt for _ in range(int(input())): x, y = map(int, input().split()) dif = y-x if dif

    [백준 2775번-파이썬/Python] 부녀회장이 될거야

    http://acmicpc.net/problem/2775 {코드} for _ in range(int(input())): k, n = int(input()), int(input()) residents = [i for i in range(1, n+1)] for _ in range(k): for j in range(1, n): residents[j] += residents[j-1] print(residents[-1]) {설명} 먼저 각 층의 1호에는 1명만 있고, 첫 번째 층(0층)에는 n호에 n명이 있습니다. 그리고 a층의 b호에 들어갈 거주민의 수는 a-1층의 b호까지의 거주민의 합과 같습니다. 즉, 0층의 거주민 리스트를 층의 갯수만큼 반복문을 돌리며 전 호의 거주민 수에 현재 저장되어 있는 거주민의 수..

    [백준 10250번-파이썬/Python] ACM 호텔

    http://acmicpc.net/problem/10250 {코드} for _ in range(int(input())): h, w, n = map(int, input().split()) a = n%h b = n//h+1 if a == 0: a = h b -= 1 print(a*100+b) {설명} 층 수는 n번 손님의 번호인 n을 층의 개수로 나눈 나머지가 되는데 만약 나머지가 0이라면 최상층인 h가 된다. 해당 층의 몇번째 방인지는 n을 층의 개수로 나눈 몫이 되는데 만약 층이 최상층이라면 몫에 1이 더해지므로 1을 뺀다. w가 사용되지 않는 이유는 w로 나누면 가로로 채우고 h를 쓰면 세로로 채우는데 엘리베이터와 가까운 방을 선호한다고 했으므로 결국 h를 사용하는 것이다.

    [백준 2869번-파이썬/Python] 달팽이는 올라가고 싶다

    http://acmicpc.net/problem/2869 {코드} from math import ceil a, b, v = map(int, input().split()) print(ceil((v-a)/(a-b))+1) {설명} 달팽이는 아침, 즉 올라갈 때 우물을 벗어날 수 있으므로 마지막 날은 올라가지만 내려오지는 않는다. 그러므로 전체 높이에서 아침에 올라가는 높이인 a만큼 뺀 후 이 높이를 올라가는데 걸리는 날을 구하고 거기에 다시 a만큼 올라가는데 걸리는 시간인 1을 더하면 된다. 이때 a를 뺀 만큼을 올라가려면 하루에 a만큼 올라가 b만큼 내려오기 때문에 실질적으로 하루에 a-b만큼 올라가기 때문에 (v-a)를 (a-b)로 나눈 값을 올림 하면 된다.