티스토리 뷰
14888번 : 연산자 끼워넣기
https://www.acmicpc.net/problem/14888
내가 만든 코드
#include <stdio.h>
int num[12]; //입력받은 수
int n = 0;
int ao[5] = {0, }; //사칙연산 + - * / 순
int tmp = 0;
int max = -100000000; //처음에 반드시 바뀌게
int min = 100000000; //처음에 반드시 바뀌게
void find(int k)
{
if(k==n-1) { //모든 연산자를 다 사용했으면
max = (max>=tmp) ? max : tmp; //최댓값
min = (min<=tmp) ? min : tmp; //최솟값
return;
}
for(int i = 0; i<=3; i++) {//+ - * / 남은 연산자가 없을 때 까지 재귀
if(ao[i] > 0 && i == 0) {
tmp += num[k+1]; //tmp 에 num[k+1]+해줌
ao[0]--; //+연산자 감소
find(k+1); //깊숙히
ao[0]++; //+연산자 다시 증가
tmp -= num[k+1]; //tmp 에 num[k-1]+해줌
}
if(ao[i] > 0 && i == 1) { //+처럼...
tmp -= num[k+1];
ao[1]--;
find(k+1);
ao[i]++;
tmp += num[k+1];
}
if(ao[i] > 0 && i == 2) { //+처럼...
tmp = tmp * num[k+1];
ao[2]--;
find(k+1);
ao[2]++;
tmp /= num[k+1];
}
if(ao[i] > 0 && i == 3) {
int tmp_tmp = tmp; //기존의 값을 따로 저장
tmp = tmp / num[k+1]; //나눈다!
ao[3]--; //나누기 연산자 감소
find(k+1); //깊숙히
ao[3]++; //나누기 연산자 증가
tmp = tmp_tmp; //깊숙히 들어가지 전의 tmp값을 대입
}
}
}
int main(void)
{
scanf("%d", &n);
for(int i = 0; i<n; i++) scanf("%d", &num[i]);
tmp = num[0];
scanf("%d %d %d %d", &ao[0], &ao[1], &ao[2], &ao[3]);
find(0);
printf("%d\n%d", max, min);
return 0;
}
수와 연산자를 입력 받은 후, 재귀함수에서 연산자가 있으면 사칙연산을 한 후, 재귀
이를 계속 반복하다가, k == n-1, 즉 모든 연산자를 다 사용 했을 때 (연산자는 원래 n-1개 있으나, k=0부터 시작했으므로 k=n-1일 땐 모든 연산자가 0 이다.) 계속 계산해온 값을 max, min값과 비교함.
재귀에서 나와도 tmp값은 달라졌기에, k+1되기전의 tmp값을 대입
c언어는 음수 / 양수 에서 몫은 음수를 양수로 바꾼 뒤 구해진 몫에 -1을 곲한 것으로 나오기 때문에 별다른 조치를 취하진 않았다.
ex) -7 / 2 : 몫_-3, 나머지_-1
'c언어 > BAEKJOON' 카테고리의 다른 글
c언어 1003번 피보나치 함수 (백준) (0) | 2022.04.10 |
---|---|
c언어 2447번 별찍기 - 10 (백준) (0) | 2022.04.10 |
c언어 20055번 컨테이어 벨트 위의 로봇 (백준) (0) | 2022.04.09 |
c언어 13458번 시험감독 (백준) (0) | 2022.04.09 |
c언어 고양이, 개 (백준) (부제 : c언어 \ 출력) (0) | 2022.03.01 |
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 누적합
- 정렬
- 최대공약수
- 오프라인 쿼리
- java
- 트리
- 세그먼트 트리
- find
- DP
- 1835번
- 6198
- 그리디
- 누적 합
- C++
- C언어
- BFS
- DFS
- 그래프
- union
- 덱
- 스택
- 카드
- 16120번
- 백준
- 최소 스패닝 트리
- 1835
- Krustal
- Mo.s
- 6198번
- 플로이드
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함