Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 1520내리막길
- 이분탐색
- BOJ1931
- BOJ20444
- 백준11404
- BOJ11729
- 재귀
- 백준
- BOJ2629
- BOJ1753
- 백준2110
- BOJ14719
- boj
- BFS
- 백준2141
- BOJ2805
- 생활코딩
- 백트래킹
- BOJ11066
- BOJ9663
- DP
- BOJ11404
- BOJ2110
- 프로그래머스 #무지의먹방라이브 #C++
- 백준2533
- BOJ14501
- 색종이와가위
- 백준 #BOJ #1697
- html
- github_actions
Archives
- Today
- Total
poksul_log
# 1092. 배 본문
관련 알고리즘 : 그리디, 정렬
문제 링크 : https://www.acmicpc.net/problem/1092
1092번: 배
첫째 줄에 N이 주어진다. N은 50보다 작거나 같은 자연수이다. 둘째 줄에는 각 크레인의 무게 제한이 주어진다. 이 값은 1,000,000보다 작거나 같다. 셋째 줄에는 박스의 수 M이 주어진다. M은 10,000보
www.acmicpc.net
해결 과정
문제의 조건을 보면,
- 크레인에 무게 제한 G 존재 (G <= 1,000,000)
- 무게 제한 초과할 시, 크레인으로 이동 불가
- 항구에 크레인 N대 (N <= 50)
- 1분에 박스를 하나씩 배에 싣기 가능
정렬을 이용하여 크레인의 무게 및 박스 크기를 내림차순 해 줌으로써 문제를 해결할 수 있었다.
크레인이 버틸 수 있는 최대 무게를 초과하는 박스가 있다면 크레인으로 이동이 불가하므로 이 때는 -1을 반환한다.
크레인 또한 어떤 박스도 옮길 수 없는 경우, 크레인 목록에서 제외함으로써 시간을 절약할 수 있다.
C++ 코드
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
int n, m; // n : 박스 개수 m : 크레인 개수
int num; //각 벡터의 요소
int cnt = 0; //몇 분만에 옮겼는지 결과값
vector<int> c, b; // c-크레인, b-박스에 대한 벡터
cin >> m; // 크레인 입력 받기
for (int i = 0; i < m; i++)
{
cin >> num;
c.push_back(num);
}
cin >> n; // 박스 입력 받기
for (int i = 0; i < n; i++)
{
cin >> num;
b.push_back(num);
}
sort(c.begin(), c.end(), greater<int>()); // 크레인 무게제한 내림차순 정렬
sort(b.begin(), b.end(), greater<int>()); // 박스 무게 내림차순 정렬
if (b[0] > c[0]) // 크레인 최대 무게 제한보다 무거운 박스가 있는 경우
{
cout << -1; // 이동 불가하므로 -1 반환
}
else // 이동 가능한 경우
{
while (b.size()) // 박스가 빌 때까지
{
int index = 0; // 크레인 순서
for (int i = 0; i < b.size(); i++) // 박스 모두 돌며 검사
{
if (index == c.size()) // 크레인 다 돌았는데 박스 담을 수 없는 경우
{
break;
}
if (c[index] >= b[i]) // 크레인이 박스 들 수 있는지 여부 검사
{
index++; // 다음 크레인
b.erase(b.begin() + i); // 이동 가능할 시, 이동 후 박스 삭제
i = i - 1;
}
}
cnt++; //옮긴 시간
}
cout << cnt;
}
}
'Coding Test > BOJ' 카테고리의 다른 글
# 1753. 최단경로 (0) | 2023.01.29 |
---|---|
# 1976. 여행 가자 (0) | 2022.11.13 |
# 11265. 끝나지 않는 파티 (0) | 2022.10.09 |
# 1062. 가르침 (0) | 2022.10.02 |
# 2533. 사회망 서비스(SNS) (0) | 2022.09.25 |