본문 바로가기

Programming [Python]

(411)
#2 [이분 탐색 - Binary Search] 파이썬 구현 설명: https://ko.wikipedia.org/wiki/%EC%9D%B4%EC%A7%84_%EA%B2%80%EC%83%89_%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98 def BinarySearch(arr, val, low, high): if low > high: return False #해당 배열에 타겟 숫자 미존재 mid = (low + high) // 2 #위치 기반으로 찾는 것 if arr[mid] > val: return BinarySearch(arr, val, low, mid - 1) #수가 중앙 값보다 아래 있는 경우 elif arr[mid] < val: return BinarySearch(arr, val, mid + 1, high) #수가 중앙 값보다 위에 있는 ..
#216 백준 파이썬 [10816] 숫자 카드 2 https://www.acmicpc.net/problem/10816 #Solution 이분 탐색으로 푸는 방법보다 dict 파일 안에 숫자를 더하여 key를 기반으로 찾는 방법을 선택했다. M의 숫자가 더 크다면 dict 또한 이분 탐색으로 하는 게 더 편하겠지만 충분히 풀 수 있음으로 사용하지 않았다. N = int(input()) N_list = list(map(int, input().split())) M = int(input()) M_list = list(map(int, input().split())) #숫자 별로 count 해준다 N_count = {} for n in N_list: try: N_count[n] += 1 except: N_count[n] = 1 #Dict형식을 이용하면 빠르게 찾을..
#1 [퀵 정렬 - Quick Sort] 파이썬 구현 설명: https://ko.wikipedia.org/wiki/%ED%80%B5_%EC%A0%95%EB%A0%AC def quick_sort(arr): if len(arr) pivot: greater_arr.append(num) #큰 리스트로 보내기 else: equal_arr.append(num) #작은 리스트와 큰 리스트끼리 다시 재귀하여 퀵정렬 return quick_sort(lesser_arr) + equal_arr + quick_sort(greater_arr)
#215 백준 파이썬 [1620] 나는야 포켓몬 마스터 이다솜 https://www.acmicpc.net/problem/1620 #Solution 딕셔너리를 2개 만들어서 풀 수 있다. (매.우.간.단) '출력형식이 잘못되었습니다'를 5번 정도 받았는데... 입력 문자 양 옆에 공백이 있다. strip으로 벗겨준 뒤 입력을 받고 출력하자. import sys N, M = map(int, input().split()) number_pokemon = 1 pokemon_dict1 = {} pokemon_dict2 = {} for _ in range(N): name = str(sys.stdin.readline()).strip() pokemon_dict1[number_pokemon] = name pokemon_dict2[name] = number_pokemon number_..
#214 백준 파이썬 [9987] 포켓몬 마스터 - 웹크롤링 https://www.acmicpc.net/problem/9987 #Solution 데이터의 크롤링, html 파싱 전 과정을 익혀야 풀 수 있는 문제다. +예전과 바뀐 포켓몬스터 (이제는 없어져버린 포켓몬들...)들에 대한 고민을 하지 않아도 된다. 아카이브에 저장된 페이지를 기반으로 하기 때문이다. 2일 밤낮을 세워 데이터 크롤링을 하나씩 살펴보자. #1 웹 크롤링을 위한 준비 from bs4 import BeautifulSoup import requests import re 우선 웹크롤링의 필수 패키지인 BeautifulSoup4와, 인터넷으로 url요청 기능을 할 requests 패키지, 그리고 개떡 같은 HTML사이에서 의미 있는 단어를 찾아내기 위한 정규표현식 re 패키지를 임포트 해준다. 정..
#213 백준 파이썬 [2740] 행렬 곱셈 https://www.acmicpc.net/problem/2740 #Solution 파이썬 행렬 곱셈은 N*M 행렬과 M*K 행렬이 만나 N*K행렬을 만든 다는 것만 기억하면 된다. N, M = map(int, input().split()) A = [] for _ in range(N): A.append(list(map(int, input().split()))) M, K = map(int, input().split()) B = [] for _ in range(M): B.append(list(map(int, input().split()))) #행렬 곱셈 C = [[0 for _ in range(K)] for _ in range(N)] for n in range(N): for k in range(K): for..
#212 백준 파이썬 [9375] 패션왕 신혜빈 https://www.acmicpc.net/problem/9375 #Solution 산수를 생각하면 쉽다. 알몸으로 다니지 않는 경우의 수는 (종류별 옷의 수) + 1을 전부 곱해주고 (해당 종류의 옷을 안 입는 경우의 수를 포함한 것) 알몸의 경우의 수인 1만 빼주면 된다. T = int(input()) for _ in range(T): n = int(input()) #0일때 탈출 if n == 0: print(0) continue wearable = dict() for _ in range(n): wear_name, wear_type = map(str, input().split()) #같은 옷 분류 중, 이름은 버리고 종류만 가져가기 if wear_type in wearable.keys(): weara..
#211 백준 파이썬 [2981] 검문 - GCD https://www.acmicpc.net/problem/2981 #Solution 최대공약수 함수를 이용해 푸는 문제이다. 나머지가 같은 수의 집합체는 큰 수부터 정렬했을 때, 두 수의 차이가 일정하다는 뜻이다. 즉 다시 말해 a, b, c, d(a>b>c>d)의 나머지가 같은 수를 구하고자 할 때는 a-b, b-c, c-d 의 최대공약수를 구하면 된다. 최대공약수를 구했다면 해당 수의 약수를 출력해주면 된다. #최대공약수를 빠르게 구해주는 유클리드 호제법 def gcd(x,y): mod = x % y while mod >0: x = y y = mod mod = x % y return y #약수 리스트를 구해주는 함수 def div(x): div_list = [x] for i in range(2, in..