본문 바로가기

💡Algorithm31

[python]21942_부품 대여장 사용한 자료구조 및 개념 : defaultdict 💡 문제풀이 아이디어 및 어려웠던 점 💫 아이디어 1️⃣ 딕셔너리를 대여장으로 활용한다. 2️⃣ defaultdict를 사용한다. ✅ defaultdict란? - defaultdict는 모든 키를 확인할 필요가 없습니다. - defaultdict는, value를 지정하지 않은 key의 value를 0으로 가집니다. 👻 어려웠던 점 🚨 defaultdict 사용법 미숙 rental = defaultdict(defaultdict) : 중첩된 defaultdict 구조를 생성 → 이름 별로 대여한 부품을 기록하기 위해서이다. { 'JAMES': { 'BIKE': "12:00" } } penalty = defaultdict(int) : int()를 호출하면 0이.. 2023. 9. 5.
[python]2696_중앙값 구하기 1 사용한 자료구조 및 개념 : heap 💡 문제풀이 아이디어 및 어려웠던 점 💫 아이디어 1️⃣ heap을 사용하여 중앙값을 구한다. 2️⃣ max_heap에는 중앙값을 포함한 왼쪽 부분을 저장하고, min_heap에는 오른쪽 부분을 저장한다. 3️⃣ 배열은 0번부터 시작이니 짝수번째에서 중앙값을 구한다. 4️⃣ (배열의)짝수번째일 때, 숫자가 min_heap의 최솟값보다 크다면 min_heap에 추가하고, 작다면 max_heap에 추가한다. min_heap에 추가했다면 max_heap에서 숫자 하나를 pop하여 min_heap에 추가한다. → 이때, 중앙값은 정렬한 수열에서 항상 가운데 있다. 따라서 중앙값을 효율적으로 찾기 위해 max_heap의 크기는 min_heap의 크기보다 1만큼 크거나 같아.. 2023. 8. 23.
[python]11286_절대값 힙 1 사용한 자료구조 및 개념 : heap 💡 문제풀이 아이디어 및 어려웠던 점 💫 아이디어 1️⃣ 입력된 x 값이 0이 아닌 경우, x 값을 추가한다. 2️⃣ 절대값이 작은 순서대로, 그리고 실제 값이 작은 순서대로 정렬시킨다. 3️⃣ 입력된 x 가 0인 경우, 힙에서 값을 추출하고 출력한다. 4️⃣ heapq.heappop 은 힙에서 가장 작은 값을 제거하고 그 값을 반환한다. 5️⃣ 튜플 형태로 저장하기 때문에 [1] 인덱스를 사용한다. 6️⃣ 힙이 비어 있다면 0을 출력한다. Solution Code & 주석 import heapq import sys # 입력받을 연산의 개수 N = int(input()) # 힙 초기화 heap = [] for _ in range(N): x = int(sys.std.. 2023. 8. 11.
[python]4385_생태학 1 사용한 자료구조 및 개념 : 딕셔너리, Counter 💡 문제풀이 아이디어 및 어려웠던 점 💫 아이디어 1️⃣ 딕셔너리를 사용하여 나무이름: 나무 갯수 로 키 - 값을 설정한다. 2️⃣ 딕셔너리에 나무가 있다면 value값을 +1해주고 없다면 딕셔너리에 나무이름-값을 추가한다. 3️⃣ 알파벳 순서로 딕셔너리를 정렬한다. 4️⃣ 정렬한 딕셔너리를 반복문으로 돌려 키 값을 가져와 나무 이름과 해당 나무가 전체 나무에서 차지하는 비율을 출력한다. ❣️ Counter 사용 1️⃣ 모든 텍스트를 읽고, 줄 바꿈을 기준으로 각 나무 이름을 Counter 을 사용하여 카운트 한다. 2️⃣ split(’n’)을 하면 마지막에 빈 문자열(””)이 생길 수 있으므로 빈 문자열을 딕셔너리에서 삭제한다. 3️⃣ 알파벳 순.. 2023. 8. 9.
[python]1620_나는야 포켓몬 마스터 이다솜 1. 사용한 자료구조 및 개념 : 딕셔너리 💡 문제풀이 아이디어 및 어려웠던 점 💫 아이디어 1️⃣ 포켓몬 리스트 입력값을 받아 포켓몬 이름과 인덱스 값을 매핑하여 딕셔너리에 저장한다. 2️⃣ 문제의 입력값들을 받아 .isdigit() 메서드를 활용하여 숫자이면 포켓몬 이름을 출력하고 문자열이면 해당 포켓몬 이름의 인덱스를 출력한다. 👻 어려웠던 점 🚨 시간초과 import sys n, m = map(int, sys.stdin.readline().split()) pokemon = [0] for _ in range(n): pokemon.append(sys.stdin.readline().strip()) for _ in range(m): q = input().strip() if q.isdigit(): prin.. 2023. 8. 7.
[python]1918_후위 표기식 1 사용한 자료구조 및 개념 : stack 💡 문제풀이 아이디어 및 어려웠던 점 💫 아이디어 1️⃣ 식을 문자열 리스트로 변환한다. 2️⃣ 리스트의 문자열을 확인한다. 문자가 알파벳이면 후위 표기법에서는 피연산자가 앞에 위치하기 때문에 결과값에 추가한다. 문자가 여는 괄호 ( 이면 이후에 오는 연산자의 우선순위가 더 높을 것이기 때문에 임시로 스택에 담아 놓는다. 문자가 * 이거나 / 이면 + - 보다 우선순위가 높으므로 스택에서 pop하여 동일한 우선순위의 연산자들을 결과값에 추가한 뒤 현재 연산자를 스택에 넣는다. 문자가 + 이거나 - 이면 * / 보다 우선순위가 낮으므로 스택에서 pop하여 동일한 우선순위 혹은 더 높은 우선순위의 연산자들을 결과값에 추가한 뒤 현재 연산자를 스택에 넣는다. 문자가 .. 2023. 8. 1.