728x90
이문제는 1번 선수를 4번 타자로 배정하고 나머지 인원으로 어떻게 순서를 배정하면 되는지 순열 문제이다.
풀이 단계
- 0번 선수를 4번 타자에 넣고 나머지 인원을 순열로 구성한다.
- 순서가 구성이 완료되었다면 이닝수만큼 진행한다.
- 각각의 타자가 수행한만큼 전체 타석의 인원을 이동을 해주고 out이 3이 되면 다음 이닝으로 진행한다
choice라는 배열에 타자의 순서를 넣도록 한다.
순열을 구성하는 함수이다. i가 3일 경우에 이미 1번 타자가 4번째로 와있으므로 다음 타자로 넘어간다.
각각의 이닝마다 타석에 위치한 선수들은 다 나가기 때문에 이닝마다 타석을 초기화시켜준다!
이 부분에서 약간의 실수가 있었다.ㅠㅠ
out이 3이 될 때까지 각 이닝을 진행한다.
타석이 이렇게 생겼기 때문에 2번 타자부터 나가야지 이전의 타자가 이동을 할 수 있기 때문에 거꾸로 계산을 해주었다.
0번부터 이동하게 된다면 그 지점에서 원래 있었는지 여부를 체크해줘야 하기 때문에 어렵다.
전체 코드
더보기
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main{
static boolean visit[];
static int choice[];
static int map[][],tasuk[],result,n,sum;
public static void main(String[] args) throws IOException {
choice=new int[9];
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
n=Integer.parseInt(br.readLine());
visit=new boolean[9];
map=new int [n][9];
for(int i=0;i<n;i++) {
StringTokenizer st=new StringTokenizer(br.readLine());
for(int j=0;j<9;j++) {
map[i][j]=Integer.parseInt(st.nextToken());
}
}
choice[3]=0;
tnsduf(0);
System.out.println(result);
}
private static void tnsduf(int i) {
// TODO Auto-generated method stub
if(i==9) {
cal();
return;
}
if(i==3) {
tnsduf(i+1);
return;
}
for(int j=1;j<9;j++) {
if(visit[j])
continue;
choice[i]=j;
visit[j]=true;
tnsduf(i+1);
visit[j]=false;
}
}
private static void cal() {
// TODO Auto-generated method stub
sum=0;
int who=0;//현재 타자
for(int i=0;i<n;i++) {
int out=0;
tasuk=new int[3];
while(out<3) {
if(map[i][choice[who]]==0) {
out++;
}
else if(map[i][choice[who]]==1) {
go(1);
}else if(map[i][choice[who]]==2) {
go(2);
}else if(map[i][choice[who]]==3) {
go(3);
}else if(map[i][choice[who]]==4) {
go(4);
}
who=(who+1)%9;
}
}
if(result<sum) {
result=Math.max(result,sum);
}
}
private static void go(int i) {
// TODO Auto-generated method stub
for(int j=2;j>=0;j--) {
if(tasuk[j]==1) {
tasuk[j]=0;
if(j+i>=3) {
sum++;
}
else {
tasuk[j+i]=1;
}
}
}
if(i==4) {
sum++;
}
else {
tasuk[i-1]=1;
}
}
}
'삼성 역량테스트 문제' 카테고리의 다른 글
백준 17780 <새로운 게임> (0) | 2020.09.14 |
---|---|
swea 2105 <디저트 카페> (0) | 2020.09.07 |
백준 17471 <게리맨더링> (0) | 2020.09.02 |
백준 17779 <게리멘더링2> (0) | 2020.09.02 |
백준 15686 <치킨 배달> (0) | 2020.08.25 |