[백준 python] 1105번 팔 - 그리디
·
지난 글 모음
[백준 python] 1105번 팔 - 그리디 레벨: 실버1 언어: python 문제풀러가기 📑풀이 과정 이러한 문제는 예시를 몇개 넣어보면서 조건에 맞는것을 찾아보면 풀이 방법이 떠오른다. 핵심은 반드시 8이 들어가는 곳의 수를 찾아서 출력하면된다. 먼저 두 수의 자리수가 같은지 확인한다. 자리수가 다르면 무조건 0이 나올 수 밖에 없다. ex) 8 10 -> 9나 10이 선택 됨으로 무조건 0이 나옴 그리고 자리수가 같을 때는 앞자리부터 확인한다. 이때 앞자리가 같으면서 8인 경우가 8이 꼭 들어가야만 하는 자리이다. ex) 80 88 1개, 888 889 2개 앞 자리부터 공통으로 들어가는 8의 수를 확인 그리고 앞자리가 같으면서 8이 아닌 경우는 뒤에 8이 있는지 확인해야한다. ex) 1878 1..
[백준 python] 1246번 온라인 판매
·
지난 글 모음
[백준 python] 1246번 온라인 판매 레벨: 실버 5 언어: python 문제풀러가기 📑풀이 과정 들어온 가격을 내림차순으로 정렬하고 해당가격에 팔았을 때 값을 result 배열에 저장했다. for 문에서 i+1가 판매하는 인원 수 인데 이 값이 N을 넘어가면 break 걸었다. 그리고 result 배열에서 가장 큰 값을 출력하였다. 📋풀이 코드 import sys sys.stdin = open("input_py.txt", "r") input = sys.stdin.readline N ,M = map(int, input().split(' ')) arr = [int(input()) for _ in range(M)] arr.sort(reverse=True) result = [] for i..
[백준 python] 1449번 수리공 항승 - 그리디
·
지난 글 모음
[백준 python] 1449번 수리공 항승 - 그리디 레벨: 실버 3 언어: python 문제풀러가기 📑풀이 과정 물이 세는 곳 하나를 막기 위해서는 좌우 0.5 만큼이 필요하다 물이 세는 곳이 1이라면 0.5 ~ 1.5 구간이 테이프가 발리는 구간이다. 예시 처럼 테이프의 길이가 2이고 1 과 2 에서 물이 셀 때 0.5 ~ 2.5 까지 테이프를 붙여야하고 이때 길이 2짜리가 한개 들어간다. 물이 세는 곳의 입력을 배열에 저장하고 오름차순으로 정렬한다. 처음 들어오는 값을 기준으로 테이프를 처음 붙이는 곳 arr[0] - 0.5 -> start라는 변수에 저장 테이프가 끝나는 곳 start + L -> end라고 저장 arr 순회 하면서 start 보다 크고 end 보다 작은 값은 넘어가고 범위를 넘..
[백준 python] 1049번 기타줄 - 그리디
·
지난 글 모음
[백준 python] 1049번 기타줄 - 그리디 레벨: 실버 4 언어: 파이썬 문제풀러가기 📑풀이 과정 이 문제는 몇 가지의 경우를 찾아서 계산해주면된다. input을 받으며 가장 싼 패키지와 가장 싼 낱개 가격을 찾아주고 나머지 값은 저장할 필요가 없다. 아래 경우에서 적은 패키지와 낱개는 모두 가장 값이 싼 것을 기준으로 설명한다. 패키지의 가격이 낱개 X 6 보다 비싼 경우 -> 이런 경우는 모든 N을 낱개 가격으로 구매하면 된다.(N * 낱개) 1번이 아닌 경우라면 -> 최대한 만은 패키지를 구매한다. (N // 6 * 패키지 만큼) 그 후 남은 기타줄의 수가 패키지로 구매하는게 저렴한지 낱개로 사는게 저렴한지 비교해서 저렴한 것으로 구매하면된다. 코드는 주석으로도 충분히 설명이 될거 같아 따로..
[백준 python] 18310번 안테나 - 그리디
·
지난 글 모음
[백준 python] 18310번 안테나 - 그리디 레벨: 실버 3 언어: python 📑풀이 과정 1. 모든 경우 계산 처음 문제를 보고 모든 값 집의 위치 마다 거리를 계산 했다. 이 경우 n^2의 시간 복잡도를 가지는데 입력값의 최대가 200,000이라서 무조건 시간 초과가 나오게 된다. 2. 다른 풀이 수학적으로 생각하면 간단하게 풀 수 있는 문제이다. 모든 집까지의 거리의 총합이 가장 작으려면 일직선 상에서 가운데에 가까울 수록 총합이 적어진다. 그래서 배열에 집의 위치를 저장하고 정렬 후 중앙값을 찾아서 출력하면 된다. 📋풀이 코드 import sys input = sys.stdin.readline N = int(input()) arr = list(map(int, input().split(' ..
[백준 python] 1448번 삼각형 만들기 (삼각형의 조건) - 그리디
·
지난 글 모음
[백준 python] 1448번 삼각형 만들기 - 그리디 레벨: 실버3 언어: python 문제풀러가기 📑풀이 과정 삼각형의 조건 중 가장 긴 변이 나머지 두변의 합보다 작다 라는 조건이 있다. 가장 긴변이 A라면 A < B + C 조건을 만족하면 된다. 들어오는 값을 정렬한 뒤 가장 큰 값, 두번째로 큰 값, 세번째로 큰값을 조건이 맞는지 비교하면 된다. 📋풀이 코드 import sys input = sys.stdin.readline def fun(arr): i = 0 while i+2
[백준 python] 15904번 UCPC는 무엇의 약자일까? - 그리디
·
지난 글 모음
레벨: 실버 5 언어: python 문제풀러가기 📑풀이 과정 풀이는 간단하다. 그리고 다양한 방법으로 풀 수 있을 거 같다. 내가 푼 방법은 UCPC를 문자열로 저장해두고 input으로 들어오는 문자열을 탐색하여 찾는다. 찾은 횟수를 idx에 저장하고 idx가 4면 UCPC가 있는 것이고 4이하이면 UCPC가 없는 것이다. 📋풀이 코드 import sys sys.stdin = open("input_py.txt", "r") input = sys.stdin.readline string = input() UCPC = 'UCPC' idx = 0 for i in string: if idx > 3: break if UCPC[idx] == i and idx
[백준 python] 1037번 약수
·
지난 글 모음
[백준 python] 1037번 약수 레벨: 실버5 언어: python 문제풀러가기 1037번: 약수 첫째 줄에 N의 진짜 약수의 개수가 주어진다. 이 개수는 50보다 작거나 같은 자연수이다. 둘째 줄에는 N의 진짜 약수가 주어진다. 1,000,000보다 작거나 같고, 2보다 크거나 같은 자연수이고, 중복되 www.acmicpc.net 📑풀이 과정 문제를 보면 N의 약수가 주어진다. 주어지는 약수(A)는 진짜약수라고 해서 A != 1, A !=N이다 이걸 보면 주어지는 N은 소수가 아니다. 그리고 N의 모든 약수가 주어진다고 했을때 약수의 개수가 1개이면 N은 주어진 약수의 제곱이다. A^2 약수가 1개 이상이면 들어온 약수를 정렬하여 가장 작은 수와 가장 큰수를 곱하면 N을 구할 수 있다. 3 4 2 ..