파이썬 106

백준 1931번 회의실 배정 파이썬

https://www.acmicpc.net/problem/1931 1931번: 회의실 배정 (1,4), (5,7), (8,11), (12,14) 를 이용할 수 있다. www.acmicpc.net 내 답안 N = int(input()) M = [] for i in range(N): start_time, end_time = map(int, input().split()) M.append((start_time, end_time)) # 끝나는 시간으로 시간대 정렬 M.sort(key=lambda x: (x[1], x[0])) et = cnt = 0 for start_time, end_time in M: if start_time >= et: et = end_time cnt += 1 print(cnt) # 끝나는 시..

BOJ/Python 2022.03.17

그리디 알고리즘 ( Greedy Algorithm ) 실전 문제 1 - Python

동빈이의 큰수의 법칙 동빈이의 큰 수의 법칙은 다양한 수로 이루어진 배열이 있을 때 주어진 수들을 M 번 더하여 가장 큰 수를 만드는 법칙이다. 단, 배열의 특정한 인덱스(번호)에 해당하는 수가 연속해서 K 번을 초과하여 더해질 수 없는 것이 이 법칙의 특징이다. 예를 들어 순서대로 2, 4, 5, 4, 6으로 이루어진 배열이 있을 때 M이 8이고, K가 3이라고 가정하자. 이 경우 특정한 인덱스의 수가 연속해서 세 번까지만 더해질 수 있으므로 큰 수의 법칙에 따른 결과는 6 + 6 + 6 + 5 + 6 + 6 + 6 + 5인 46이 된다. 배열의 크기 N, 숫자가 더해지는 횟수 M, 그리고 K가 주어질 때 동빈이의 큰 수의 법칙에 따른 결과를 출력하시오. 입력조건 첫째줄에 N (2

Algorithm 2022.03.02

그리디 알고리즘 ( Greedy Algorithm )

그리디 알고리즘( Greedy Algorithm ) 그리디 알고리즘은 단순하지만 강력한 문제 해결 방법이다. 단어 그대로 번역 하면 탐욕법 이고 단순 무식하게, 탐욕적으로 문제를 푸는 알고리즘 이다. 여기서 탐욕적 이라는 말은 현재 상황에서 지금 당장 좋은 것만 고르는 방법이다. 매 순간 가장 좋아 보이는 것을 선택하며 , 현재의 선택이 나중에 미칠 영향에 대해서는 고려하지 않는다. 코딩 테스트 유형 그리디의 문제 유형은 사전에 외우고 있지 않아도 풀 수 있을 가능성이 높다. 최단 경로를 구하는 다익스트라 알고리즘은 그리디 알고리즘으로 분류 되므로 암기가 필요한 알고리즘 이다. 그리디 알고리즘 자체가 문제 출제의 폭이 매우 넓기 때문에 다익스트라 알고리즘과 같은 특이 케이스를 제외하고는 단순 암기를 통해..

Algorithm 2022.03.01

[프로그래머스] 약수의 개수와 덧셈 파이썬

https://programmers.co.kr/learn/courses/30/lessons/77884 코딩테스트 연습 - 약수의 개수와 덧셈 두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주 programmers.co.kr 월간 코드 챌린지 시즌 2 답안 def solution(left, right): answer = 0 for i in range(left, right + 1): cnt = 0 for j in range(1, i + 1): if i % j == 0: # 약수의 개수 판별 cnt += 1 if cnt % 2 == 0..

프로그래머스 2022.02.17

백준 2609번 최대공약수와 최소공배수 파이썬

https://www.acmicpc.net/problem/2609 2609번: 최대공약수와 최소공배수 첫째 줄에는 입력으로 주어진 두 수의 최대공약수를, 둘째 줄에는 입력으로 주어진 두 수의 최소 공배수를 출력한다. www.acmicpc.net 답안 def gcd(m, n): # 최대공약수 함수 if n == 0: return m return gcd(n,m%n) m, n = map(int, input().split()) print(gcd(m, n)) # 최대 공약수 print(m*n//gcd(m, n)) # 최소 공배수 이산 수학을 공부하면서도 배웠지만 최소공약수 구하는 것은 유클리드 호제법을 참고하여 알고리즘을 짜면 된다. 방법은 여러 가지로 볼 수 있지만 나는 유클리드 호제법을 사용하여 문제를 풀었다..

BOJ/Python 2022.02.11

백준 10026번 적록색약 파이썬 DFS

https://www.acmicpc.net/problem/10026 10026번: 적록색약 적록색약은 빨간색과 초록색의 차이를 거의 느끼지 못한다. 따라서, 적록색약인 사람이 보는 그림은 아닌 사람이 보는 그림과는 좀 다를 수 있다. 크기가 N×N인 그리드의 각 칸에 R(빨강), G(초록) www.acmicpc.net 답안 import sys sys.setrecursionlimit(10**4) def dfs_R(x,y): if x = n or y >= n: return False if graph[x][y] == 'R': graph[x][y] = 'C' dfs_R(x-1,y) dfs_R(x,y-1) dfs_R(x+1,y) dfs_R(x,y+1) return True ret..

BOJ/Python 2022.02.10

백준 1929번 소수 구하기 파이썬

https://www.acmicpc.net/problem/1929 1929번: 소수 구하기 첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1 ≤ M ≤ N ≤ 1,000,000) M이상 N이하의 소수가 하나 이상 있는 입력만 주어진다. www.acmicpc.net 답안 def is_prime(n): if n == 1: return False else: for i in range(2, int(n**0.5) + 1): if n % i == 0: return False return True m, n = map(int, input().split()) for i in range(m, n+1): if is_prime(i): print(i) 소수 구하는 문제를 구현하는 건 쉽다. 문제가 정답률이 낮은..

BOJ/Python 2022.02.08

백준 4963번 섬의 개수 파이썬 DFS

https://www.acmicpc.net/problem/4963 4963번: 섬의 개수 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스의 첫째 줄에는 지도의 너비 w와 높이 h가 주어진다. w와 h는 50보다 작거나 같은 양의 정수이다. 둘째 줄부터 h개 줄에는 지도 www.acmicpc.net 답안 import sys sys.setrecursionlimit(10**4) # 재귀스택 확장 def dfs(x, y): if x = w or x >= h: return False if graph[x][y] == 1: graph[x][y] = 0 dfs(x-1, y) # 반 시계 방향 순환 dfs(x-1, y-1) dfs(x, y-1) dfs(x+1, y-1..

BOJ/Python 2022.02.07

백준 1012번 유기농 배추 파이썬 DFS

https://www.acmicpc.net/problem/1012 1012번: 유기농 배추 차세대 영농인 한나는 강원도 고랭지에서 유기농 배추를 재배하기로 하였다. 농약을 쓰지 않고 배추를 재배하려면 배추를 해충으로부터 보호하는 것이 중요하기 때문에, 한나는 해충 방지에 www.acmicpc.net 답안 import sys sys.setrecursionlimit(10**6) def dfs(x, y): if x = m or y = n: return False if graph[x][y] == 1: graph[x][y] = 0 dfs(x-1, y) dfs(x, y-1) dfs(x+1, y) dfs(x, y+1) return True return False for _ in range(int(input())): ..

BOJ/Python 2022.02.06