반응형

Algorithm_study 19

Programmers 올바른 괄호

문제: 해당 문제는 스택 문제이다. "(" 일 때 stack에 넣은 후 ")"일 때 stack 에 아무것도 없으면 False, 있으면 "("제거 => 마지막에 stack에 아무것도 없으면 True, 아니면 False ex) "( ( ) ) ( )" for문 첫 번째 : stack = [ "(" ] for문 두 번째 : stack = [ "(" ,"(" ] for문 세 번째 : ")"일 때 -> "("제거 stack = [ "(" ] for문 네 번째 : ")"일 때 -> "("제거 stack =[ ] for문 다섯 번째, 여섯 번째 위와 같음 마지막 => stack = [ ] 비어있으므로 짝이 맞아서 True 내 답안:

Programmers 의상

해당 문제를 보자마자 clothes의 종류 딕셔너리를 만들었다. {"headgear" : 2, "eyewear":1} 그 다음엔 확률 문제랑 같다... 처음엔 headgear 1 + headgear 1 + eyewear 1 + headgear2 X eyewear1 =5 이렇게 카테코리 하나씩 + 종류별로 같이 입을 때 라고 생각하고 풀었는데, 오답이었다! headgear X eyewear 이 부분에서 오해했다. 왜냐하면 하나도 안 입었을 때를 고려를 안했던 것! 그냥 경우의 수를 구해보자면.... ex) a, b, c 각자 다른 종류의 옷 aa, bb, cc => 경우의 수 조합 직접 구하기 a / a / b / b / c / c ab =4개 / ac =4개 / bc =4개 abc = 8개 = 6 + 1..

딕셔너리 추가 (키 값이 존재하지 않을 때)

2차 배열 clothes의 각 리스트 두번째 요소에 clothes의 옷 종류가 있다. headgear 2개, eyewear 1개가 있다. 이것을 dictionary에 추가하고싶다. 위 코드가 너무 복잡하므로 아래와같이 간결하게 수정할 수 있다. 두 번째 for 루프 제거: 두 번째 for 루프를 제거하고, 대신에 clothes_dict.get(category, 0) + 1을 사용하여 딕셔너리에 키가 이미 존재하면 값을 증가시키고, 없으면 0에서 시작하게 합니다. 변수 이름 변경: 반복문에서 i와 j 대신에 의미있는 이름인 _ (언더스코어)와 category를 사용하여 가독성을 높였습니다. ↓ 딕셔너리 get 문법 (점프 투 파이썬) 즉, 딕셔너리.get(x, "디폴트값") (x=딕셔너리의 키값) clot..

Programmers 전화번호 목록

1. 리스트 노가다 리스트에 sort()하면 자릿수대로 정렬되는줄알고....사실 for문 한 번만 사용해도 됐을 텐데 ㅠ 계속 시도한 결과 ㅋㅋ 전화번호 목 역시 시간초과가 되었다....... 참고 : 리스트를 sort()할 때 ! ;;; 어이없게 시간 날리고 2. re 또 시간초과............. * re함수! Python_re.findall() 정규 표현식(Regular Expression) : 문자열에서 특정한 패턴을 찾거나 대체, 추출하는 데 사용되는 문자열 패턴 ▪ '\d' : 숫자를 의미함 ▪ '\w' : 문자나 숫자, 밑줄 문자(_)를 의미함 ▪ '\s' : 공백 문자 oaho.tistory.com 최종답안! 3. startswith : 문자열이 지정 문자열에 포함되는지 ! re사용했..

Programmers 포켓몬

문제 핵심 - num의 개수인 N개중에 최대 N/2개를 가져갈 수 있다. - 최대한 많은 종류로 return 조건: 중복된 번호는 각자 1개로 본다. 위 입출력 예시 #3 => 최대 3개를 가져갈 수 있지만, 최대 종류가 2개이기 때문 2가 답이다.(ex. [2,2,3] = 3개를 가져갈 수 있지만 종류는 최대가 2) 답안: len(nums/2)는 가져갈 수 있는 포켓몬 개수 최대, len(nums_uni)는 포켓몬의 종류다. 가져갈 수 있는 포켓몬 개수 최대 보다 같거나 작아야한다. * Set함수 : list의 수를 uinque하게 바꿔준다. 근데 나는 sort함수랑 조금 헷갈렸다. set은 집합 형태로 바꿔주기 때문에 다시 list로 만들어줘야한다! 더 간단하게 쓰면 결국, 둘 중에 최솟값이다.

BAEKJOON # 15988

문제: https://www.acmicpc.net/problem/15988 15988번: 1, 2, 3 더하기 3 각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 1,000,000,009로 나눈 나머지를 출력한다. www.acmicpc.net 풀이: - 해당 문제는 DP문제로 점화식을 구할 수 있다. - n= 1, 2, 3, 4 까지 구해보면 dp(n) = dp(n-1) + dp(n-2) + dp(n-3) 임을 확인할 수 있다. - n=4 까지의 dp변수에 리스트로 담아놓은 후 n=5부터 이 리스트로 구할 수 있다. 코드: import sys input = sys.stdin.readline dp = [1, 2, 4, 7] for i in range(int(input())): n ..

Algorithm_study/DP 2023.08.04

deque

덱(deque) : 큐(queue) 와 스택(stack)의 기능을 모두 가지고 있는 자료구조 양쪽 끝에서 데이터의 삽입과 삭제가 모두 효율적으로 이루어질 수 있도록 설계되어 있음 # deque from collections import deque #덱 생성 my_deque = deque() #요소 삽입 my_deque.append(1) # 오른쪽 끝에 요소 추가 my_deque.append(3) my_deque.appendleft(2) #요소 삭제 element = my_deque.pop() # 오른쪽 끝 요소 삭제하고 반환 element_left = my_deque.popleft() # 덱 출력 print(my_deque) => deque([2, 1, 3])

BAEKJOON #2108

해당 문제에는 빈도수 구하는게 관건이었던 문제다. 딕셔너리에 넣어서 Key값에 따라 Value값을 증가 시켰다. dic.get 을 사용해 최대 빈도값과 같은 Key값을 찾는 방식으로 했다. 코드 : import sys input=sys.stdin.readline N = int(input()) number_list = [] for _ in range(N): number_list.append(int(input())) #산술평균 avg = int(round(sum(number_list)/N, 0)) #중앙값 number_list.sort() med = number_list[N//2] #최빈값 #빈도수 구하기 dic = dict() for i in number_list: if i in dic: dic[i] +=..

Python_re.findall()

정규 표현식(Regular Expression) : 문자열에서 특정한 패턴을 찾거나 대체, 추출하는 데 사용되는 문자열 패턴 ▪ '\d' : 숫자를 의미함 ▪ '\w' : 문자나 숫자, 밑줄 문자(_)를 의미함 ▪ '\s' : 공백 문자를 의미함 ▪ '+' : 바로 앞에 있는 문자나 문자 클래스가 한 번 이상 반복되는 패턴을 찾음 ▪ '{m, n}' : 바로 앞에 있는 문자나 문자 클래스가 m번 이상, n번 이하로 반복되는 패턴을 찾음 ex) 숫자 2개를 추출하기 위한 정규 표현식 : r'\d{2}'

반응형