본문 바로가기

(385)
[Python] 25916번 싫은데요 https://www.acmicpc.net/problem/25916 25916번: 싫은데요 $6$번째 구멍부터 $8$번째 구멍까지 막으면 총 $9$의 부피를 소모하고, 최대값인 $9$를 출력한다 www.acmicpc.net 22/11/06 전형적인 투 포인터 문제로, 대회 도중에 쉽게 풀 수 있었다. 문제 접근 방식: 햄스터의 머리를 end포인터라고 하고, 햄스터의 꼬리를 start포인터라고 하자. 햄스터의 몸을 한 칸씩 늘리는 것은 end포인터를 뒤로 한 칸씩 당기는 것과 같다. 그러면, 생각을 한번 해보자. 우리는 햄스터가 몸을 늘릴 수 있을 만큼 최대한 늘리고 싶다는 사실을 아주 잘 안다. 그 말인즉슨, 한 칸을 만약에 늘릴 수 있을 때(몸을 늘릴 수 있는 공간이 있을 때) 햄스터가 괜찮다면(햄스터..
[Python] 25915번 연세여 사랑한다 https://www.acmicpc.net/problem/25915 25915번: 연세여 사랑한다 훈규가 비밀번호를 모두 입력하기 위한 이동 거리의 최솟값을 출력한다. www.acmicpc.net 22/11/06 단순한 구현 문제로, 예제를 잘 보면 쉽게 해결할 수 있는 문제이다. 문제 접근 방식: 훈규가 비밀번호를 출력하기 위한 이동거리의 최솟값을 출력해야 한다. 근데 어차피 순서대로 입력해야 하므로, I에서 L로, L에서 O로, O에서 V로, V에서 E로... 그렇게 가는 이동거리는 고정되어있다. 때문에 처음 위치에만 관련이 있다. 예제에서는 처음 위치가 I일 때, 다시 말해 처음에 움직이지 않고 바로 출력해도 될 때의 경우의 이동거리를 줬으므로(84), 이를 이용해서, 입력받은 알파벳이 I에서 얼마..
[Python] 25918번 북극곰은 괄호를 찢어 https://www.acmicpc.net/problem/25918 25918번: 북극곰은 괄호를 찢어 극지 연구소에서 연구 중인 협이는 새로운 북극곰의 특성을 발견했다. 그것은 바로 북극곰이 $O$와 $X$를 보면 $()$와 $)($로 찢어버린다는 것이다. 협이는 이러한 북극곰의 특성을 이용하여 길이 $N www.acmicpc.net 22/11/07 에디토리얼에서는 그리디 문제라고 나와있었으나, 조금 스택을 곁들인 애드 혹 스러운 문제로, 쉬운 방법으로 구현할 수 있는 문제이다. 문제 접근 방식: 카운터 변수를 하나 선언을 해주고 괄호 문자열에서 (가 나오면 그 변수에 1을 더하고 )가 나오면 1을 뺐다. 북극곰은 항상 () 또는 )(처럼 열린 괄호와 닫힌 괄호를 쌍으로 생성하기 때문에, 북극곰이 생성..
[Python] 1737번 Pibonacci https://www.acmicpc.net/problem/1737 1737번: Pibonacci 첫째 줄에 P[n]을 출력한다. 값이 매우 커질 수 있으므로 1,000,000,000,000,000,000으로 나눈 나머지를 출력한다. www.acmicpc.net 22/11/08 신박한 2차원 DP문제로, 처음에는 재귀를 이용한 탑다운 방식으로 접근했었으나, 재귀 시간이 너무 오래 걸려 바텀업 방식으로 전환하여 풀 수 있었던 문제다. 문제 접근 방식: 이 문제를 보면, 기존 피보나치수열의 점화식과는 다르게 아래와 같은 점화식을 가지고 있다. 맨 처음 생각한 풀이는 위의 점화식을 재귀로 구현하고, DP테이블은 딕셔너리로 구현함으로써 하려고 했다. 딕셔너리의 키는 실수 연산을 통해서 구현하려고 했다. 근데, 이..
[구름 알고리즘 먼데이 챌린지] 3주차 4번 순환하는 수로 22/11/07 DFS/BFS 문제로, 사이클을 출력하는 문제이다. 문제 접근 방식: 사실 이 문제의 해설보다 더 간단한 방법으로 나는 풀었다. 심지어 BFS, DFS도 돌리지 않았다. 나는 문제 조건의 핵심을 꿰뚫어봤다. 먼저, 문제 조건을 보면, 사이클은 단 하나만 존재한다고 했다. 때문에, 노드들과 간선들이 주어져 있으면, 노드들 중에 간선이 하나만 연결되어 있는 노드들은 사이클을 이루고 있지 않다고 생각했다. 왜냐하면, 그 노드가 사이클에 포함되어있다면, 그 노드는 최소 2개 이상의 간선에 연결되어 있기 때문이다. 이러한 이유로, 사이클을 이루고 있지 않은 노드는 그 간선과 노드를 그래프에서 제거해버렸다. 이 과정을 계속 반복하다보면 결국 사이클 하나만 남게 되는데, 이것을 오름차순으로 출력하면 ..
[Python] 25793번 초콜릿 피라미드 https://www.acmicpc.net/problem/25793 25793번: 초콜릿 피라미드 코코는 특이하게 생긴 화이트 초콜릿과 다크 초콜릿을 무한히 많이 갖고 있다. 화이트 초콜릿은 각 모서리의 길이가 1인 사각 피라미드이고, 다크 초콜릿은 각 모서리의 길이가 1인 정사면체 모 www.acmicpc.net 22/10/15 전형적인 수학 문제로, $O(1)$의 시간 복잡도로 문제를 해결해야 풀 수 있다. 문제 접근 방식: 아래 그림을 보자. 아래 그림은, $2*3$ 피라미드의 한 층을 채우는 과정을 도식화한 것이다. 이 그림을 이용해, 예시를 하나 들어보겠다. 만약 $R = 3$, $C = 4$라면, 다음 그림과 같은 모습을 띄게 될 것이다. 이 그림은 $3*4$ 피라미드의 한 층을 채우는 데에 ..
[Python] 5011번 Robots on a grid https://www.acmicpc.net/problem/5011 5011번: Robots on a grid You have recently made a grid traversing robot that can find its way from the top left corner of a grid to the bottom right corner. However, you had forgotten all your AI programming skills, so you only programmed your robot to go rightwards and downwards www.acmicpc.net 22/10/14 전형적인 BFS문제에 갈 수 있는 방법을 구하는 DP문제가 더해진 문제로, 개인적으로 골드 5가 적당..
[Python] 16958번 텔레포트 https://www.acmicpc.net/problem/16958 16958번: 텔레포트 2차원 평면 위에 N개의 도시가 있다. 일부 도시는 특별한 도시이다. (r1, c1)에 있는 도시에서 (r2, c2)에 있는 도시로 가는 이동 시간은 |r1 - r2| + |c1 - c2|와 같다. 만약, 두 도시가 특별한 도시라면, 텔 www.acmicpc.net 22/10/27 다양한 풀이가 존재하는 문제로, 파이썬으로 풀기 위해서는 별의별 최적화를 다 해야 되는 문제이다. 나이브한 플로이드-워셜 알고리즘으로 접근한다면 파이썬에서는 TLE를 받을 수밖에 없기 때문에 무조건적인 최적화가 필요하다. 이 글에서는 2가지 풀이 방법을 소개할 것이다. 첫 번째 문제 접근 방식: 이 문제를 먼저 접했을 때, 도시의 수의 ..