본문 바로가기

Algorithm43

[백준] 20437 파이썬 - 문자열 게임 2 문제https://www.acmicpc.net/problem/20437  코드import sysfrom collections import defaultdictinput = sys.stdin.readlinet = int(input())def solution(): w = input().strip() k = int(input().strip()) dict = defaultdict(list) for i in range(len(w)): if w.count(w[i]) >= k: # k개 이상 등장하는 문자열인 경우 dict[w[i]].append(i) # 좌표 저장 if not dict: print(-1) else: t.. 2025. 1. 9.
[백준] 9935 파이썬 - 문자열 폭발 문제https://www.acmicpc.net/problem/9935 첫 풀이 코드import sysinput = sys.stdin.readlinestr = input().strip()explosion_str = input().strip()def check_explosion(str): # 시간초과 # new_str = "".join(str.split(explosion_str)) new_str = str.replace(explosion_str,"") return new_strdef solution(): global str while(True): # 문자열이 폭발 문자열을 포함하지 않는 경우 break if explosion_str not in str.. 2025. 1. 9.
[백준] 2668 파이썬 - 숫자고르기 문제https://www.acmicpc.net/problem/2668첫 풀이 코드import sysfrom itertools import combinationsinput = sys.stdin.readlinen = int(input())array = [int(input()) for _ in range(n)]numbers = [i for i in range(1,n+1)]def find_match_set(arr): new_arr = [] for i in arr: new_arr.append(array[i-1]) arr.sort() new_arr.sort() if arr == new_arr: return True else: return .. 2025. 1. 8.
[백준] 1976 파이썬 - 여행 가자 문제https://www.acmicpc.net/problem/1976 풀이union - find를 쓰는 문제이다.연결 정보들의 정보를 돌며 만약 1이라면 연결되어 있으므로 Union 함수를 사용한다. 이후 여행 계획들을 앞에서부터 두 개씩 검사하며,루트 노드가 하나라도 다르다면 NO를, 아니라면 YES를 출력해주면 되는 문제이다.  코드import sysinput = sys.stdin.readlinen = int(input())m = int(input())parent = [i for i in range(n+1)] graph = []# 노드 n의 루트노드 returndef find(n): if parent[n] != n: parent[n] = find(pa.. 2025. 1. 8.
[백준] 1922 파이썬 - 네트워크 연결 문제https://www.acmicpc.net/problem/1922풀이최소 신장 트리를 구하는 간단한 문제였다. 오늘 다른 최소 신장 트리 관련 문제(아래 링크)를 풀어서 쉽게 풀 수 있었다. [백준] 1647 파이썬 - 도시 분할 계획문제https://www.acmicpc.net/problem/1647풀이최소 신장 트리 문제이다.최소 신장 트리란 가장 적은 비용 + 사이클 없음 + 모든 정점이 연결되어있는 트리이다. 신장 트리에서 연결된 단 하나의 간선을 끊jeongeunji1127.tistory.com 코드import sysinput = sys.stdin.readlinen = int(input())m = int(input())graph = []parent = list(range(n+1))for _ .. 2024. 11. 12.
[백준] 2138 파이썬 - 전구와 스위치 문제https://www.acmicpc.net/problem/2138풀이아이디어가 필요한 그리디 문제였다. 주어진 입력 000을 목표 전구 010로 변환시키려면 각각 1,2,3번째 전구를 전부 눌러야한다. 이 문제의 핵심 아이디어는 전구를 누르는 순서는 관련이 없다는 것이다.1->2->3 순서로 누르든, 3->1->2 순서로 누르든 결과는 같다. 따라서 순차적으로 앞 인덱스부터 스위치를 누르면서 검사해주면 된다.순차적 검사이므로 한번 지나간 전구를 다시 검사하지 않는다.현재 검사하는 전구의 왼쪽 전구가 goal_bulbs와 다른 채로 넘어갈 수 없다는 뜻이다.(다시 앞의 전구로 돌아가 바꿀 수 없기 때문) 또한, 0번째 전구 누르기 or 누르지 않는 경우 두 가지의 경우의 수가 존재하므로 나누어 생각해주.. 2024. 11. 12.
[백준] 1647 파이썬 - 도시 분할 계획 문제https://www.acmicpc.net/problem/1647풀이최소 신장 트리 문제이다.최소 신장 트리란 가장 적은 비용 + 사이클 없음 + 모든 정점이 연결되어있는 트리이다. 신장 트리에서 연결된 단 하나의 간선을 끊으면 2개의 신장 트리로 나뉜다.따라서 위 문제에서 비용이 가장 높은 간선을 끊으면 2개의 신장 트리로 나눌 수 있다. 나는 최소 신장 트리 구현을 위해 크루스칼 알고리즘을 사용했다.크루스칼 알고리즘은 간선을 가중치 기준으로 정렬하고, 가중치가 작은 간선부터 선택하여 트리를 만든다. 자세한 풀이는 아래와 같다. 1. 주어진 입력을 가중치(비용 c)가 작은 순서대로 정렬for _ in range(m): a,b,c = map(int,input().split()) graph... 2024. 11. 12.
[프로그래머스] 파이썬 - 충돌위험 찾기 (PCCP) 문제풀이진짜 오래걸렸다여러분은 저처럼 쓰레기같이 풀지마세요 저는 빡구현으로 풀었는데요생각해보니까 그냥 딕셔너리 key값에 현재 초 + 현재 좌표로 해두고 1씩 더해주면 되는 문제였어요...이동을 한 로봇 기준으로 돌려도 되는 문제였읍니다..코드from collections import defaultdictfrom collections import Counterimport copydef solution(points, routes): answer = 0 # 위치 좌표 딕셔너리 선언 positions = defaultdict(list) for i in range(len(points)): positions[i+1] = points[i] # key = 로봇의 .. 2024. 11. 1.
[프로그래머스] 파이썬 - 순위 검색 (KAKKO) 문제풀이첫번째 코드 - 시간초과from itertools import productdef check_query(language, job_type, ex_level, soulfood,score): global information cnt = 0 a = [] b = [] c = [] d = [] if language == "-": a = ["cpp", "java", "python"] else: a.append(language) if job_type == "-": b = ["backend", "frontend"] else: b.append(job_type) if ex_level == "-": .. 2024. 11. 1.