728x90
반응형

Algorithm 137

[Baekjoon 1654 / Python / 실버2] 랜선 자르기

이분 탐색 문제이다. 늘 결과 도출 부분에서 묘하게 헷갈린다. # 실버2 -> 이분 탐색"""K : 이미 가지고 있는 랜선의 개수N : 만들어야 할 랜선의 개수data[] : K개 랜선 리스트start : 1 -> 랜선 최소 길이end : max(data) -> 랜선 최대 길이- 랜선 길이를 기준으로 이분 탐색 실시- 반복할 때 마다 조건 검사    -> 해당 길이로 N개 랜선 제작이 가능한지    -> 모든 랜선을 일일이 길이로 나눠 총 랜선 개수 세기- 최대값을 찾아야 하므로 end 출력"""import sysinput = sys.stdin.readlineK, N = map(int, input().split())data = [int(input()) for _ in range(K)]start = 1en..

[Baekjoon 9465 / Python / 실버1] 스티커

DP 문제이다. 언제나 어렵고 새롭고 가장 싫어하는 알고리즘이다. # 실버1 -> DPimport sysinput = sys.stdin.readline# 테스트 케이스 개수T = int(input())for _ in range(T):    N = int(input()) # 스티커 길이    sticker = []    sticker.append(list(map(int, input().split())))    sticker.append(list(map(int, input().split())))    if N == 1:        print(max(sticker[0][0], sticker[1][0]))        continue    dp = [[0] * (N + 1) for _ in range(3)] ..

[Baekjoon 11000 / Python / 골드5] 강의실 배정

그리디, 우선순위 큐 문제이다. # 골드5 -> 그리디, 자료구조, 정렬, 우선순위 큐import heapqimport sysinput = sys.stdin.readlineN = int(input())data = [list(map(int, input().split())) for _ in range(N)]data.sort()# 첫번째 시작하는 수업의 종료시간을 저장# 종료시간은 우선순위가 됨pq = []heapq.heappush(pq, data[0][1])for i in range(1, N):    # 다음 수업과 진행중인 수업이 중복되지 않을 경우 진행중 수업 빼기    if data[i][0] >= pq[0]:        heapq.heappop(pq)    heapq.heappush(pq, data..

Algorithm/Greedy 2025.01.23

[Baekjoon 2002 / Python / 실버1] 추월

구현, 문자열, 해시 테이블 문제이다. # 실버1 -> 구현, 자료구조, 문자열, 해시# 들어간 순서 해시 테이블로 저장해두기# 나온 차량 순서 기준으로, 이후 나올 차량의 "들어올 때 인덱스"를 찾아서# 나온 차량의 들어올 때 인덱스가 한 번이라도 더 클 경우 result += 1N = int(input())go_in = dict()come_out = []for i in range(N):    go_in[input()] = ifor i in range(N):    come_out.append(input())result = 0for i in range(len(go_in) - 1):    # 현재 나온 차량의, 들어올 때 순서    out_car = go_in[come_out[i]]    # 이후 나올 차..

[Baekjoon 14503 / Python / 골드5] 로봇 청소기

구현, 시뮬레이션 문제이다. 문제에 적힌 그대로 구현하면 풀리지만, 코드로 옮기는 과정에서 한두개의 실수조차 범하지 않기는 어렵다. 복잡한 로직은 필요 없이 문제를 아주 세심히 읽고 오차 없이 완벽하게 구현해내면 된다. 물론 난 제대로 안읽어서 고생했다. # 구현, 시뮬레이션import sysinput = sys.stdin.readline# 입력받기N, M = map(int, input().split())x, y, d = map(int, input().split())room = [list(map(int, input().split())) for _ in range(N)]# 0, 1, 2, 3 -> 북 동 남 서dx = [-1, 0, 1, 0]dy = [0, 1, 0, -1]# 청소 시작room[x][y] ..

[Baekjoon 1987 / Python / 골드4] 알파벳

DFS, 백트래킹 문제이다. 상하좌우 탐색을 요하기 때문에 BFS로도 잠시 생각했었으나 백트래킹이 필요했기에 DFS로 진행했다. 어느정도 정석에 가까운 백트래킹 문제 같다. # DFS, 백트래킹import sysinput = sys.stdin.readline# 입력받기R, C = map(int, input().split())board = []for _ in range(R):    board.append(list(input().strip()))# 사전준비directions = [[-1, 0], [1, 0], [0, -1], [0, 1]]visited = [[False] * C for _ in range(R)]visited[0][0] = Truepath = set() # 집합으로 불필요한 중복 알파벳이 들어..

[Baekjoon 2668 / Python / 골드5] 숫자고르기

DFS 문제이다. 진짜 최근에 푼 문제중 가장 어렵고 헷갈렸다.그래프의 싸이클을 찾는 문제이며, 문제만 읽고 싸이클을 찾아야 겠다는 유추를 해내기가 힘들다. 그래프로 옮기는 과정도 힘들고, 싸이클 찾는 로직도 매우 헷갈리고, 단방향인지 양방향인지, 역방향은 결과에 영향을 미치는지, 싸이클을 찾으면 해당 거쳐온 노드를 모두 추가하는 건 안되는지 판단해야 했고.. 하여튼 여러 방향으로 미치는 줄 알았다. # DFSimport sysinput = sys.stdin.readline# 입력받기N = int(input())graph = [[] for _ in range(N + 1)]for i in range(1, N + 1):    graph[i].append(int(input()))def DFS(node, sta..

Algorithm/DFS 2024.10.05

[Baekjoon 2573 / Python / 골드4] 빙산

DFS, BFS 문제이다. 처음에 DFS로 풀어보려 했지만 도저히 머리를 싸매도 감이 안 와서 다른 풀이를 참고해 BFS로 풀었다. 근데 풀고 나니 별로 어렵게 느껴지지가 않는다. 뭐든 그런 것 같다. 해내기 전엔 어렵고 해내고 나면 당연한 게 되고 말이다. # BFSfrom collections import dequeimport sysinput = sys.stdin.readlineN, M = map(int, input().split()) # 행, 열ice = [list(map(int, input().split())) for _ in range(N)]dx = [-1, 1, 0, 0]dy = [0, 0, -1, 1]def iceBreaker():    # 빙산을 녹이고 개수를 세는 작업이 1번의 반복   ..

Algorithm/BFS 2024.10.04

[Baekjoon 9375 / Python / 실버3] 패션왕 신해빈

수학, 조합론, 해시 테이블 문제이다.문제 자체는 단순하고 금방 해결할 수 있을 것 같지만 나에겐 의외로 힘들었다. 수학을 잘 하는 사람이라면 금방 풀 것 같다. # 수학, 조합론, 해시 테이블import sysinput = sys.stdin.readline# 테스트 케이스 개수만큼 반복N = int(input())for _ in range(N):    n = int(input()) # 의상 개수    clothes = {}    # 의상 입력받기, 의상 이름은 필요가 없음    for _ in range(n):        _, category = input().split()        clothes[category] = clothes.get(category, 0) + 1 # 의상 종류 증가시키기  ..

Algorithm/Math 2024.10.01

[Baekjoon 2447 / Python / 골드5] 별 찍기 - 10

분할 정복 문제이다. 접근 순서가 작은 문제에서 큰 문제이든 큰 문제에서 작은 문제이든, 결국 작은 문제의 해결 방식이 큰 문제의 해결로 이어진다면 그것은 분할 정복이라고 할 수 있다. 매우 까다롭고 헷갈리는 문제였다.  # 분할 정복import sysinput = sys.stdin.readlineN = int(input())start = ['***', '* *', '***'] # N이 3일 경우의 초기 모양def divideAndConquer(num, star):    # 종료 조건    if num == N:        return star        """    이 반복문은 기존 star를 그대로 출력하는 것을 의미한다.    따라서 3배 곱하여 append해주면 옆으로 3배 늘리는 것이 된다...

728x90
반응형