일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- SWEA
- 2021 KAKAO BLIND RECRUITMENT
- 브루트포스
- 파이썬
- 로봇 청소기
- 스택
- 조합
- 2020 카카오 인턴십
- 2019 KAKAO BLIND RECRUITMENT
- 최소 신장 트리
- 우선순위큐
- 2018 KAKAO BLIND RECRUITMENT
- 백준
- 투 포인터
- 백트래킹
- 다익스트라
- 트라이
- 플로이드 와샬
- 2020 KAKAO BLIND RECRUITMENT
- 플로이드와샬
- 비트마스킹
- 프로그래머스
- 구현
- Spring
- 이분탐색
- BFS
- GIT
- 시뮬레이션
- 투포인터
- 크루스칼
- Today
- Total
개발조아
[BOJ/백준] 6987 월드컵 파이썬 본문
문제 링크 : https://www.acmicpc.net/problem/6987
6987번: 월드컵
월드컵 조별 최종 예선에서는 6개국으로 구성된 각 조별로 동일한 조에 소속된 국가들과 한 번씩, 각 국가별로 총 5번의 경기를 치른다. 조별리그가 끝난 후, 기자가 보내온 각 나라의 승, 무승부
www.acmicpc.net
브루트포스, 백트래킹 문제이다.
나는 연산자 끼워넣기랑 유사하게 풀었다.
https://www.acmicpc.net/problem/14888
14888번: 연산자 끼워넣기
첫째 줄에 수의 개수 N(2 ≤ N ≤ 11)가 주어진다. 둘째 줄에는 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 100) 셋째 줄에는 합이 N-1인 4개의 정수가 주어지는데, 차례대로 덧셈(+)의 개수, 뺄셈(-)의 개수,
www.acmicpc.net
연산지 끼워넣기에는 사용가능한 연산자 개수가 정해져있다.
이문제도 비슷한데 승패무의 개수가 정해져있다.
그래서 A나라 부터 결과를 다른 나라와 맞춰보면서 진행한다.
만약 마지막 나라까지 도달했다면 끝내면 된다.
마지막 나라의 경우 다른 나라에 의해서 다 결정되기 때문에 보지 않아도 된다.
각 나라와 맞춰보는 과정은 아래와 같다.
만약 A나라가 1승 4무 0패 라면
처음에 B나라와 이겼다고 체크한다. 이때 A나라는 이겼으므로 승수를 -1해주고 B나라는 진 것이므로 B나라의 패수를-1을 해준다.
그리고 다음 결과로 진행한다.
끝까지 진행하고 다시 해당 시점으로 돌아왔을 때 C나라와 겨뤄본다. 이런식으로 브루트포스와 백트래킹을 이용했다.
만약 진행하다가 상대 결과 값이 0인데 빼려고 하는 경우는 불가능한 경우이므로 해당 경우는 지나간다.
def solv():
global board
input_data = list(map(int, input().split()))
if 6 in input_data:
return 0
board = []
for idx in range(0,18,3):
board.append(input_data[idx:idx+3])
if go(0,1):
return 1
else:
return 0
def go(now, target,):
if target == 6:
now += 1
target = now + 1
if now == 5:
return True
for idx in range(3):
if board[now][idx] > 0:
if idx == 0:
target_idx = 2
elif idx == 1:
target_idx = 1
else:
target_idx = 0
if board[target][target_idx] > 0:
board[now][idx] -= 1
board[target][target_idx] -= 1
if go(now, target+1, ):
return True
board[now][idx] += 1
board[target][target_idx] += 1
return False
answer = []
for _ in range(4):
answer.append(solv())
print(*answer)
'알고리즘 > 백준' 카테고리의 다른 글
[BOJ/백준] 4991 로봇 청소기 파이썬 (0) | 2021.09.13 |
---|---|
[BOJ/백준] 18119 단어 암기 파이썬 (0) | 2021.09.12 |
[BOJ/백준] 11067 모노톤길 파이썬 (0) | 2021.09.12 |
[BOJ/백준] 8982 수족관 1 파이썬 (0) | 2021.09.10 |
[BOJ/백준] 15686 치킨 배달 파이썬 (0) | 2021.09.09 |