- 스프링 초보
- 항해99 코테 스터디
- 코딩테스트 연습
- 알고리즘 공부
- 장고 기초
- 99클럽 코테 스터디
- 코테
- 이분탐색
- 백준 구현
- 프로그래머스 레벨1
- spring 기초
- 백준 dp
- 백준
- programmers
- 프로그래머스
- Django
- 스프링 기초
- 코딩테스트
- 백준 다이나믹프로그래밍
- 프로그래머스 level1
- 코테 연습
- 알고리즘 문제
- 장고
- TIL
- Spring 초보
- 백준 DFS와 BFS
- 항해99
- Django 기초
- BFS
- dp 알고리즘
- Today
- Total
목록전체 글 (74)
일일구름 IT
일단 이 문제는 이미 풀어본 문제라 작성했던 코드를 기반으로 TIL을 작성하고자 한다.사실 6일차 문제도 전에 이미 풀어봤던거였다.. 이게 99클럽 코테의 단점 중 하나인가그래서 TIL을 작성하고 나는 미들러 보너스 문제를 풀어보려고 한다. 일단 로직을 짤때 BFS 탐색 방법을 사용하고 매번 갈 수 있는 방향이 [ x-1, x+1, x*2 ] 라는 것을 염두해두었다. 내 코드from collections import dequen, k = map(int, input().split())queue = deque()def bfs(): queue.append(n) while queue: x = queue.popleft() # 위치가 동생의 위치와 같으면 해당 위치까지 가기위한 ..
이 문제는 DFS와 BFS 그래프 탐색을 이요해서 푸는 문제이다. 일단 DFS와 BFS의 개념에 대해서 알아보겠다. 깊이 우선 탐색 (DFS, Depth-First-Search)- 루트 노드에서 시작해서 다음 분기를 넘어가기 전까지 해당 분기의 모든 노드를 탐색- 탐색할때 한 방향으로 더이상 탐색할게 없을때까지 탐색한 후 돌아와 다른 방향 다시 탐색- 모든 노드를 탐색해야 하는 경우에 적합- 속도는 BFS보다 느림- 순환 알고리즘 형태, 재귀함수 사용O 넓이 우선 탐색 (BFS, Breadth-First-Search)- 루트 노드에서 시작하여 인접한 노드를 순서대로 탐색- 탐색할때 가까운 노드를 먼저 방문하고 먼 노드를 나중에 탐색- 두 노드 사이의 최단 거리 또는 경로를 구하는 경우에 적합- 재귀함수 ..
이번주 문제들은 다 이분 탐색에 대한 문제인 것 같다. 처음에 문제를 풀고 단순히 모든 강의 길이의 합을 m으로 나누어 평균을 구하고, 모든 강의를 넣는 다면 평균 크기인 블루레이 몇개 필요한지 구했다. 만약 블루레이 개수가 m보다 크면 평균 +1 을 해주고 작으면 평균 -1 을 하여 m과 같을때까지 블루레이 개수를 구했다. 이렇게 코드를 작성하여 제출한 결과 당연히 실패가 떴다. 역시 시간초과를 해결할때는 이분탐색이 기본인 것 같다. 내 코드n, m = map(int, input().split())lessons = list(map(int, input().split()))left = max(lessons)right = sum(lessons)while (left m: left = mid + 1 el..
일단 이 문제를 보고 for문을 이용해서 모든 점이 선분 내에 있는지 조사해보면 되지 않을까 ? 라고 생각했다그렇게 코드를 작성하고 제출한 결과 당연히 시간초과 !! ㅋㅋㅎㅋ 이번에도 이분 탐색 관련 문제인 것 같다 ... ^^내 생각엔 크기를 비교하는 탐색을 해야할때 시간초과를 해결하고 싶으면 이분탐색을 사용하는게 답인 것 같다 ! 내 코드n, m = map(int, input().split())points = list(map(int, input().split()))points.sort()lines = []for _ in range(m): a, b = map(int, input().split()) lines.append((a, b)) def min_binary_search(poi..
하하.. 이 문제는 실버2임에도 불구하고 너무 어려웠다 ... ㅜㅜ 흑흑미들러 난이도 쉽다는 말 취소.. 일단 내가 이분탐색 재귀함수에 대한 지식이 부족했던 것 같다.. !이번 기회에 더 깊이 공부하고 싶지만 당장 오픽공부가 더 급해서.. 다음으로 미루겠다 . ㅋㅋ 코드import mathk, n = map(int, input().split())lans = []for _ in range(k): lans.append(int(input()))lans.sort()max_lan = lans[-1]s = 0e = max_landef solution(lans, n, s, e): if s > e: return e cnt = 0 mid = math.ceil((s + e) / 2) ..
오늘부터 항해99 코테 스터디를 통해서 평일동안 매일 주어지는 문제를 푼다 !스터디의 첫문제가 바로 백준의 암기왕 문제였다. 문제를 처음 확인했을때 난이도가 실버4여서 당황했다... 물론 실버 + 골드5가 미들러 난이도이긴 하지만 보통 실버1,2, 골드5 문제를 풀기때문에 실버4는 너무 쉽기 때문이다... 일단 문제를 읽었을 때 단순히 입력값을 받고 note2의 요소가 note1에 있는지 확인하는 문제라고 판단하고 코드를 작성하였다. 첫 코드t = int(input())for _ in range(t): n1 = int(input()) note1 = list(map(int, input().split())) n2 = int(input()) note2 = list(map(int, inpu..
처음 이 문제를 보고 일단 모든 층 ( 0 1. 임의의 층보다 더 높을 때-> 블록을 제거하여 인벤토리에 넣은 시간은 2초이기 때문에- time += 높은 만큼 * 2- b += 높은 만큼 2. 임의의 층보다 더 낮을 때-> 블록을 쌓는데 걸리는 시간이 1초이고 인벤토리에 충분한 블록이 없으면 더이상 못 쌓기 때문에- 인벤토리 값이 낮은 만큼보다 크거나 같을때 time += 낮은 만큼- 인벤토리 값이 낮은 만큼보다 크거나 같을때 b -= 낮은 만큼- 인벤토리 값이 낮은 만큼보다 클때 break 첫 코드import sysn, m, b = map(int, input().split())ground = []for _ in range(n): ground.append(list(map(int, input()...
최근에 수학학원에서 애기들을 가르쳤던 내용이 비슷하게 문제로 나와서 신기했다.맨날 애기들 블록 개수랑 층 별로 블록 모양이 뭔지 가르치는데 내가 틀릴 수는 없지 ! 하고 문제를 풀기 시작했다. 문제를 보면 블록의 겉넓이를 구해야 하는데 한번에 모든 겉넓이를 구하는 것은 어렵겠다는 생각이 들었다.그래서 1층, 2층,... 이렇게 층별로 나눈뒤에 각층의 옆 넓이를 구하고 윝 넓이, 밑넓이를 더해주는 방식으로 풀고자 한다.참고로 밑넓이와 윗넓이는 둘 다 n*m으로 동일하다. 코드from collections import dequen, m = map(int, input().split())blocks = []max_floar = 0for _ in range(n): a = list(map(int, input(..