백준 45

백준 1021번: 회전하는 큐 (파이썬)

자료구조를 활용하는 문제파이썬에는 deque라고 하는 양쪽으로 데이터를 넣고 뺄 수 있는 자료구조가 존재하는데 이걸로 양방향 순환 큐를 구현했다. from collections import dequen, m = map(int, input().split())m_list = list(map(int, input().split()))# 회전하는 큐 생성n_list = deque(i+1 for i in range(n))cnt = 0for i in range(m): while(True): # 첫번째 자리에 원하는 수가 나올때까지 회전을 반복 if m_list[i] == n_list[0]: n_list.popleft() break else: # 리스트의 길이를 2로 나눈 ..

백준 2024.08.02

백준 14469번: 소가 길을 건너간 이유(파이썬)

소가 도착하고 입장하기까지 걸리는 시간을 출력하는 비교적(?) 간단한 문제도착한 시간에 다른 검사를 하고 있다면 더 기다려야하는 문제만 해결해주면 됐다n = int(input())arr_list = list()for i in range(n): arr_list.append(list(map(int, input().split())))# 입장시간을 기준으로 정렬arr_list.sort(key=lambda x: x[0])# 처음 입장한 소의 정보는 일단 저장total = arr_list[0][0] + arr_list[0][1]for x,y in arr_list[1:]: # 소가 도착한 시간에 아무일도 없고 늦게 왔을 때 if total

백준 2024.08.02

백준 11724번: 연결 요소의 개수 (파이썬)

미루고 미루던 그래프 탐색 이론 2트함수를 작성하는 것도 아직은 모르겠다. 일단 그래프 탐색 이론에서 꼭 들어가는거1. 방문 기록 리스트2. 방문 예정 리스트 from collections import dequen, m = map(int, input().split())n_dict = {i+1:[] for i in range(n)}# 입력받은 값 저장하는 용도for i in range(m): u, v = map(int, input().split()) n_dict[u].append(v) n_dict[v].append(u)# 방문했는지 안했는지의 여부 T/Fvisited = [False for i in range(n+1)]# 연결이 끊기면(?) 카운트cnt = 0# 정점 한 번씩 가기for i in ra..

백준 2024.07.10

백준 19941번: 햄버거 분배 (파이썬)

햄버거를 선택할 수 있는 거리만큼 리스트를 잘라서 비교하면 되지 않나 생각했던 문제막혔던 부분은 첫번째 자리에서 앞뒤로 리스트를 빼올때 마이너스를 어떻게 처리하냐였다.# N = 사람, K = 먹을 수 있는 거리N, K = map(int, input().split())str = list(input())for i in range(len(str)): # 사람이 나왔을 때만 리스트 탐색 if str[i] == 'P': # 음수가 나올 경우를 대비 start = max(0, i - K) # 인덱스를 넘어갈 경우를 대비 end = min(len(str), i + K + 1) for j in range(start, end): if str[j] == 'H': ..

백준 2024.07.03

백준 16948번: 데스 나이트 (파이썬)

항상 그래프 탐색 이론 해야지만 하고 넘어가다가 결국 랜덤 문제에서 마주침나 혼자 다 풀었다고 할 수는 없지만 원래 시작이 반이니가 반만 내가 더 하면 그래프 이론 할 수 있겠지 머 from collections import dequedef bfs(r1, c1): # 방문할 위치 q q = deque([(r1,c1)]) # 방문한 위치에 언제 방문했는지 visited[r1][c1] = 0 while q: r, c = q.popleft() # 나이트가 갈 수 있는 방향 for rr, cc in [(-2,-1),(-2,1),(0,-2),(0,2),(2,-1),(2,1)]: # 현재 위치에서 이동했을 때 위치 nr, nc = r+rr, c+cc # 체..

백준 2024.06.26

백준 2870번: 수학숙제 (파이썬) _리스트 출력하기 / for-else

M = int(input())n_list = list()for i in range(M): str = input() filter = '' for j in str: if j.isdigit(): filter += j else: if filter != '': n_list.append(int(filter)) filter = '' else: if filter != '': n_list.append(int(filter))n_list.sort()print(*n_list, sep='\n') 잘 쓴 코드라고 생각하진 않지만 지난번에 어디선가 발견한 파이썬의 for-else문과 리스트를 for문 없이 출력하는 방법을 사용해봐서 기록 for-else문의 경..

백준 2024.06.21

백준 2792번: 보석상자 (파이썬)

조건 :  한 아이에게 같은 보석만을 준다  보석을 안줘도 상관이 없음찾아야 할 결과 :  가장 많은 보석을 가져간 학생이 가지고 있는 보석의 개수 알고리즘 분류 : 이분 탐색이걸 어떻게 이분 탐색으로 풀어낼 수 있나 하는 고민이 들었다 각자 가져가는 보석의 개수가 다른데 식을 어떻게 짜는 건지 알 수가 없었다.보석을 최대로 많이 가져갈 수 있는 수는 보석 리스트에서 제일 큰 수와 같으므로 max = max(보석 리스트) N,M = map(int,input().split())# 보석 담을 리스트M_list = list()for i in range(M): M_list.append(int(input()))# 정렬M_list.sort()# 한 명이 가질 수 있는 최소값, 최대값min = 1max = max(..

백준 2024.06.19

백준 1120번: 문자열 (파이썬)

단순히 문자열에서 한개씩 뽑아와서 비교하면 되는 문제인데 고려해야할 점은 A 문자열의 길이가 B보다 작을 때의 조건알파벳을 추가하지 않고 B에서 A길이만큼 뽑아오면 되지 않을까 생각했다.A, B = input().split()total = list()cnt = 0# 두 문자열의 길이가 같으면 그냥 하나씩 뽑아서 비교if len(A) == len(B): for i, j in zip(A, B): if i != j: cnt += 1 total.append(cnt) # 두 문자열의 길이가 다르다면else: # 반복회수는 두 문자열의 길이 차이 +1 만큼 for _ in range((len(B) - len(A)) + 1): cnt = 0 ..

백준 2024.06.12

백준 1817번: 짐 챙기는 숌 (파이썬)

알고리즘 분류 : 그리디 알고리즘 그리디 알고리즘이면 최선의 방법을 찾는 걸로 알고 있는데 그냥 푼 것 같은 느낌처음엔 무거운 것부터 정렬해야하나 싶었는데 그럼 무거운 것과 가벼운 것이 하나의 박스에 들어가면 어떻게 계산해야하나 머리가 안돌아갔다 그래서 그냥 차근차근 계산해보기로일단 최대로 필요한 박스는 책의 개수 N개 만큼일 테니 크기가 N인 배열을 생성해서 책의 무게를 하나씩 더해본다담을 수 있는 최대 무게 M을 넘어가면 다음 상자로 넘어가는 방식으로 진행했다. # n = 책의 개수, m = 상자의 최대 무게n,m = map(int,input().split())# 책이 0개가 이상일 때만 if n != 0: n_list = list(map(int,input().split())) # 무게를 더..

백준 2024.06.05

백준 1931번: 회의실 배정 (파이썬)

한 회의실을 겹치지 않게 쓸 수 있는 최대의 경우의 수를 출력하는 문제 제일 먼저 생각했던 건 일단 시작 시간을 기준으로 정렬일찍 시작할수록 남는 시간이 많기 때문에 시작 시간이 제일 빠른 것부터 카운트 두 번째로 고민해야하는 부분은 종료 시간인데제일 먼저 시작해놓고 제일 나중에 끝난다면 다른 사람은 회의에 참여할 수 없기 때문에끝나는 시간이 언제인지도 파악해야 한다. N = int(input())time = list()for i in range(N): # s = 회의 시작시간 , e = 회의 끝나는 시간 s,e = map(int,input().split()) time.append([s,e])# 회의 시작시간을 기준으로 한 번 정렬time.sort(key=lambda x: x[0])# 회의 끝나는 ..

백준 2024.05.29