본문 바로가기

Algorithm/BOJ

[BOJ] 백준 17281 ⚾ (C++)

문제 링크

www.acmicpc.net/problem/17281

 

17281번: ⚾

⚾는 9명으로 이루어진 두 팀이 공격과 수비를 번갈아 하는 게임이다. 하나의 이닝은 공격과 수비로 이루어져 있고, 총 N이닝 동안 게임을 진행해야 한다. 한 이닝에 3아웃이 발생하면 이닝이 종

www.acmicpc.net

카테고리

백트래킹, 브루트 포스

문제 풀이

1. 백트래킹을 이용해 야구선수들의 순서를 정한다. (백트래킹)

 

2. 각 순서에 맞게 게임을 시작해 본다. (브루트 포스)

 

3. 게임의 조건에 맞게 야구를 시작하고, 해당 순서에 따른 점수를 비교해 그 중 최댓값을 출력한다.

 

* 게임 조건

더보기

 1. 이닝별로 게임을 시작한다. (이닝 시작 시 변수들 초기화)

 2. 베이스에 나가있는 타자들의 위치를 remainBase큐에 저장한다.

 3. 각 타자들의 공 친 결과에 따라 remainBase 큐를 갱신한다.

   3-1. 안타 : 3루 이상 타자들의 수만큼 점수++ 해주고 pop, 타자 본인과 나머지 타자 1루씩 전진

   3-2. 2루타 : 2루 이상 타자들의 수만큼 점수++ 해주고 pop, 타자 본인과 나머지 타자 2루씩 전진

   3-3. 3루타 : 1루 이상 타자들의 수만큼 점수++ 해주고 pop, 타자 본인 3루씩 전진

   3-4. 홈런 : (모든 타자들의 수+본인)만큼 점수++ 해주고 pop

   3-5. out : out값++ 해준다.

주의할 점

기존의 야구는 9이닝이지만 여기는 최대 50이닝이라 배열 크기를 좀 더 크게 정해줘야한다. (런타임 에러 방지)

코드 (C++)

채점 결과

한마디

  처음 제출할 때 컴파일 에러, 런타임 에러 둘 다 떠서 당황했던 문제다.

  컴파일 에러는 C++17에서 배열 이름을 visit으로 해서, 런타임 에러는 배열 크기를 작게 해서 받았다. 

  문제 조건을 좀 더 세심히 읽어봐야겠다. 😲