본문 바로가기

BOJ/Python

(192)
[BOJ/백준] 14471 - 포인트 카드 (Python) 문제문제링크2n개의 도장 중 n개 이상이 당첨 도장이면 경품과 교환할 수 있고, 도장 하나당 1엔을 내고 다른 도장으로 바꿀 수 있다.m장 카드 중 m-1개를 경품으로 바꾸기 위해 필요한 최소비용을 구하라. 풀이만약 당첨도장 수(a)가 n 이상이면 경품과 교환 가능하므로 고려할 필요가 없다.n보다 작은 경우에 한해, 필요한 비용은 n-a 엔이다.리스트에 저장한 비용들 중 가장 큰 값을 제외하고 나머지 값들의 합을 구하면 최소 비용이 된다. 코드n,m=map(int, input().split())ab=[]for _ in range(m): a,b=map(int, input().split()) if a
[BOJ/백준] 17608 - 막대기 (Python) 문제문제링크n개의 막대기에 대한 높이가 주어질 때, 오른쪽에서 봤을 때 몇 개가 보이는가. 풀이막대기의 높이는 왼쪽에서부터 차례로 주어진다.맨 오른쪽 높이를 last로 저장하고 보이는 막대기의 수(count)를 1로 설정한다.다음 막대기의 높이가  last보다 크면 count에 1을 더하고 last를 갱신한다.모든 막대기의 높이를 다 보고 난 후의 count가 문제에서 원하는 답이다. 코드import sysinput = sys.stdin.readlinen=int(input())lobs=[int(input()) for _ in range(n)]last = lobs[-1]count = 1for i in reversed(range(n)): if lobs[i] > last: count += 1..
[BOJ/백준] 27465 - 소수가 아닌 수 (Python) 문제문제링크n이 주어질 때, 소수가 아닌 n 이상의 정수를 아무거나 구하라. 풀이n부터 시작하여 n보다 큰 소수가 아닌 수 아무거나 구하면 된다.is_prime 함수와 not_prime 함수를 정의하여 n부터 시작하여 수가 소수라면 1을 더해 다시 소수인지 판별하는 과정을 반복한다.n에서 가장 가까운 수가 소수가 아니라고 판별된다면 그 수를 return 한다. 코드def is_prime(n): if n
[BOJ/백준] 13311 - 행운의 편지 (Python) 문제문제링크자연수 2부터 1000까지의 자연수 a에 대해, n ≡ a­-1 (mod a)인 정수 n을 구해라. 풀이자연수 2부터 1000까지에서 모든 a에 대해 위의 식을 만족해야 한다.위의 식을 다시 쓰면, 임의의 수 k에 대해, ka+n = a-1 n = (1-k)a-1이다.k=1일 경우, a값과 상관없이 n은 -1이다. 코드print(-1)
[BOJ/백준] 6030 - Scavenger Hunt (Python) 문제문제링크두 수가 주어질 때 각각의 약수를 튜플로 구성한다. 모든 튜플을 구하라. 풀이일단 약수를 구하는 함수를 정의한다.주어진 수 n에 대해 반을 나눈 범위에서 i로 n을 나눴을 때 나머지가 0이라면 리스트에 추가하고i로 n을 나눈 몫이  i와 다르다면 리스트에 추가한다.모든 약수가 리스트에 저장되면 정렬하여 return한다.두 수를 입력받아 각각의 약수를 리스트로 받는다.중첩 for문으로 약수들의 각각 요소에 접근하여 튜플을 출력한다.  코드def find_divisors(n): divisors=[] for i in range(1, int(n**0.5) + 1): if n % i == 0: divisors.append(i) if i !=..
[BOJ/백준] 5704 - 팬그램 (Python) 문제문제링크문자열 내에 모든 알파벳이 들어있다면 팬그램이다.주어진 문자열이 팬그램인지 아닌지 판별하라. 풀이단어는 소문자로만 이루어져 있고 공백 하나로 구분되어 전체 하나의 문자열이 입력된다.set()을 사용해 중복된 문자를 제거할 때 공백을 제거해야 하므로 isalpha()를 사용한다.알파벳의 총 개수는 26개이므로 set()으로 만들어진 집합의 길이가 26이라면 팬그램이다. 코드while True: s=input() if s!='*': s_set=set(char for char in s if char.isalpha()) if len(s_set)==26: print('Y') else: print('N') els..
[BOJ/백준] 5054 - 주차의 신 (Python) 문제문제링크가려고 하는 상점의 위치들이 주어질 때, 최소한으로 걷기 위한 주차 자리를 찾으려고 한다.모든 상점을 방문하고 차로 되돌아오기 위해 걸어야 하는 최소 거리를 구하라. 풀이최소한으로 걷기 위해서는 위치가 작은 것부터 큰 순 혹은 그 반대로 차례대로 방문해야 한다.무작위로 주어진 위치를 sort()하고 'max값(가장 먼 곳) - min값(가장 가까운곳, 현 주차위치)'를 구한다.이 값은 상점은 방문하기만 한 것이고 돌아오는 것에도 이와 동일한 거리가 필요하므로총 최소 거리는 2*(max값-min값)이다. 코드t=int(input())for _ in range(t): n=int(input()) pos=list(map(int, input().split())) pos.sort() ..
[BOJ/백준] 5032 - 탄산 음료 (Python) 문제문제링크현재 빈 병 e개와 찾은 f병으로 음료를 바꿔 먹으려고 한다.c병 당 1병을 줄 때 총 몇 병을 마실 수 있는가. 풀이 음료를 바꿔 먹고 나온 새 병과 기존에 있던 병을 합쳐 c병과 같거나 많다면 또 음료를 바꿔 먹을 수 있다.한 번 바꿔 먹을 때 (기존에 있던 병 수//c)병을 바꿔 먹을 수 있고 새로  (기존에 있던 병 수//c) 병이 생기는 것이다.따라서 한 번의 과정을 거치면 남은 병 수는 '기존에 있던 병 수 -  (기존에 있던 병 수//c)*c +  (기존에 있던 병 수//c) = 기존에 있던 병 수 - (기존에 있던 병 수//c)*(c-1)'이 된다.남은 병수가 c보다 작아지는 경우에 과정을 멈추게 된다. 코드def new_coke(e,f,c): bottle=e+f co..