파이썬

    [python] 백준 - 19598. 최소 회의실 개수

    [python] 백준 - 19598. 최소 회의실 개수

    🤔문제 해결 우선순위큐 회의를 오름차순으로 정렬한다. 사용한 회의실의 끝나는 시각을 배열로 만든다. 우선순위큐로 사용할 것 회의를 하나씩 꺼내서 가장 빨리 끝나는 회의실과 회의 시작 시간을 비교 회의 시작 시간이 더 빠르면 회의실 추가 회의 시작 시간이 더 늦으면 해당 회의실의 끝나는 시각 업데이트 🍞 heapreplace는 가장 작은 요소를 빼고, 추가할 요소를 집어 넣는다. ( pop 후 push 를 합친것 - 더 빠르다고 한다.) 💻소스 코드 import sys import heapq input = sys.stdin.readline N = int(input()) meetings = [list(map(int, input().split())) for _ in range(N)] meetings.sort(..

    [python] 백준 - 1013. Contact

    [python] 백준 - 1013. Contact

    🤔문제 해결 정규표현식 정규표현식 문제인줄 모르고 열심히 풀었는데.... 하🤣 💥 match 를 쓰면 포함되어있는걸 찾기 때문에 fullmatch 를 써서 전체가 맞는 지 확인해줘야한다. match로도 맞는 구간이 나오기 때문에 답을 찾을 순 있지만 fullmatch가 있기 때문에 저걸로 찾으면 된다. 💻소스 코드 import re import sys input = sys.stdin.readline for tc in range(int(input())): p = re.compile('(100+1+|01)+') # 정규표현식 준비 m = p.fullmatch(input().strip()) # 매칭 print('YES') if m else print('NO') 📕문제 확인 출처: BACKJOON ONLINE ..

    [python] 백준 - 1174. 줄어드는 숫자

    [python] 백준 - 1174. 줄어드는 숫자

    🤔문제 해결 못풀다가 문제 유형에 백트래킹이 있길래 힌트를 얻어 백트래킹으로 구현해봤다. 아이디어는 현재 숫자의 끝자리보다 낮은 숫자들을 뒤에 추가하는 재귀함수를 만들었다. 현재 764이면 7640 => 끝 7641 => 76410 => 끝 7642 => 76420 => 76421 => 764210 => 끝 마지막에 sort만 해주면 빠른 시간 내에 모든 경우의 수를 순서대로 다 얻을 수 있다. 가끔 안풀리면 다른 사람의 코드를 참고하기 전에 유형으로 힌트를 얻어보자😀 💻소스 코드 N = int(input()) # 백트래킹을 이용한 문제 풀이 def bt(cur): answer.append(int(cur)) for j in range(0, int(cur[-1])): # 현재 숫자의 끝자리보다 낮은 숫자들..

    [python] 백준 - 1148. 단어 만들기

    [python] 백준 - 1148. 단어 만들기

    🤔문제 해결 딕셔너리에 퍼즐의 각 알파벳을 키, 그 알파벳의 개수와 사용된 횟수의 딕셔너리를 벨류로 가진다. 퍼즐에 있는 알파벳으로 낱말을 만들 수 있다면 퍼즐에서 사용될 알파벳의 used_cnt 를 +1 해준다. 위와 같은 결과가 나오게 되고, used_cnt 가 가장 적은 값들, 가장 많은 값들을 알파벳 오름차순으로 출력해준다. 💻소스 코드 import pprint import sys input = sys.stdin.readline # 인풋 받아서 단어 or 퍼즐 따로 배열로 만드는 함수 (두번 반복할거 같아서 함수로 만듦) def input_func(arr, sign): arr = [] while True: input_value = input().strip() if input_value == sig..

    [python] 백준 - 1105. 팔

    [python] 백준 - 1105. 팔

    🤔문제 해결 수가 20억이기 때문에 하나씩 하기에는 시간초과가 발생한다. 숫자의 범위가 주어지고, 8의 '최소' 개수를 구하라고 했다. 그러므로 각 자리수를 비교해보기로 했다. 먼저 자리수가 다른 경우에는 8의 최소 개수가 0이 된다. - 자리수가 다르면 각 자리의 수를 범위 내에서 아무거나 선택할 수 있기 때문에 자리수가 같은 경우 첫번째 자리부터 마지막으로 순차적으로 비교해본다. 각 자리가 서로 같은 8인 경우 최소 8 개수의 +1, 그리고 다음 자리 비교 각 자리가 서로 다른 경우 +0, 그리고 끝 - 뒤 자리의 숫자는 비교할 필요가 없다. 💻소스 코드 L, R = input().split() # 두 수의 자리수가 다른 경우 8이 들어가는 횟수는 최소 0이 나온다. answer = 0 if len(..

    [python] 백준 - 13023. ABCDE

    [python] 백준 - 13023. ABCDE

    🤔문제 해결 문제는 이어져있는 친구가 4명인지 물어보는 것... ( 헷갈렸다 ) 기본적인 DFS 문제이다. 중간에 조건을 줘서 잘 멈춰주기만 한다면 시간초과는 해결될 것이다. 💻소스 코드 import sys def dfs(current, cnt): global answer if answer == 1: # 답을 이미 찾았다면 dfs 멈추기 return if cnt == 5: # 답 찾았을 때 (친구가 4명) answer = 1 return visited[current] = 1 for neighbor in adj[current]: if not visited[neighbor]: dfs(neighbor, cnt + 1) visited[current] = 0 input = sys.stdin.readline ans..