문제 요약
N개의 수와 N-1개의 연산자가 주어졌을 때, 만들 수 있는 식의 결과가 최대인 것과 최소인 것을 구하는 프로그램
입력
첫째 줄에는 수의 개수가 주어지고, 둘째 줄에는 수가 주어지며, 셋째 줄에는 4개의 연산자의 각각 사용 가능한 개수가 주어진다
ex)
2
5 6
0 0 1 0
출력
첫째 줄에 최대값을, 둘째 줄에 최소값을 출력한다.
ex)
30
30
문제 코드
코드 설명
5번 줄까지는 입력을 받는 부분이니 굳이 설명하지 않겠음.
go 함수
재귀함수로 매개변수로 받는 add, sub, mul, div의 남은 개수를 파악하고 이에 따라서 다음 연산을 진행한다.
더이상 사용할 연산자가 없으면 계산 값을 res_l에 할당하고 재귀적으로 실행됐던 부분을 반대로 돌아간다. 이후 다른 순서로 또 재귀적으로 계산한다. 그리고 다시 돌아간다. 이를 남은 연산자의 수가 없을때까지 계속해서 반복한다.
add, sub, mul, div if 문이 순서대로 배열되어있어서 언제 실행해도 add부터 실행되는 것이 아닐까?라고 생각했는데, 가장 처음 시도에는 add, sub, mul, div 우선순위로 실행되는게 맞으나 처음 시도가 끝나게 되면 add if문의 다음 순서인 sub if 문이 실행되어서 결국 순차적으로 모든 연산자가 랜덤 순서로 실행 될 수 있음을 디버깅을 통해 알 수 있었다.
go 함수를 이용해서 입력 받은 수들을 모두 계산한 결과값을 모은 res_l 에서 최대값과 최소값을 출력한다.
소감
백트래킹의 기본적인 원리를 이해하고 구현해볼 수 있는 문제이다.
'Koala - 14기 > 코딩테스트 준비 스터디' 카테고리의 다른 글
[백준/python] 14502 연구소 (0) | 2024.03.17 |
---|---|
[백준/C++] 2503 숫자야구 (0) | 2024.03.17 |
[백준/python] 호텔 방 번호 (0) | 2024.03.17 |
[백준/C++] 1855번 : 암호 (0) | 2024.03.17 |
[백준 2116 cpp] 주사위 쌓기 (0) | 2024.03.17 |