※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 13902번 문제인 개업 2이다.
문제는 아래 링크를 확인하자.
https://www.acmicpc.net/problem/13902
13902번: 개업 2
해빈이는 짜장면을 정말 좋아한다. 짜장면을 너무 좋아한 나머지 짜장면만 파는 중국집을 개업했다! 해빈이는 양손잡이여서 동시에 두 개의 웍(중국 냄비)을 사용하여 요리할 수 있다. 그러나
www.acmicpc.net
이 문제는 13910번 문제(링크)에서 웍의 개수 M의 제한을 1000으로 늘린 문제이다. 이로 인해 딱히 문제 풀이가 달라지거나 하지는 않으므로 해당 문제의 풀이글을 참고해 문제를 해결하자.
아래는 제출한 소스코드이다.
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
int N, M;
int onedish[1000];
bool dishes[10001];
vector<int> vec;
int dist[10001];
void bfs() {
dist[0] = 1;
queue<int> que;
que.push(0);
while (!que.empty()) {
int cur = que.front(); que.pop();
for (auto& x : vec) {
int nxt = cur + x;
if (nxt > N || dist[nxt]) continue;
dist[nxt] = dist[cur] + 1;
que.push(nxt);
}
}
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> N >> M;
for (int i = 0; i < M; i++) cin >> onedish[i];
for (int i = 0; i < M; i++) {
dishes[onedish[i]] = 1;
for (int j = i + 1; j < M; j++) {
int tmp = onedish[i] + onedish[j];
if (tmp <= N) dishes[tmp] = 1;
}
}
for (int i = 1; i <= N; i++) {
if (dishes[i]) vec.emplace_back(i);
}
bfs();
cout << dist[N] - 1;
}
728x90
'BOJ' 카테고리의 다른 글
[BOJ 13906 // C++] 대문자 (0) | 2023.03.30 |
---|---|
[BOJ 13905 // C++] 세부 (0) | 2023.03.29 |
[BOJ 13901 // C++] 로봇 (0) | 2023.03.27 |
[BOJ 13912 // C++] 외계 생물 (0) | 2023.03.26 |
[BOJ 13911 // C++] 집 구하기 (0) | 2023.03.25 |