티스토리 뷰
https://www.acmicpc.net/problem/2303
2303번: 숫자 게임
N명이 모여 숫자 게임을 하고자 한다. 각 사람에게는 1부터 10사이의 수가 적혀진 다섯 장의 카드가 주어진다. 그 중 세 장의 카드를 골라 합을 구한 후 일의 자리 수가 가장 큰 사람이 게임을 이
www.acmicpc.net
하 ..
요즘 한창 재귀 함수 만드는것을 연습하고 있는데 오늘 잘되지도않고
문제도 더럽게 안풀려서 마지막으로 쉬운거 하나 풀고 쉬려고 난이도 실버5 짜리를 골라서 풀었다.
딱 봐도 그냥 5개중 3개 조합 골라서 쉽게 풀수 있을줄 알았는데
중간에 배열들도 다 출력해보고 아무리 확인해봐도 맞은것 같은데 계속 틀리다고 나와서 때려치고 내일할까 ..
한번만 더해보자 이러다가 거의 한시간을 날렸다.
결국 답을 찾았는데 중간에 배열 사이즈를 최댓값인 1000 이상으로 만들었어야 하는데
문제에서 주어진 n=3인 예시를 생각하며 풀다가 크기를 3으로 만들어서 계속 틀렸던 것이었다.
문제 자체는
permutation 함수로 5개중 3개 조합을 뽑는 방식으로 쉽게 풀수있다.
오늘은 이제 좀 쉬고 내일 재귀를 이용한 dfs 방식으로 한번만 더 풀어봐야겠다.
#include <iostream>
#include <algorithm>
using namespace std;
int n;
int cards[1001][5];
int mark[5] = {1, 1, 1, 0, 0};
// 각 사람들이 낼수 있는 최대값이 저장됨
int maxs[1001];
int main()
{
cin >> n;
for(int i = 0; i < n; i++)
{
for(int j = 0; j < 5; j++)
{
cin >> cards[i][j];
}
}
do {
for(int a = 0; a < n; a++)
{
int sum[1001] = {0,};
for(int i = 0; i < 5; i++)
{
if(mark[i] == 1)
sum[a] += cards[a][i];
}
maxs[a] = max(maxs[a], sum[a] % 10);
}
} while(prev_permutation(mark, mark+5));
int winner = 0;
int highest = maxs[0];
for(int i = 1; i < n; i++)
{
if(maxs[i] >= highest)
{
winner = i;
highest = maxs[i];
}
}
cout << winner+1;
}
'PS' 카테고리의 다른 글
백준 2858. 기숙사 바닥 (0) | 2021.07.17 |
---|---|
백준 2304. 창고 다각형 (0) | 2021.07.17 |
백준 2422. 한윤정이 이탈리아에 가서 아이스크림을 사먹는데 (0) | 2021.07.16 |
백준 14888. 연산자 끼워넣기 (0) | 2021.07.16 |
백준 2615. 오목 (0) | 2021.07.15 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Stack
- BFS
- Python
- permutation
- Spring
- C
- dfs
- MVC
- Implementation
- Dijkstra
- two pointer
- 조합
- CSS
- priority queue
- floyd warshall
- recursion
- 이분탐색
- greedy
- 재귀
- Kruskal
- Unity
- DP
- C++
- 자료구조
- Tree
- Brute Force
- back tracking
- graph
- binary search
- db
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함