전체 글 55

[백준] 10815번 숫자카드 - 파이썬

https://www.acmicpc.net/problem/10815 10815번: 숫자 카드 첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다. 숫자 카드에 적혀있는 수는 -10,000,000보다 크거나 같고, 10, www.acmicpc.net 💡문제이해 : 주어진 수에 대해서 상근이 가지고 있는 카드 중 해당되는 숫자가 있으면 1, 없으면 0 출력 🤔 풀이 : 완전탐색도 가능하겠지만 이분탐색을 이용하여 해결 1. 주어진 수와 상근이 가지고 있는 카드 받아오기 n = int(input()) arr1 = list(map(int,input().split())) m = int(input()) arr2 = list..

[백준] 2805번 나무자르기 - 파이썬

https://www.acmicpc.net/problem/2805 2805번: 나무 자르기 첫째 줄에 나무의 수 N과 상근이가 집으로 가져가려고 하는 나무의 길이 M이 주어진다. (1 ≤ N ≤ 1,000,000, 1 ≤ M ≤ 2,000,000,000) 둘째 줄에는 나무의 높이가 주어진다. 나무의 높이의 합은 항상 M보 www.acmicpc.net sol) 사용한 알고리즘 : 이분탐색 💡문제이해 나무의 높이 : 20 15 10 17 , 최소 집으로 가져가려고 하는 나무의 길이 : 7 20-15 + 17-15 = 7 ⇒ 설정할 수 있는 최대 높이 : 15 🤔 이분탐색을 이용해 설정할 수 있는 최대 높이 찾기 1. 나무의 수 (n) , 집으로 가져오려고 하는 최소 나무의 길이 (m) 와 나무들의 길이(fo..

[백준] 2606번 바이러스 - 파이썬

💡그래프 탐색에는 BFS가 더 좋다 DFS : 경우의 수를 탐색하는 방법 BFS : 노드와 노드의 관계를 탐색하는 방법 https://www.acmicpc.net/problem/2606 2606번: 바이러스 첫째 줄에는 컴퓨터의 수가 주어진다. 컴퓨터의 수는 100 이하인 양의 정수이고 각 컴퓨터에는 1번 부터 차례대로 번호가 매겨진다. 둘째 줄에는 네트워크 상에서 직접 연결되어 있는 컴퓨터 쌍 www.acmicpc.net sol) 1번 컴퓨터와 네트워크 상 연결되어있는 컴퓨터의 수 출력 DFS 풀이 1. 각 노드에서 연결된 컴퓨터 리스트 만들기 #노드 수 n = int(input()) #네트원크 상에서 직접 연결되어 있는 컴퓨터의 쌍의 수 m = int(input()) graph = [[] for _ ..

다이나믹 프로그래밍 - 파이썬

그래도 겁이 나던 코딩테스트가 하나씩 풀려가니까 기분이 좋기도 하다. 더 열심히 해야겠다. 아래 자료는 [이코테] 6.다이나믹 그래핑 강의를 참고했습니다. https://www.youtube.com/watch?v=5Lu34WIx2Us 다이나믹 프로그래밍 ⇒ 동적 계획법 이미 계산된 결과(작은 문제)는 별도의 메모리에 저장하여 다시 계산하지 않도록 한다 메모리를 적절히 사용하여 수행 시간 효율성을 비약적으로 향상시키는 방법 탑다운과 보텀업으로 구성 대표적인 문제 : 피보나치 수열 1,1,2,3,5,8,13,21,34,55,89,... #피보나치 함수를 재귀함수로 구현 def fibo(x) : if x == 1 or x ==2 : return return fibo(x-1) + fibo(x-2) print(f..

[백준] 14501번 퇴사 - 파이썬

https://www.acmicpc.net/problem/14501 14501번: 퇴사 첫째 줄에 백준이가 얻을 수 있는 최대 이익을 출력한다. www.acmicpc.net sol) 백준이가 얻을 수 있는 최대 수익을 구하는 프로그램 ⇒ 상담할 수 있는 모든 경우의 수를 구해 최대수익 결과 return 1. 첫째줄에 n , 둘째 줄부터 상담을 완료하는데 걸리는 기간(T)과 상담을 했을 때 받을 수 있는 금액(P) 받아오기 n = int(input()) profit = [list(map(int,input().split())) for _ in range(n)] 2. 상담을 하는 경우와 안하는 경우 모든 경우의 수 계산 (재귀 사용) 만일 2일에 잡혀있는 상담이 총 t만큼 걸린다고 하면 다음 상담은 t+2일부..

[백준] 2961번 도영이가 만든 맛있는 음식 - 파이썬

https://www.acmicpc.net/problem/2961 2961번: 도영이가 만든 맛있는 음식 첫째 줄에 재료의 개수 N(1 ≤ N ≤ 10)이 주어진다. 다음 N개 줄에는 그 재료의 신맛과 쓴맛이 공백으로 구분되어 주어진다. 모든 재료를 사용해서 요리를 만들었을 때, 그 요리의 신맛과 쓴맛은 www.acmicpc.net solution) 모든 경우의 수를 따져서 계산하는 방법 사용 1. 입력 받아오기 n = int(input()) flavor = [list(map(int,input().split())) for _ in range(n)] 2. 재귀함수를 사용해 모든 경우의 수 따지기 - answer을 크게 설정해 신맛과 쓴맛의 차이가 가장 작은 요리 출력 def recur(idx, sour ,..

[백준] 2503번 숫자야구 - 파이썬

#2503번 https://www.acmicpc.net/problem/2503 2503번: 숫자 야구 첫째 줄에는 민혁이가 영수에게 몇 번이나 질문을 했는지를 나타내는 1 이상 100 이하의 자연수 N이 주어진다. 이어지는 N개의 줄에는 각 줄마다 민혁이가 질문한 세 자리 수와 영수가 답한 스트 www.acmicpc.net 1. 3자리로 구성된 숫자 (100~999) 2. 3자리로 구성된 숫자와 제시된 숫자를 비교해 스트라이크 개수, 볼의 개수가 같으면 답 +1 첫번째 방법 ⇒ 완전탐색 n = int(input()) numbers = [list(map(int,input().split())) for _ in range(n)] answer = 0 for a in range(1,10): # 100의 자리수 f..

[python] 특정 기준으로 리스트 정렬하기 (key = lambda)

파이썬에서 배열을 정렬하기 위해서는 sorted()/sort()를 사용하여 내림차순,오름차순으로 정렬할 수 있습니다. 하지만 내가 원하는 특별한 기준으로 배열을 정렬하고 싶을 때는 key=lambda를 사용하면 됩니다. 1. Key가 하나일 때 ex) x를 기준으로 정렬하기 (일반 오름차순) 참고로 문자열은 다음과 같이 정렬하면 사전순으로 정렬이 된다 arr = ['abc' , 'bac' ,'bca'] sorted(arr , key = lambda x : x) ex) arr에 속하는 각 원소들을 x라고 생각했을 때, x[0]을 기준으로 정렬하기 arr = ['abc' , 'bac' ,'bca'] sorted(arr , key = lambda x : x[0]) 2. Key가 여러개 일 때 ex) x[0]을..

파이썬(Python) 2023.09.29

기초 알고리즘 [정렬]

정렬 arr = [3,1,4,5,2] arr.sort() # 오름차순 정렬 print(arr) #[1,2,3,4,5] arr.sort(reverse = True) #내림차순 정렬 print(arr) #[5,4,3,2,1] 정렬로직에는 선택정렬, 삽입정렬, 버블정렬등이 있다. 이 로직들은 크게 복잡하지 않아 쉽게 배울 수 있다는 장점이 있찌만, 너무 느리기 때문에 실제로 사용하기는 어렵다. 선택정렬 : 선택정렬은 우리가 앞에서 배운 최대값, 최소값을 찾는 로직과 두 값을 바꿔주는 로직을 혼합하여 구현하는 로직이다 3 1 4 5 2 #처음 주어진 리스트 1 3 4 5 2 # 최소값 1과 맨 앞의 수인 3과 교환 1 2 4 5 3 #첫번째를 제외한 최소값 2와 두번째 수인 3과 교환 1 2 3 5 4 #두번째..

기초 알고리즘 [수학]

01. 1부터 n 까지 합계 구하기 1.for문 이용하기 #for문 n = int(input()) result = 0 for i in range(1,n+1) : result += i print(result) 2. while문 이용하기 #while문 n = int(input()) result = 0 cnt = 1 my_sum = 0 while cnt a : a,b = b,a def gcd(a,b) : #b가 0이 아닐 때 까지 while b != 0: a,b = b, a%b return a 06. 기하 1. 세 막대 삼각형의 특성 : 가장 긴 변은 나머지 두 변의 합보다 클 수 없다. a+b > c 따라서 가장 긴 변의 길이를 a+b-1로 설정하면 가장 큰 둘레를 구할 수 있다. 2. 터렛 풀이 두 원이 ..