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
- 부트시퀀스
- Djikstra
- 백준
- baekjoon
- STL
- 릿코드
- Network
- Transport layer
- leetcode
- Embedded
- 임베디드
- 프로그래머스
- 다익스트라
- 전송 계층
- swea
- BST
- 관계형 모델
- ps
- DB
- Database
- C++
- Application Layer
- dp
- 자료구조
- 네트워크
- 문제풀이
- boot sequence
- 데이터베이스
- 응용 계층
- BHS
Archives
- Today
- Total
BOBO's Note
[ Baekjoon ] 17406. 배열 돌리기 4 본문
https://www.acmicpc.net/problem/17406
17406번: 배열 돌리기 4
크기가 N×M 크기인 배열 A가 있을때, 배열 A의 값은 각 행에 있는 모든 수의 합 중 최솟값을 의미한다. 배열 A가 아래와 같은 경우 1행의 합은 6, 2행의 합은 4, 3행의 합은 15이다. 따라서, 배열 A의
www.acmicpc.net
풀이 방법
모든 연산 순서 조합을 구해서 각 순서에 대해 연산을 차례대로 수행한 후, 그 중 최소 배열 값을 반환한다.
우선 연산 순서 조합을 구하는 함수는 min_val()이다. K개의 연산에 대해 순서 조합을 구하면 Arr 클래스의 apply_ops() 메소드를 호출해 배열 값을 계산한다.
void min_val(int n, Arr& arr){
static bool select[MAX_OPS] = {false, };
static int order[MAX_OPS];
if(n == K){
ret = min(ret, arr.apply_ops(order));
}
else{
for(int i=0; i<K; i++){
if(!select[i]){
select[i] = true;
order[n] = i;
min_val(n+1, arr);
select[i] = false;
}
}
}
}
Arr 클래스
Arr 클래스는 주어진 순서대로 연산을 수행하는 apply_ops() 메소드와 주어진 인덱스에 해당하는 연산을 한번 수행하는 rotate() 메소드가 존재한다.
class Arr{
public:
Arr(int n, int m): N(n), M(m){
for(int i=0; i<n; i++){
for(int j=0; j<m; j++){
cin >> A[i][j];
}
}
};
int apply_ops(int* order){};
private:
int N, M;
int A[MAX_SIZE][MAX_SIZE];
void rotate(int op_idx){};
};
여러 번 호출되는 함수이기 때문에 copyA 배열에 원본 배열을 복사하여 연산을 적용한다. 그리고 주어진 순서대로 연산을 수행한 후, 배열의 값을 구한다.
Arr::apply_ops(int* order){
int min_val = MAX_VAL, val;
// copy origin array
for(int i=0; i<N; i++){
for(int j=0; j<M; j++){
copyA[i][j] = A[i][j];
}
}
// apply operations in given order
for(int i=0; i<K; i++){
rotate(order[i]);
}
// calculate value of the array
for(int i=0; i<N; i++){
val = 0;
for(int j=0; j<M; j++){
val += copyA[i][j];
}
min_val = min(min_val, val);
}
return min_val;
}
전체 코드는 여기서 확인할 수 있다.
'Algorithm > Problem Solving' 카테고리의 다른 글
[ Baekjoon ] 16236. 아기 상어 (0) | 2020.06.03 |
---|---|
[ Baekjoon ] 17136. 색종이 붙이기 (0) | 2020.06.03 |
[ Baekjoon ] 17070. 파이프 옮기기 1 (0) | 2020.06.02 |
[ Baekjoon ] 1920. 수 찾기 (0) | 2020.06.01 |
[ Baekjoon ] 17837. 새로운 게임2 (0) | 2020.05.31 |
Comments