2024/02 58
-
문제 설명 트럭 여러 대가 강을 가로지르는 일차선 다리를 정해진 순으로 건너려 합니다. 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 알아내야 합니다. 다리에는 트럭이 최대 bridge_length대 올라갈 수 있으며, 다리는 weight 이하까지의 무게를 견딜 수 있습니다. 단, 다리에 완전히 오르지 않은 트럭의 무게는 무시합니다. 예를 들어, 트럭 2대가 올라갈 수 있고 무게를 10kg까지 견디는 다리가 있습니다. 무게가 [7, 4, 5, 6]kg인 트럭이 순서대로 최단 시간 안에 다리를 건너려면 다음과 같이 건너야 합니다. 경과 시간 다리를 지난 트럭 다리를 건너는 트럭 대기 트럭 0 [] [] [7,4,5,6] 1~2 [] [7] [4,5,6] 3 [7] [4] [5,6] 4 [7] [4,5..
-
문제 설명 스트리밍 사이트에서 장르 별로 가장 많이 재생된 노래를 두 개씩 모아 베스트 앨범을 출시하려 합니다. 노래는 고유 번호로 구분하며, 노래를 수록하는 기준은 다음과 같습니다. 속한 노래가 많이 재생된 장르를 먼저 수록합니다. 장르 내에서 많이 재생된 노래를 먼저 수록합니다. 장르 내에서 재생 횟수가 같은 노래 중에서는 고유 번호가 낮은 노래를 먼저 수록합니다. 노래의 장르를 나타내는 문자열 배열 genres와 노래별 재생 횟수를 나타내는 정수 배열 plays가 주어질 때, 베스트 앨범에 들어갈 노래의 고유 번호를 순서대로 return 하도록 solution 함수를 완성하세요. 제한사항 genres[i]는 고유번호가 i인 노래의 장르입니다. plays[i]는 고유번호가 i인 노래가 재생된 횟수입니..
-
객체 인터페이스를 사용해서 좀 더 직관적이고, 객체지향적으로 정리하자. 전에 설게했던 대로, BP_Weapon 에서 BP_Combo로 상속이 이어지고, 그 후에 BP_Combo또는 BP_Sword으로 상속된다. ( 콤보가 없는 것은 바로 해당 무기로, 있다면, Combo로 상속된 후 임의의 무기로 이어진다.) 연결지어보자. BP_Weapon BP_Weapon이다. 인터페이스 처럼 상속 후 상속된 함수를 사용하게 할 것이다. 그럼으로 Get, Set등을 전부 정의해준다. 위 함수에서 TurnOnCollision, TurnOffCollision은 무기객체에서 활성화 하게 됨으로 비워놓는다. 함수의 내부는 대부분 위와 비슷하게 이루어진다. Owner를 찾아서, 해당 Owner의 interface에 접속, 인터..
-
문제 설명 Leo는 카펫을 사러 갔다가 아래 그림과 같이 중앙에는 노란색으로 칠해져 있고 테두리 1줄은 갈색으로 칠해져 있는 격자 모양 카펫을 봤습니다. Leo는 집으로 돌아와서 아까 본 카펫의 노란색과 갈색으로 색칠된 격자의 개수는 기억했지만, 전체 카펫의 크기는 기억하지 못했습니다. Leo가 본 카펫에서 갈색 격자의 수 brown, 노란색 격자의 수 yellow가 매개변수로 주어질 때 카펫의 가로, 세로 크기를 순서대로 배열에 담아 return 하도록 solution 함수를 작성해주세요. 제한사항 갈색 격자의 수 brown은 8 이상 5,000 이하인 자연수입니다. 노란색 격자의 수 yellow는 1 이상 2,000,000 이하인 자연수입니다. 카펫의 가로 길이는 세로 길이와 같거나, 세로 길이보다 ..
-
문제 설명 이중 우선순위 큐는 다음 연산을 할 수 있는 자료구조를 말합니다. 명령어 수신 탑(높이) I 숫자 큐에 주어진 숫자를 삽입합니다. D 1 큐에서 최댓값을 삭제합니다. D -1 큐에서 최솟값을 삭제합니다. 이중 우선순위 큐가 할 연산 operations가 매개변수로 주어질 때, 모든 연산을 처리한 후 큐가 비어있으면 [0,0] 비어있지 않으면 [최댓값, 최솟값]을 return 하도록 solution 함수를 구현해주세요. 제한사항 operations는 길이가 1 이상 1,000,000 이하인 문자열 배열입니다. operations의 원소는 큐가 수행할 연산을 나타냅니다. 원소는 “명령어 데이터” 형식으로 주어집니다.- 최댓값/최솟값을 삭제하는 연산에서 최댓값/최솟값이 둘 이상인 경우, 하나만 삭제..
-
8.8 안정된 인터페이스 만들기 클래스는 추상화를 위한 C++의 핵심 도구다. 클래스를 디자인할 떄는 추상화 원칙을 적용하여 구현과 인터페이스를 분리해야 한다. 구체적으로는 모든 데이터 멤버를 private로 선언하고 외부에서 멤버에 접근할 필요가 있을 때는 get과 set메서드를 이용한다. SpreadSheetCell 클래스는 이러한 방식으로 구현되었다. mValue와 mString은 private 멤버며 set(), getValue(), getString()으로 값을 읽고 쓸 수 있다. 이러한 방식으로 클래스의 사용자가 mValue와 mString을 잘못 세팅 할 걱정 없이 내부적으로 동기화한다. 8.8.1 인터페이스 클래스와 구현 클래스의 활용 앞어 설명한 여러 가지 방법과 디자인 원칙에도 C++는..