728x90

알고리즘 246

백준] 5046 - 전국 대학생 프로그래밍 대회 동아리 연합(ACM-ICPC Regional)

시간 제한 : 1초메모리 제한 : 128MB 입력첫째 줄에 참가자의 수 1 ≤ N ≤ 200, 예산 1 ≤ B ≤ 500000, 호텔의 수 1 ≤ H ≤ 18, 고를 수 있는 주의 개수 1 ≤ W ≤ 13이 주어진다. 다음 줄부터 각 호텔의 정보가 주어지며, 호텔의 정보는 두 줄로 이루어져 있다. 첫번째 줄에는 그 호텔의 일인당 숙박비용 1 ≤ p ≤ 10000이 주어지고, 둘째 줄에는 i번째 주에 투숙 가능한 인원 0 ≤ a ≤ 1000이 주어진다. 출력첫째 줄에 대회를 개최할 수 있으면 최소 비용을 출력하고, 없으면 "stay home"을 출력한다. 소스코드 #include using namespace std; int main(void) { int n, b, h, w, min, p, sum = 0; ..

백준] 11048 - 이동하기

시간 제한 : 1초메모리 제한 : 256MB 입력첫째 줄에 미로의 크기 N, M이 주어진다. (1 ≤ N, M ≤ 1,000) 둘째 줄부터 N개 줄에는 총 M개의 숫자가 주어지며, r번째 줄의 c번째 수는 (r, c)에 놓여져 있는 사탕의 개수이다. 사탕의 개수는 0보다 크거나 같고, 100보다 작거나 같다. 출력첫째 줄에 준규가 (N, M)으로 이동할 때, 가져올 수 있는 사탕 개수를 출력한다. 소스코드 #include using namespace std; int arr[1001][1001], dp[1001][1001] = { 0, }; int main(void) { int n, m, max; cin >> n >> m; for (int i = 1; i arr[i][j]; for (int i = 1; i

백준] 1788 - 피보나치 수의 확장

시간 제한 : 2초메모리 제한 : 128MB 입력첫째 줄에 n이 주어진다. n은 절대값이 1,000,000을 넘지 않는 정수이다. 출력첫째 줄에 F(n)이 양수이면 1, 0이면 0, 음수이면 -1을 출력한다. 둘째 줄에는 F(n)의 절대값을 출력한다. 이 수가 충분히 커질 수 있으므로, 절대값을 1,000,000,000으로 나눈 나머지를 출력한다. 소스코드 #include using namespace std; long long dp[1000001] = { 0, 1, }; int main(void) { int n, k; cin >> n; if (n < 0) k = -n; else k = n; for (int i = 2; i 0) cout

백준] 2798 - 블랙잭(COCI 2011/2012)

시간 제한 : 1초메모리 제한 : 128MB 입력첫째 줄에 카드의 개수 N(3 ≤ N ≤ 100)과 M(10 ≤ M ≤ 300,000)이 주어진다. 둘째 줄에는 카드에 써있는 수가 주어지며, 이 값은 100,000을 넘지 않는다. 출력첫째 줄에 M을 넘지 않으면서 M에 최대한 가까운 카드 3장의 합을 출력한다. 소스코드 #include using namespace std; int main(void) { int n, m, arr[100], ans = 0; cin >> n >> m; for (int i = 0; i > arr[i]; for (int i = 0; i < n - 2; i++) for (int j = i + 1; j < n - 1; j++) for (int k = j +..

백준] 2851 - 슈퍼 마리오(COCI 2010/2011)

시간 제한 : 1초메모리 제한 : 128MB 입력총 10개의 줄에 각각의 버섯의 점수가 주어진다. 이 값은 100보다 작거나 같은 양의 정수이다. 버섯이 나온 순서대로 점수가 주어진다. 출력첫째 줄에 마리오가 받는 점수를 출력한다. 만약 100에 가까운 수가 2개라면 (예: 98, 102) 마리오는 큰 값을 선택한다. 소스코드 #include using namespace std; int main(void) { int arr[10], sum = 0, ans1, ans2, ans; for (int i = 0; i > arr[i]; for (int i = 0; i < 10; i++) { sum+=arr[i]; if (sum == 100) { ans = sum; break; } el..

백준] 5086 - 배수와 약수(ACM-ICPC Regional)

시간 제한 : 1초메모리 제한 : 128MB 입력입력은 여러 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 두 자연수로 이루어져 있다. 마지막 줄에는 0이 2개 주어진다. 두 수가 같은 경우는 없다. 출력각 테스트 케이스마다 첫번째 숫자가 두번째 숫자의 약수라면 factor를, 배수라면 multiple을, 둘 다 아니라면 neither를 출력한다. 소스코드 #include using namespace std; int main(void) { int n, m; while (1) { cin >> n >> m; if (n == 0 && m == 0) break; if (m%n == 0) cout

백준] 1547 - 공

시간 제한 : 2초메모리 제한 : 128MB 입력첫째 줄에 컵의 위치를 바꾼 횟수 M이 주어지며, M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 M개의 줄에는 컵의 위치를 바꾼 방법 X와 Y가 주어지며, X번 컵과 Y번 컵의 위치를 서로 바꾸는 것을 의미한다. 컵을 이동시키는 중에 공이 컵에서 빠져나오는 경우는 없다. X와 Y의 값은 3보다 작거나 같고, X와 Y가 같을 수도 있다. 출력첫째 줄에 공이 들어있는 컵의 번호를 출력한다. 공이 사라져서 컵 밑에 없는 경우에는 -1을 출력한다. 소스코드 #include using namespace std; int main(void) { int m, loc = 1, x, y; cin >> m; while (m--) { cin >> x >> y; if (x ..

백준] 10610 - 30(COCI 2014/2015)

시간 제한 : 1초메모리 제한 : 32MB 입력N을 입력받는다. N는 최대 10^5개의 숫자로 구성되어 있다. 출력미르코가 만들고 싶어하는 수가 존재한다면 그 수를 출력하라. 그 수가 존재하지 않는다면, -1을 출력하라. 소스코드 #include #include #include using namespace std; int main(void) { char arr[100001]; int cnt = 0, len, tmp, sum = 0; cin >> arr; len = strlen(arr); for (int i = 0; i < len; i++) { if (arr[i] == '0') cnt++; else sum += (int)(char)(arr[i] - '0'); } if (cnt == 0) cout = 0; ..

백준] 3036 - 링(COCI 2006/2007)

시간 제한 : 1초메모리 제한 : 128MB 입력첫째 줄에 링의 개수 N이 주어진다. (3 ≤ N ≤ 100) 다음 줄에는 링의 반지름이 상근이가 바닥에 놓은 순서대로 주어진다. 반지름은 1과 1000를 포함하는 사이의 자연수이다. 출력출력은 총 N-1줄을 해야 한다. 첫 번째 링을 제외한 각각의 링에 대해서, 첫 번째 링을 한 바퀴 돌리면 그 링은 몇 바퀴 도는지 기약 분수 형태 A/B로 출력한다. 소스코드 #include using namespace std; int gcd(int a, int b) { if (b == 0) return a; else return gcd(b, a%b); } int main(void) { int n, left, g; int arr[100]; cin >> n >> left;..

백준] 9517 - 아이 러브 크로아티아(COCI 2013/2014)

시간 제한 : 1초메모리 제한 : 128MB 입력첫째 줄에 게임이 시작했을 때 폭탄을 들고 있는 사람의 번호 K (1 ≤ K ≤ 8)가 주어진다. 둘째 줄에는 질문의 개수 N (1 ≤ N ≤ 100)이 주어진다. 다음 N개 줄에는 i번째 질문을 대답하기까지 걸린 시간(단위: 초) T (1 ≤ T ≤ 100), 그 플레이어의 대답 Z (T, N, P중 하나) 가 주어진다. 출력폭탄을 터뜨린 사람의 번호를 출력한다. 소스코드 #include using namespace std; int main(void) { int k, n, time = 210, ans, t; char z; bool check = false; cin >> k >> n; for (int i = 0; i > t >..

728x90