학교 수업량 우연화에 참여하여 제작한 프로젝트이다. 내용은 이름 그대로 개체의 다양성에 변화를 주면 생태계 평형이 어떻게 깨지는지 관찰하고 이에 대한 해결책을 직접 해봄으로서 생태계 다양성을 보전하는 자세를 기르자는 탐구보고서 이다. 이를 위해 파이썬으로 간단하게 시뮬레이션을 구현하였고, 이를 이용해 남획, 외래종 유입 등 다양한 방법에 대해 생태계를 관찰하는 활동을 하였다. https://github.com/python-programmer1512/Ecosystem_Diversity_Change_Simulation GitHub - python-programmer1512/Ecosystem_Diversity_Change_Simulation Contribute to python-programmer1512/Ec..
위 그림처럼 예선에 합격했다. 6월에 예선 주제가 올라온 걸 확인하고 주제를 선정하고 7월에 시험을 끝낸 후에 본격적인 개발을 진행하였다. 개발한 프로젝트는 경구약 안전 복용 서비스인데, 이름 그대로 경구약(우리가 먹는 일반적인 약들을 말함)을 먹는데 어려움이 있는 사람들을 위해 flask로 제작한 웹사이트에서 약에 대한 이미지를 입력받으면 약을 인공지능과 OCR을 사용하여 판별하고 결과를 웹사이트에서 텍스트와 음성으로 출력해 주는 서비스이다. 학교 행사와 공부, 개발을 같이 하다 보니 시간이 많이 부족했고, 특히 에러 때문에 코드를 여러 번 갈아엎어서 시간이 더욱 없었다.(일주일 동안 에러 때문에 진도를 못 낸 적 있음) 같이할 사람들도 모집을 못해서 혼자 하기 때문에 더욱 힘들었는데 다행히 마감 5분..
이 문제를 요약하면 N개의 수를 나열하고, 연속된 수들로 모둠을 여러 개 만든다. (1개에서 N까지 다양하게) 그때, 각 모둠끼리는 모두 직접 연결되어 있어야 하는데 그렇지 않을 경우, 부족한 개수만큼 점수가 오른다. 또 자신의 모둠이 아닌 다른 모둠과 연결되어 있을 때에도 개수만큼 점수가 오른다. 이때 점수의 최솟값을 찾는 문제이다. 이 그림으로 예를 들면, 이 그림에는 모둠이 2개가 존재하는데, 왼쪽에 있는 모둠은 내부에서 부족한 간선의 수는 3개가 되고, 오른쪽에 있는 모둠은 1개, 두 모둠을 잇는 간선 1개로, 이 그림은 5점을 가진다. 이 문제의 N의 범위는 2000 이하 이기 때문에 완전탐색은 통하지 않는다. 그럼 어떻게 풀 수 있을까? 누적 합과 dp 를 사용하면 풀 수 있다. dp [i]를..
문제를 요약하면 동그라미, 세모, 네모를 같은 모양이 연속으로 나열되도록 최소 횟수로 바꾸는 문제이다. 이문제에서 입력이 1,2,3 즉 동그라미, 세모, 네모만 존재하기 때문에 이 3개의 도형을 배치할 수 있는 경우의 수 6개를 반복문으로 탐색하면서 최소 개수를 구해주는 방식을 떠올릴 수 있다. 그다음은 어떻게 최소 개수를 구하냐 인데, 일단 두 도형을 바꿨을 때, 두 도형이 모두 최종적으로 있어야 하는 구간에 들어간다면 이 방법이 두 도형의 최소 변경 횟수가 될 것이다. 예를 들어보자. 1 3 3 2 1 1 3 2 라는 입력이 들어오고, 3 2 1 순서로 나타난다고 해보자. 그러면 최종적으로 3 3 3 2 2 1 1 1 을 만들어야 한다. 초기 입력을 숫자의 개수에 따른 구간을 나눠 보면 1 3 3 |..
요약하면 그래프가 주어지고, Q개의 쿼리에서 X, Y 가 주어지면 X, Y에서 시작하는 스패닝 트리의 최솟값을 구하라는 문제이다. 기존 스패닝 트리와는 다르게 두 점 X, Y에서 스패닝 트리가 시작할 수 있는데 이는 즉, 한 그래프 안에서 스패닝 트리가 2개가 나올 수도 있다는 소리가 된다. 그럼 이를 어떻게 해결할 수 있을까? 그 방법은 스패닝 트리의 특징을 생각해보면 알 수 있다. 스패닝 트리는 N개의 점에 대해 N-1 개의 간선을 가진다. 또 문제에선 X,Y 에서 시작하는 최소 스패닝 트리를 요구하기 때문에 N-1 간선에서 최대 1개의 간선을 제거할 수 있다. 간선을 2개 이상 제거 할 경우, 어떠한 점을 연결할 수 없게 된다. 그러므로 최대 선 1개만 지울 수 있다, 음수 가중치가 없기 때문에 선..
요약하면 i 번째 탑이 있으면 그 탑의 왼쪽에 있는 탑 중에서 i번째 탑의 높이보다 크거나 같은 높이를 가진 탑의 위치를 출력하고 없다면 0으로 출력하는 문제이다. 이 문제는 스택을 쓰면 되는 간단한 문제이다. 왼쪽부터 차례로 돌면서 스택에 있는 값들중 자신보다 작은 값들을 지워준다. 어차피 i+1 이후의 탑들 중 i번째 탑에 막힌다면 그전 탑에는 절대 도달할 수 없고, i 번째 탑보다 커도 그전 탑들은 i 번째 탑보다도 작기 때문에 쓸모가 없다. 그러므로 매 반복마다 i 번째의 탑보다 작은 높이의 탑들을 스택에서 빼주고 남은 스택의 첫 번째 탑의 위치를 구해주면 된다. 만약 스택에 들어있는 값이 없다면 0을 출력해 주면 된다. import sys from collections import deque i..
후기가 많이 늦긴 했지만 2023 KCC 한국 컴퓨터 종합 학술 대회에 참가하여 6월 18일(일요일)에 제주도를 당일치기로 갔다 왔다.(기간은 17~20일까지 인데, 학교 기말고사 준비 때문에 당일치기로 갔다 왔다..) 대회는 나, 충북과고의 지민준, 청주교대 이형석 선생님, 포항공대 나동빈 선생님과 함께 준비해서 논문을 작성하였다. 그러나 제주도에는 각자 사정으로 이형석 선생님과 나만 갔고, 거기서 여러 사람들이 만든 논문을 봤는데 아쉽게도 사진 찍을 타이밍이 안 나와서 사진은 없다. 나는 주니어 부분에 참여했는데 다른 주니어 부분 참여자들이 작성한 논문들의 퀄리티가 생각보다 좋아 우리나라에 재능 있는 분들이 많으시다는 것을 다시 한번 알게 된 거 같다. (여담으로 충북에서 논문을 쓸 정도로 코딩을 열..
어쩌다 보니 올리게 되었다. 1번 문제 요약하면 최대값, 최소값이 변경되는 경우의 개수를 구하는 문제이다. 최소값, 최대값 변수를 초기에 설정하고 입력받은 값을 보면서 조건에 해당될때마다 더해서 값을 구해주면 된다. 시간 복잡도는 O(n) import math n=int(input()) l=list(map(int,input().split())) inf=math.inf mx=-inf mn=inf cnt=0 for i in range(n): if mxl[i]: if mn!=inf: cnt+=1 mn=l[i] print(cnt) 2번 문제 2번 문제는 문제 사진은 없지만 요약하면 한점에서 다른 점으로 이동하는데 상하좌우, 대각선으로 한번에 1씩 갈 수 있다. 이때 걸리는 최소 거리를 구하는 문제인데, 이를 봤..
- Total
- Today
- Yesterday
- codeforces
- 트리
- 세그먼트 트리
- 완전 탐색
- discord bot
- 누적 합
- 알고리즘
- Python
- 선분 교차 판정
- 이분 탐색
- 다이나믹 프로그래밍
- 잡봇
- 자료구조
- 개발
- 자료 구조
- KOI
- 깊이 우선 탐색
- 그래프 탐색
- A Dance of Fire and Ice
- 그래프 이론
- 그리디 알고리즘
- 최소 스패닝 트리
- 이분매칭
- 느리게 갱신되는 세그먼트 트리
- BOJ
- C++
- 구현
- 정렬
- 수학
- 트리에서의 다이나믹 프로그래밍
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |