Level 2. 메뉴 리뉴얼 코드가 다소 길긴 하지만 엄청 복잡하지는 않다. 모든 메뉴에서 가능한 n개 메뉴의 경우의 수를 구한다. 그 중 2번 이상 주문된 조합을 주문 수를 기준으로 메뉴 vector를 저장하는 set에 넣는다. 마지막에 가장 많게 주문된 조합들을 정답에 넣는다. 경우의 수 조합을 구할 때, 알파벳이 들어있는 map을 사용하므로 별도의 정렬은 필요하지 않다. 하지만, 모든 메뉴를 map에 넣어 가능한 경우의 수를 계산해서 그런지 시간 초과가 발생했다. // 이 풀이는 시간 초과가 발생한다. #include #include #include #include #include using namespace std; vector get_combinations(map& mp, int start, i..
Level 3. 디스크 컨트롤러 처음에 소요 시간으로만 정렬해 시작 시간을 빼 더하면 되는 줄 알았는데, 그게 아니어서 설명이 잘 돼 있는 이 블로그를 참고했다. 프로그래머스_힙(Heap)_디스크 컨트롤러 (JAVA) 문제 설명 하드디스크는 한 번에 하나의 작업만 수행할 수 있습니다. 디스크 컨트롤러를 구현하는 방법은 여러 가지가 있습니다. 가장 일반적인 방법은 요청이 들어온 순서대로 처리하는 것입 codevang.tistory.com 소요 시간으로 정렬하되, 현재까지 소요된 시간들을 더해 그 중에서도 수행할 수 있는 가장 빠른 시작 시간을 가진 작업을 선택해야 하는 문제였다. 생각 외로 쉽지 않았다.. #include #include #include #include #include using names..
Level 3. 야근 지수 처음에 문제 지문이 이해가 되지 않았는데 예제를 보니 이해가 됐다. (n - 1)² - (n - 2)² < n² - (n - 1)² 이기 때문에 가능한 큰 수부터 감소시켜야 한다. 그렇기에 매번 가장 큰 수를 뽑을 수 있는 우선순위 큐가 효율적이다. 작은수부터 큰 수로 나열시킨다면 직각삼각형 모양이 되는데, 횡스크롤 비행기 게임의 느낌처럼 큰 수부터 위에서 아래로 총알을 쏴 줄여나가는 모습이 떠올랐다. n의 값을 1씩 줄여나가는 사람들이 많았는데, 우선순위 큐에서 뽑은 최댓값과 현재 큐에 있는 최댓값을 비교하면 가능한 만큼 한번에 줄일 수 있다. 줄일 수 있는 최댓값은 (뽑은 수 - 큐의 최댓값 + 1)이다. #include #include #include #include us..
Level 2. 수식 최대화 우선 숫자들과 연산자들을 분리했다. 문자를 하나씩 읽으면서 숫자면 기존 숫자에 10을 곱한 후 더하고, 문자면 연산자로 취급했다. 이후 +, -, * 세 가지 연산자의 우선순위인 6가지 경우의 수에 대해 직접 계산해 해결했다. 우선순위가 높은 순으로 앞에서부터 검색하며 해당 연산자가 있으면 계산하면 된다. a ○ b의 계산은 a 위치에 a ○ b의 결괏값을 저장하고 숫자 b와 연산자 ○를 제거하는 식으로 진행했다. 계산을 마치면 숫자 vector에는 최종 결괏값 1개만 남게 된다. #include #include #include #include using namespace std; long long calculate(long long A, long long B, char op..
Level 2. 테이블 해시 함수 사용자 정의 비교로 정렬할 수 있는지 묻는 문제였다. #include #include #include #include using namespace std; int solution(vector data, int col, int row_begin, int row_end) { int answer = 0; --col; auto pred = [col](auto& t1, auto& t2) { return (t1[col] == t2[col]) ? (t1[0] > t2[0]) : (t1[col] < t2[col]); }; stable_sort(data.begin(), data.end(), pred); auto S = [&data](int i) { return accumulate(dat..
Behavior Tree와 Task, Service를 이용해 AI 몬스터를 구현하고 끝났다 싶었는데, 어느 순간 보니 캐릭터에게 데미지 전달이 안 되고 있었다. 전에 테스트 했었을 때는 됐었는데 갑자기 안 되기 시작해서, 처음에는 BP가 깨져서 생기는 등의 버그인 줄 알았다. 내가 AI에게 10의 데미지를 준 것은 뜨지만, AI가 나를 때린 것은 뜨지 않는다. 캐릭터가 데미지를 입는 부분은 로그 출력밖에 하지 않기 때문에 이 곳의 문제는 아니다. 그럼 몬스터의 공격 부분에서 캐릭터의 TakeDamage() 함수를 호출하지 않았다는 뜻이다. 몬스터가 공격할 때 호출되는 Attack() 함수이다. AttackSection 섹션의 공격 애니메이션을 재생하고, Attack 애님 노티파이를 통해 실제 공격 로직을..