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
- 스프링 핵심 원리 - 기본편
- 20055
- 스프링 핵심 원리 이해
- 백준
- 13460 구슬탈출 2
- 코틀린인액션
- Kotlin in action 3장
- 20055 컨베이어 벨트 위의 로봇
- 스프링 컨테이너와 스프링 빈
- kotlin in action 정리
- 7장 고급매핑
- 백준 20055 컨베이어 벨트 위의 로봇
- 싱글톤 컨테이너
- Kotlin in action 5장
- Kotlin
- 컨베이어 벨트 위의 로봇 Python
- 기능개발 python
- 코틸린인액션
- 고급매핑
- Kotlin in action 6장
- 백준 13460 Python
- Kotlin In Action
- KotlinInAction
- 코틀린
- 자바 ORM 표준 JPA 프로그래밍 7장
- 스프링 핵심 원리
- Python
- Kotlin in action 10장
- 객체 지향 설계와 스프링
- spring
Archives
- Today
- Total
기록하는 습관
[삼성SW기출문제] 14888번 연산자 끼워넣기 본문
1. 문제 링크
https://www.acmicpc.net/problem/14888
2. 코드
이 문제는 총 2가지 풀이 방법이 있다.
1. 순열 구한 후, 완전 탐색으로 풀기
-> 이중 for문으로 시간복잡도 log(N^2)
-> 백준 Python3로는 시간초과 발생. PyPy3는 통과.
- 문제 소요 시간: 30분
from itertools import permutations
N = int(input())
A = list(map(int, input().split()))
o = list(map(int, input().split()))
operator = ['+', '-', '*', '/']
op = []
for i in range(len(o)):
op += [operator[i]] * o[i]
max_ans, min_ans = -1e9, 1e9
orders = list(permutations(op, N - 1))
for order in orders:
answer = A[0]
for i in range(len(order)):
if order[i] == '+':
answer += A[i + 1]
elif order[i] == '-':
answer -= A[i + 1]
elif order[i] == '/':
if answer < 0:
answer = -(abs(answer) // A[i + 1])
else:
answer //= A[i + 1]
elif order[i] == '*':
answer *= A[i + 1]
max_ans = max(max_ans, answer)
min_ans = min(min_ans, answer)
print(max_ans)
print(min_ans)
2. DFS 알고리즘으로 풀기 (재귀 이용)
- 문제 소요 시간: 29분
from itertools import permutations
N = int(input())
A = list(map(int, input().split()))
op = list(map(int, input().split())) # +, -, *, //
max_ans, min_ans = -1e9, 1e9
def dfs(i, answer, add, sub, mul, div):
global max_ans, min_ans
if i == N:
max_ans = max(answer, max_ans)
min_ans = min(answer, min_ans)
return
if add:
dfs(i + 1, answer + A[i], add - 1, sub, mul, div)
if sub:
dfs(i + 1, answer - A[i], add, sub - 1, mul, div)
if mul:
dfs(i + 1, answer * A[i], add, sub, mul - 1, div)
if div:
dfs(i + 1, int(answer / A[i]), add, sub, mul, div - 1)
dfs(1, A[0], op[0], op[1], op[2], op[3])
print(max_ans)
print(min_ans)
'알고리즘 > [문제풀이] 삼성 SW 기출문제, 모의고사' 카테고리의 다른 글
[삼성SW기출문제] 14891번 톱니바퀴 (0) | 2022.09.15 |
---|---|
[삼성SW기출문제] 16234번 인구 이동 (0) | 2022.09.14 |
[삼성SW기출문제] 14503번 로봇 청소기 (0) | 2022.09.14 |
Comments