전체 글 124

[커피숍2/G1/Python3]

커피숍 2 G1문제모두 알다시피 동호는 커피숍의 마담이다. (마담이 무엇인지는 본인에게 물어보도록 하자.)어느 날 커피숍의 손님 A 씨가 동호에게 게임을 하자고 했다. 그 게임은 다음과 같은 규칙을 갖는다. N개의 정수가 있으면, 동호는 다음과 같이 말한다. “3~7번째 수의 합은 무엇이죠?” 그러면 상대방은 “그 답은 000입니다. 그리고 8번째 수를 2로 고치도록 하죠” 그러면 동호는 “네 알겠습니다.”라고 한 뒤에 다시 상대방이 동호가 했던 것처럼 “8~9번째 수의 합은 무엇이죠?”라고 묻게 된다. 이 것을 번갈아 가면서 반복하는 게임이다. 당신은 이 게임의 심판 역을 맡았다. 요컨대, 질문에 대한 답들을 미리 알아야 한다는 것이다. 당신의 머리가 출중하다면 10만 개가량 되는 정수와 10만 턴 정..

[돌 게임 nm/S2/Python3, C++]

돌 게임 nm S1문제찬우와 건모는 n×m 격자판에서 돌 가져가기 게임을 하기로 했다. 처음에 모든 칸에는 돌이 하나씩 있다. 게임의 규칙은 다음과 같다. 찬우가 먼저 시작하며, 번갈아 가며 턴을 진행한다. 각 턴마다 하나의 열 또는 행을 선택한 뒤, 선택한 열 또는 행에 있는 돌을 모두 가져간다. 자신의 턴에 돌을 하나도 가져가지 못하면 패배한다. 찬우와 건모는 매우 똑똑해서 최적으로 플레이한다고 가정하자. 격자판의 크기 n, m이 주어질 때 찬우가 승리하는지를 판단하는 프로그램을 작성하자. 하나의 입력 데이터에서 T개의 테스트 케이스를 해결해야 한다.입력첫째 줄에 테스트 케이스의 개수 T가 주어진다. (1≤T≤100 000) 둘째 줄부터 T개의 각 줄마다 해당 테스트 케이스에서 격자판의 크기를 나타내..

[회전초밥/S1/Python3, C++]

회전초밥 S1문제회전 초밥 가게에 N명의 손님이 있고, 요리사는 M개의 초밥을 순서대로 만든다. 요리사가 초밥을 만들 경우, 1번 손님부터 N번 손님의 순서대로 그 초밥을 받게 된다. 만약 먼저 초밥을 받는 손님이 초밥을 먹을 경우, 뒤의 손님들은 해당 초밥을 먹을 수 없다. 만약 아무도 해당 초밥을 먹지 않는다면, 초밥은 버려진다. N명의 손님은 각자 먹고 싶은 초밥이 적힌 주문 목록을 가지고 있다. 목록에 적힌 초밥의 순서에 상관없이 만약 목록에 적혀있는 초밥이 앞에 오면 반드시 먹는다. 만약, 목록에 적히지 않은 초밥을 받는다면 그 초밥은 반드시 먹지 않는다. 단, 손님들은 다양한 초밥을 먹고 싶어 하기 때문에 각 종류의 초밥은 최대 한 번만 먹는다. 각 손님의 주문 목록과 순서대로 만들어지는 M개..

[우선 순위 큐 구현하기 / Godot4]

우선 순위 큐(Priority Queue) 구현하기 - Godot4 Priority Queue를 구현하기 위해 C++ 소스코드를 참고하였다. 코드 리펙토링 과정에서 Cursor를 사용하여 변수명 수정과 주석 처리 등을 진행하였다. 더보기## 우선순위 큐 구현## operator를 통해 최대/최소 힙을 선택할 수 있습니다 (기본값: 최소 힙)## 시간 복잡도: push O(log n), pop O(log n), top O(1)extends Nodeclass_name PriorityQueue## 힙 저장을 위한 내부 배열var pq: Array = []## 현재 힙의 크기var _size: int = 0## 비교 연산자 함수## 기본값은 최소 힙 (a > b)var operator: Callable = f..

게임 제작 2025.05.17

[Defend the CTP!!!/G4/Python3]

Defend The CTP!!! G4문제지금으로부터 527년이 지난 서기 2544년, 항성 간 이동이 가능해진 인류는 태양계가 아닌 새로운 보금자리를 찾아 기술의 집약체인 CTP(Cho Technology Planet, 초 기술 행성)를 건설한다. 인공지능이 관리하는 CTP 안에서는 자연재해도 전쟁도 없었으며 많은 사람이 행복을 누리며 살아나갔다. CTP에는 N개의 도시가 있는데 각각의 도시들은 1번부터 N번까지 고유한 번호를 가지고 있으며 각 도시들끼리는 매우 빠른 속도로 이동할 수 있는 튜브로 연결되어 있다. 단 튜브는 매우 빠른 속도로 이동해야 하기 때문에 한 방향으로만 이동을 할 수 있다. 즉 A도시에서 B도시로 이동하는 튜브가 있다고 해서 B도시에서 A도시로 이동하는 튜브가 항상 존재하는 것은..

[피보나치는 지겨웡~/S3/Python3, C++]

피보나치는 지겨웡~ S3문제혁진이는 알고리즘 문제를 만들라는 독촉을 받아 스트레스다. 하지만 피보나치 문제는 너무 많이 봐서 지겹기 그지없다. 그러나 문제를 만들 시간이 없는 혁진이는 피보나치 문제를 응용해서 문제를 만들려 한다.int fibonacci(int n) { // 호출 if (n 위와 같이 코딩하였을 때 fibonacci(n)를 입력했을 때에 fibonacci 함수가 호출되는 횟수를 계산해보자.입력fibonacci 함수에 인자로 입력할 n이 주어진다. (0 ≤ n ≤ 50)출력fibonacci 함수가 호출된 횟수를 출력한다.출력값이 매우 커질 수 있으므로 정답을 1,000,000,007 로 나눈 나머지를 출력한다. 더보기더보기다이나믹 알고리즘피보나치 수열에 간단한 트릭을 하나 추가한 문제이..

[민준이와 마산 그리고 선우/G4/Python3]

민준이와 마산 그리고 선우 G4 문제종강을 맞은 민준이는 고향인 마산으로 내려갈 계획을 짜고 있었다. 늘 그랬듯, 마산으로 갈 버스를 예약하려던 순간 민준이는 집으로 가는 다른 방법이 떠올랐다. 그것은 직접 지도를 보고 고향으로 가는 가장 짧은 길을 찾는 것이다. 그때, 먼저 고향으로 내려갔던 친구인 건우에게 연락이 왔다. 건우는 고향으로 내려가던 중 알 수 없는 일에 휘말려 외딴곳에 혼자 남겨지게 되었다. 건우는 유일한 구세주인 민준이에게 도움을 청한 것이었다. 그러나 마산의 남자인 민준이에게는 마산이 먼저였다. 민준이는 처량한 건우를 무시한 채 고향으로 떠나려고 했지만, 만약 고향으로 가는 길에 건우가 있다면 겸사겸사 도움을 줄 수 있을 것 같았다. 지도는 양방향 그래프 형태로 되어있다. 출발지는 1..

[이중우선순위큐/LV3/Python3, C++]

이중 우선순위 큐 LV3 문제 설명이중 우선순위 큐는 다음 연산을 할 수 있는 자료구조를 말합니다.I 숫자큐에 주어진 숫자를 삽입합니다.D 1 큐에서 최댓값을 삭제합니다.D -1 큐에서 최솟값을 삭제합니다.이중 우선순위 큐가 할 연산 operations가 매개변수로 주어질 때, 모든 연산을 처리한 후 큐가 비어있으면 [0,0] 비어있지 않으면 [최댓값, 최솟값]을 return 하도록 solution 함수를 구현해 주세요.제한사항operations는 길이가 1 이상 1,000,000 이하인 문자열 배열입니다.operations의 원소는 큐가 수행할 연산을 나타냅니다. 원소는 “명령어 데이터” 형식으로 주어집니다.최댓값/최솟값을 삭제하는 연산에서 최댓값/최솟값이 둘 이상인 경우, 하나만 삭제합니다.빈 큐에 ..

[디스크 컨트롤러/LV3/Python3, C++]

다리를 지나는 트럭 LV2 문제 설명하드디스크는 한 번에 하나의 작업만 수행할 수 있습니다. 디스크 컨트롤러를 구현하는 방법은 여러 가지가 있습니다. 이 문제에서는 우선순위 디스크 컨트롤러라는 가상의 장치를 이용한다고 가정합니다. 우선순위 디스크 컨트롤러는 다음과 같이 동작합니다. 어떤 작업 요청이 들어왔을 때 작업의 번호, 작업의 요청 시각, 작업의 소요 시간을 저장해 두는 대기 큐가 있습니다. 처음에 이 큐는 비어있습니다. 디스크 컨트롤러는 하드디스크가 작업을 하고 있지 않고 대기 큐가 비어있지 않다면 가장 우선순위가 높은 작업을 대기 큐에서 꺼내서 하드디스크에 그 작업을 시킵니다. 이때, 작업의 소요시간이 짧은 것, 작업의 요청 시각이 빠른 것, 작업의 번호가 작은 것 순으로 우선순위가 높습니다. ..

[더 맵게/LV2/Python3, C++]

다리를 지나는 트럭 LV2 문제 설명매운 것을 좋아하는 Leo는 모든 음식의 스코빌 지수를 K 이상으로 만들고 싶습니다. 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 Leo는 스코빌 지수가 가장 낮은 두 개의 음식을 아래와 같이 특별한 방법으로 섞어 새로운 음식을 만듭니다. 섞은 음식의 스코빌 지수 = 가장 맵지 않은 음식의 스코빌 지수 + (두 번째로 맵지 않은 음식의 스코빌 지수 * 2) Leo는 모든 음식의 스코빌 지수가 K 이상이 될 때까지 반복하여 섞습니다. Leo가 가진 음식의 스코빌 지수를 담은 배열 scoville과 원하는 스코빌 지수 K가 주어질 때, 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 섞어야 하는 최소 횟수를 return 하도록 solution 함수를 작성해 주세..