본문 바로가기

반응형

파이썬

[백준] 11729 - 하노이 탑 이동 순서 (feat. 하노이 탑 알고리즘 파이썬) 1. 문제 세 개의 장대가 있고 첫 번째 장대에는 반경이 서로 다른 n개의 원판이 쌓여 있다. 각 원판은 반경이 큰 순서대로 쌓여있다. 이제 수도승들이 다음 규칙에 따라 첫 번째 장대에서 세 번째 장대로 옮기려 한다. 한 번에 한 개의 원판만을 다른 탑으로 옮길 수 있다. 쌓아 놓은 원판은 항상 위의 것이 아래의 것보다 작아야 한다. 이 작업을 수행하는데 필요한 이동 순서를 출력하는 프로그램을 작성하라. 단, 이동 횟수는 최소가 되어야 한다. 아래 그림은 원판이 5개인 경우의 예시이다. 2. 코드 def move(N, start, to): print(start, to) def hanoi(N, start, to, via): if N == 1: move(1, start, to) else: hanoi(N-1,.. 더보기
[백준] 1002번 - 터렛 (파이썬) (feat. 원) 1. 문제 조규현과 백승환은 터렛에 근무하는 직원이다. 하지만 워낙 존재감이 없어서 인구수는 차지하지 않는다. 다음은 조규현과 백승환의 사진이다. 이석원은 조규현과 백승환에게 상대편 마린(류재명)의 위치를 계산하라는 명령을 내렸다. 조규현과 백승환은 각각 자신의 터렛 위치에서 현재 적까지의 거리를 계산했다. 조규현의 좌표 (x1, y1)와 백승환의 좌표 (x2, y2)가 주어지고, 조규현이 계산한 류재명과의 거리 r1과 백승환이 계산한 류재명과의 거리 r2가 주어졌을 때, 류재명이 있을 수 있는 좌표의 수를 출력하는 프로그램을 작성하시오. 첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 다음과 같이 이루어져 있다. 한 줄에 x1, y1, r1, x2, y2, r2가 주어진다. x1, .. 더보기
[백준] 3053번 - 택시 기하학 0. 코드 import math r = int(input()) print(r*r*math.pi) print(2*r*r) 1. 문제 https://www.acmicpc.net/problem/3053 19세기 독일 수학자 헤르만 민코프스키는 비유클리드 기하학 중 택시 기하학을 고안했다. 택시 기하학에서 두 점 T1(x1,y1), T2(x2,y2) 사이의 거리는 다음과 같이 구할 수 있다. D(T1,T2) = |x1-x2| + |y1-y2| 두 점 사이의 거리를 제외한 나머지 정의는 유클리드 기하학에서의 정의와 같다. 따라서 택시 기하학에서 원의 정의는 유클리드 기하학에서 원의 정의와 같다. 원: 평면 상의 어떤 점에서 거리가 일정한 점들의 집합 반지름 R이 주어졌을 때, 유클리드 기하학에서 원의 넓이와, 택.. 더보기
[백준] 9029번 - 골드바흐의 추측 1. 문제 https://www.acmicpc.net/problem/9020 2. 코드 import math sosu = [] for i in range(2, 10000): flag = 0 temp = int(math.sqrt(i)) for j in range(2, temp+1): if i%j == 0: flag = 1 if flag == 0: sosu.append(i) n = int(input()) for i in range(n): num = int(input()) for j in range(num//2, 1, -1): if (j in sosu) and (num-j in sosu): print(j, num-j) break 3. 알고리즘 1) 1~10000까지 모든 소수를 sosu라는 리스트에 저장 2).. 더보기
[백준] 4948번 - 베르트랑 공준 (파이썬) 1. 문제 2. 코드 import sys import math sosu = [0 for i in range(123457*2)] sosu[1] = 0 sosu[2] = 1 for i in range(2, 123457*2): temp_i = int(math.sqrt(i)) flag = 0 for j in range(2, temp_i+1): if i%j == 0: flag = 1 break if flag == 0: sosu[i] = 1 while 1: n = int(input()) #n = int(sys.stdin.readline()) cnt = 0 if n == 0: break for i in range(n+1, 2*n+1): if sosu[i] == 1: cnt += 1 sys.stdout.write(st.. 더보기
[백준] 11650번 - 좌표 정렬하기 (파이썬) (feat. lambda) 1. 문제 https://www.acmicpc.net/problem/11650 2. 코드 import sys n = int(input()) l = [] for i in range(n): l.append(list(map(int, input().split()))) l.sort(key = lambda x: (x[0], x[1])) for i in range(n): sys.stdout.write('%d %d\n'%(l[i][0], l[i][1])) 3. 주요 포인트 처음에는 딕셔너리로 받아오려했으나 정렬에 어려움이 있었다. 그래서 list형태로 받아오고 lambda로 정렬하였다. lambda는 ''''lambda 인자 : 표현식 '''' 형태로 사용된다. 함수를 아주 간단하게 사용할 수 있다. ex) map(l.. 더보기
[백준] 1463번 - 1로 만들기 (파이썬 코드) (feat. DP) 1. 문제 https://www.acmicpc.net/problem/1463 2. 코드 n = int(input()) dp = [0 for i in range(n+1)] for i in range(2, n+1): dp[i] = dp[i-1] + 1 if i%3 == 0: dp[i] = min(dp[i], dp[i//3]+1) if i%2 == 0: dp[i] = min(dp[i], dp[i//2]+1) print(dp[n]) 3. 알고리즘 점화식 : dp[N] = min(dp[N-1], dp[N//2] , dp[N//3]) + 1 1) 1을 빼준 경우를 우선 저장해놓는다. 2) 3으로 나뉠 경우, 1을 빼준 경우와 비교해서 최솟값을 저장한다. 3) 2로 나뉠 경우, 1을 빼준 경우(만약 2)에서 3으로 .. 더보기
[백준] 2108번 - 통계학 (파이썬 풀이) (feat. collections, sys) 1. 문제 https://www.acmicpc.net/problem/2108 수를 처리하는 것은 통계학에서 상당히 중요한 일이다. 통계학에서 N개의 수를 대표하는 기본 통계값에는 다음과 같은 것들이 있다. 단, N은 홀수라고 가정하자. 산술평균 : N개의 수들의 합을 N으로 나눈 값 중앙값 : N개의 수들을 증가하는 순서로 나열했을 경우 그 중앙에 위치하는 값 최빈값 : N개의 수들 중 가장 많이 나타나는 값 범위 : N개의 수들 중 최댓값과 최솟값의 차이 N개의 수가 주어졌을 때, 네 가지 기본 통계값을 구하는 프로그램을 작성하시오. (시간 초과 때문에 왕왕 고생한 이번문제,,,,,) 2. 코드 from collections import Counter import sys n = int(input()) .. 더보기

반응형