Algorithm 79

[Python][백준] 2751_수 정렬하기 2

https://www.acmicpc.net/problem/2751 2751번: 수 정렬하기 2 첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 숫자가 주어진다. 이 수는 절댓값이 1,000,000보다 작거나 같은 정수이다. 수는 중복되지 않는다. www.acmicpc.net 더보기 문제 N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오. 입력 첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 숫자가 주어진다. 이 수는 절댓값이 1,000,000보다 작거나 같은 정수이다. 수는 중복되지 않는다. 출력 첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다. pyt..

[Python][백준] 2839_설탕 배달 (3가지 풀이방법)

https://www.acmicpc.net/problem/2839 2839번: 설탕 배달 상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그 www.acmicpc.net 더보기 문제 상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그램 봉지와 5킬로그램 봉지가 있다. 상근이는 귀찮기 때문에, 최대한 적은 봉지를 들고 가려고 한다. 예를 들어, 18킬로그램 설탕을 배달해야 할 때, 3킬로그램 봉지 6개를 가져가도 되지만, 5킬로그램 3개와 3킬로..

Greedy Algorithm (탐욕 알고리즘)

- 최적화 문제 풀이에 쓰임 (= 최대값 or 최소값 구하기) - 현재 시점에서 최적이라고 생각되는 값을 선택하는 알고리즘. 하지만 전체 시점에서 추출된 해가 항상 최적이라는 보장이 없다. * 풀이 단계 1. 해 선택 : 가장 좋은 해 선택 2. 실행 가능성, 해 검사 : 선택한 해가 조건을 충족하는지 확인. 충족하지 않을 경우, 1번의 해에서 값을 수정한 뒤 다시 반복 * EX) 동전 거스름 돈 문제 [CASE1] 800원의 거스름돈을 500, 100 원 동전을 사용하여 줄 수 있는 최 소 동전의 갯수 구하기 1) 제일 적은 갯수로 주기 위해 가장 큰 금액의 동전 (500)을 선택. 2) 나머지 금액 (800-500) 은 100원 짜리 동전을 사용 ==> 답: 4개 (500원 1개 , 100원 3개) ..

[Python][Programmers] 기초문제_12915, 12910, 12906

- [12915] 문자열 내 마음대로 정렬하기 def solution(strings, n): strings.sort() li = sorted(strings, key = lambda x : x[n]) return li ### Idea: n번째인덱스 문자 + strings 를 정렬한 뒤에 1~ 문자열을 가져오는 방법 --> sorted(str, key=lambda x : 정렬기준) 을 통해 정렬 기준을 설정할 수 있음 - [12910] 나누어 떨어지는 숫자 배열 def solution(arr, divisor): answer = list(filter(lambda x : x%divisor == 0, arr)) answer = [-1] if len(answer) == 0 else answer return sort..

[Python][Programmers] 기초문제_12921, 12919, 12918, 12917, 12916

- [12921] 소수 찾기 def solution(N): li = [True for _ in range(2, N+1)] for idx, val in enumerate(li): i = idx+2 if val == False : continue for j in range(2,N): if i*j > N: break li[i*j-2] = False answer = filter(lambda x: x == True, li) return len(list(answer)) -> 에라토스테네스의 체 +++ 다른 사람 풀이 참고 def solution(N): nums = set(range(2, N+1)) for n in range(2, N+1): if n in nums: nums -= set(range(n*2, N+1, ..

소수 판별 알고리즘 (에라토스테네스의 체)

소수 (Prime Number) 란, 1과 자기 자신으로만 나누어지는 숫자 (단, 1은 소수가 아님) (1) 특정 N 이 주어졌을 때, 이 숫자가 소수인지 아닌지 판별하기 : N이 n * m (n N: break li[i*j-2] = False answer = filter(lambda x: x == True, li) return len(list(answer)) [참고] velog.io/@koyo/python-is-prime-number [내가 보려고 적는 파이썬] 소수 판별(에라토스테네스의 체) 소수를 판별하는 방식에 대해 정리해보았다. 다양한 수를 판별하는 경우에 활용할 수 있는 에라토스테네스의 체도 알아두자. velog.io

[Python][Programmers] 기초문제_12930, 12928, 12926, 12925, 12922

- [12930] 이상한 문자 만들기 def solution(s): isUpper = False li = list(s) for i in range(len(li)) : isUpper = not isUpper if s[i] != ' ' else False li[i] = li[i].upper() if isUpper else li[i].lower() return ''.join(li) --> str.lower() 소문자 || str.upper() 대문자 - [12928] 약수의 합 def solution(n): li = filter(lambda x: n%x == 0, list(range(1,n+1))) return sum(li) --> filter로 약수찾기 - [12926] 시저 암호 def solution(s..

[Python][Programmers] 기초문제_12934, 12933, 12903, 12932, 12931

- [12934] 정수 제곱근 판별 import math def solution(n): answer = pow(math.sqrt(n)+1,2) if math.sqrt(n)%1 == 0 else -1 return answer --> math 모듈의 sqrt 함수 : 제곱근 구하기 / pow 함수 : 제곱 구하기 - [12933] 정수 내림차순으로 배치하기 def solution(n): # answer = list(str(n)) # answer.sort() # answer.reverse() # print(''.join(answer)) # answer = int(''.join(answer)) ### 간단히 answer = list(str(n)) answer.sort(reverse = True) answer =..

최대공약수, 최소공배수 구하기 (유클리드 호제법)

N과 M의 숫자가 주어졌을 때, - 최대공약수(GCD) --> 유클리드호제법 : N(=큰수), M(=작은수) 가 있을 때 N%M를 X라고 한다. X가 0이 아니면 M%X 를 수행하고,,, 나머지가 0일 때까지 반복한다. 나머지가 0이 되었을 때 n%m 의 m 값이 최대공약수가 된다. - 최소공배수(LCM) --> 최대공약수를 통한 계산 : N = ab, M = bc 일때, 최대공약수는 b, 최소공배수는 abc 이다. 이 때 최소공배수는 NM (=ab^2c) 에서 최대공약수(b) 를 나눈 값과 같다. [Python코드] def solution(N, M): # 최대공약수 (gcd) ### 유클리드 호제법 ### N(=큰수), M(=작은수) 가 있을 때 N%M를 X라고 한다. ### X가 0이 아니면 M%X ..

[Python][Programmers] 기초문제_12969, 12954, 12948, 12947, 12947

- [12969] 직사각형 별찍기 # a, b = input().split() # str = "*" * int(a)+'\n' # str = str * int(b) ### int로 입력받기 a, b = map(int, input().split()) str = ('*'*a + '\n')*b print(str) - [12954] x만큼 간격이 있는 n개의 숫자 def solution(x, n): ### 풀이1 # answer = [x] # while n-1: # answer.append(answer[-1] + x) # n=n-1 ### 풀이2 answer = [x * (i+1) for i in range(n)] return answer - [12948] 핸드폰 번호 가리기 def solution(phone_n..