본문 바로가기

전체 글

(125)
구명보트 처음 문제를 보고 생각한건, 무게 제한을 만족하는 최대 인원 수가 최적해라고 생각하여 우선순위 큐를 사용하여 가장 작은 무게를 가진 사람부터 빼내는 방법을 사용했지만 오답이라고 나왔다. 왜냐하면 구명보트의 인원 제한이 2명이라는걸 인지하지 못했다. 다른 코드를 참고해본 결과, 무게 제한에 가장 근접하면서도 인원 제한을 만족하는 원소들이 최적해라는걸 알았다. 이해를 돕기 위해 예를 들어보겠다. 무게제한 : 100 [30, 40, 50, 60] 무게가 가장 작은 인원부터 빼내면 횟수가 3번이지만 (30, 40), (50), (60) 무게 제한에 가장 근접하게 빼내면 2번이다! (30, 60), (40, 50) 이 점에서 Greedy의 특성이 나타난걸 알 수 있다. 또한 탐색 범위를 효과적으로 줄이기 위해 투..
가장 큰 수 만들기 문제의 조건은 배열의 원소들로 만들 수 있는 가장 큰 수를 만들어야 한다. 쉽게 생각해보면, 가장 큰 수대로 정렬하여 만들 수 있어보이지만 함정이 숨어있다. 9, 13을 생각해보면 만들 수 있는 가장 큰 수는 913이다! 그래서 처음엔 정수의 맨 앞자리와 맨 뒷자리를 비교하여 커스텀 비교함수를 만들었다. 그런데, 예외케이스가 있었는데 232, 252와 같은 경우 중간 자리를 비교할 수 없다. 그래서 구글링해본 결과 문자열로 치환하여 비교하는 신박한 방법이 있었다. 정답코드 더보기 #include #include #include #include using namespace std; //커스텀 비교함수, 문자열 비교방식으로 치환한다. bool cmp(string& a, string& b) { return a..
다리를 지나는 트럭 programmers.co.kr/learn/courses/30/lessons/42583 코딩테스트 연습 - 다리를 지나는 트럭 트럭 여러 대가 강을 가로지르는 일 차선 다리를 정해진 순으로 건너려 합니다. 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 알아내야 합니다. 트럭은 1초에 1만큼 움직이며, 다리 길이 programmers.co.kr 다리의 무게 제한과 트럭들이 지나는 걸 구현해주면 쉬운 문제이다. 문제의 조건에 트럭이 순서대로 가기 때문에, 대기 중인 트럭과 다리를 건너는 트럭을 표현하기 위한 자료구조로 큐를 사용했다. 현재 무게 제한을 저장해두고, 대기 중인 트럭에서 제한에 걸리지 않는다면, bridge 큐에 추가한다. 반대로, 대기 중인 트럭에서 제한에 걸린다면, 추가하지 않는다. #..