알고리즘 문제/BOJ (Python3, C++)

알고리즘 문제/BOJ (Python3, C++)

[BOJ][Python3/PyPy3] 15553 - 난로

아무리 고민해봐도 해답을 알 수 없었던 문제였던 난로 문제에 대해 정리해보고자 한다. (결국 다른 사람의 아이디어를 참고하여 내 나름대로의 방법으로 풀었다) 당연히 처음에 떠올렸던 풀이는 시간 간격별로 잘라서 비교하는 것이었는데, 처음에는 그 방법으로 풀 수 없다고 생각했다. 단순히 인접한 친구의 방문 시간 간격이 길 수록 성냥을 먼저 쓴다고 생각하기에는 그렇게 소비한 성냥 때문에 오히려 더 많은 시간에 난로를 지펴야 하는 것 아닌가 하는 생각을 했다. 사실 문제를 풀면서 계속 헷갈렸던 것이, 친구가 올 때까지 난로를 핀다는 이상한 생각에 계속 사로잡혀 있었다. 가령 다음과 같이 친구가 방문을 하는 상황에 성냥이 2개 있다고 하자. 최적해의 알고리즘대로라면 '10' 시간에 방문하는 친구가 올 때 난로를 ..

알고리즘 문제/BOJ (Python3, C++)

[BOJ][Python3/PyPy3] 5639 - 이진 검색 트리

이전의 등산 문제와 마찬가지로.. 수많은 "맞왜틀?!!" 을 외치게 만든 문제. 분명 알고리즘은 맞는 것 같은데, 다른 사람의 정답 알고리즘과 같은 틀의 알고리즘인데 왜 런타임에러가 나고, 시간초과가 발생하는 것인지 몰라서 고생했던 문제이다. 다른 사람의 코드와 내 코드를 비교하면서 배운 점들을 기록해보고자 한다. 다음은 내가 비교했던 분의 정답코드가 담긴 블로그 주소이다. https://developmentdiary.tistory.com/442 [Python]트리 백준 5639 문제 이진 검색 트리는 다음과 같은 세 가지 조건을 만족하는 이진 트리이다. 노드의 왼쪽 서브트리에 있는 모든 노드의 키는 노드의 키보다 작다. 노드의 오른쪽 서브트리에 있는 모든 노드의 � developmentdiary.tis..

알고리즘 문제/BOJ (Python3, C++)

[BOJ][Python3/PyPy3] 16681 - 등산 (다익스트라)

교내 동아리에서 진행한 알고리즘 스터디의 마지막 수업으로 다익스트라를 배웠다. 연습 문제 중 이 문제가 개인적으로 막힌 부분이 많았고, 그로부터 배운 것들을 정리하고자 한다. 우선 이 문제를 풀기 위한 아이디어도 떠오르지 않았다. 결국엔 동아리 스터디 내용을 통해 아이디어를 얻고, 아이디어를 구현하여 제출하였다. 아이디어는 다음과 같다. 집에서 갈 수 있는 모든 산의 정상들 학교에서 갈 수 있는 모든 산의 정상들 이 두가지를 따로 구한다음 각각에서 구한 산의 정상의 교집합을 취하여 문제가 원하는 방식대로 계산하면 된다. 만약 교집합이 없다면, 답이 없다는 뜻. 나는 다익스트라를 구현하고, 다익스트라의 결과로 나온 집/학교에서 출발 했을 때 갈 수 있는 모든 산의 정상들 (노드) 번호, 각각의 노드로 가는..

알고리즘 문제/BOJ (Python3, C++)

[BOJ][Python3/PyPy3] 17503 - 맥주축제 (우선순위큐, 그리디)

지난 번에는 맥주축제를 제일 먼저 떠올랐던 이분탐색으로 풀어보았다. 이번에는 학습 목적에 맞게 우선순위 큐로 풀어보고자 한다. 우선순위 큐로 풀 때는 다음과 같은 알고리즘을 사용하였다. 1. 맥주를 도수가 낮은 순으로 우선 정렬하고나서 선호도 순으로 정렬한다. 2. 맥주가 있는 리스트를 돌면서 맥주를 하나씩 뽑는다. 2-1. 뽑은 맥주의 도수를 현재 도수로 한다. 2-2. 뽑은 맥주의 선호도를 우선순위 큐에 넣는다. 2-3. 우선순위 큐에 있는 선호도 합과 기준 합을 비교한다. 2-4-1. 기준 합보다 크거나 같다면 find변수를 True로 바꾸고 현재 도수를 출력한다. 2-4-2. 기준합보다 작다면 우선순위 큐에서 선호도가 가장 작은 원소를 pop한다. 3. 2번과정을 반복한다. 4. 만약 find변수..

알고리즘 문제/BOJ (Python3, C++)

[BOJ][Python3/PyPy3] 17503 - 맥주축제 (이분탐색, 그리디)

교내 동아리에서 진행한 알고리즘 스터디에서 '우선순위 큐' 의 연습문제로 주어졌던 문제이다. 우선순위 큐를 사용하기 전에 제일 먼저 떠오른 풀이는 '이분 탐색' 아니나 다를까 문제 알고리즘 분류에도 '이분 탐색'이 있었다. 이분 탐색은 항상 익숙하지 않고 힘들었기에, 오랜만에 연습해보기 좋은 문제라고 생각했다. 내가 떠올린 아이디어는 '맥주의 선호도' 값을 기준으로 정렬하고 설정한 맥주의 도수보다 작은 맥주 중, 선호도가 높은 것들만을 그리디하게 뽑아서 선호도의 합을 구하는 것이다. 그리고 맥주의 도수를 기준으로 이분탐색을 진행하여 가능한 최소 도수를 구하고 최소 도수가 없다면 -1을 출력하도록 하면 된다 def check(mid): global kind, day, sum_taste s = 0 cnt =..

알고리즘 문제/BOJ (Python3, C++)

[BOJ][Python3/PyPy3] 15811 - 복면산?!

solved.ac 기준 실버2 수준이었던 제게는 매우 어려웠던 스터디 연습 문제 이 문제를 푸는 과정을 적으며, 효율적인 알고리즘에 대한 복기를 해보려고 합니다. [문제] 복면산이란 수학 퍼즐의 일종으로, 어떤 계산식의 각 숫자들을 특정 문자로 바꾸면 각 문자가 어떤 숫자인지 맞추는 퍼즐이다. => 각 문자가 어떤 '숫자' 인지 맞추는 퍼즐입니다. 저는 '숫자'와 '수'를 혼동해서 "A = 10 같은 것도 가능할까?" 같은 쓸데없는 고민도 했었습니다. 복면산 문제가 주어질 때, 답이 존재하는지 여부를 출력하시오. 단, 같은 문자는 같은 숫자에 대응되어야 하며, 서로 다른 문자는 서로 다른 숫자를 나타낸다. 또한, 수는 0으로 시작할 수 있다. =>아래 예시 힌트가 없었다면 빼먹고 체크를 안할 수도 있었던..

에버듀
'알고리즘 문제/BOJ (Python3, C++)' 카테고리의 글 목록 (8 Page)