코드굽는 타자기
SWEA[1211] - Ladder2[D4] 본문
링크
SWEA[1211]
문제설명
- 시뮬
문제풀이
- 시뮬 + len count
문제코드
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Solution1211 {
public static int Ans=-1;
public static int Start;
public static int Ans_len=0;
public static int len=Integer.MAX_VALUE;
public static int[][] dir = {
{0,-1}, //좌
{0,1}, //우
{1,0} //하
};
public static int[][] map = new int[100][100];
public static void Search(int[] rc, int now_dir) {
if(rc[0]==99) {
if(Ans_len>=len) {
Ans=Math.max(Ans,Start);
Ans_len=len;
return;
}
else return;
}
len++;
// map[rc[0]][rc[1]]=8;
// int debug=0;
int nr;
int nc;
switch (now_dir) {
// 좌
case 0:
// 하 check
nr = rc[0] + dir[2][0];
nc = rc[1] + dir[2][1];
if (nr>=0 && nr<100 && nc>=0 && nc<100 && map[nr][nc]==1) {
Search(new int[] {nr,nc},2);
break;
}
// 아니면 좌로 감
nr = rc[0] + dir[0][0];
nc = rc[1] + dir[0][1];
if (nr>=0 && nr<100 && nc>=0 && nc<100 && map[nr][nc]==1) {
Search(new int[] {nr,nc},0);
break;
}
// 우
case 1:
// 하 check
nr = rc[0] + dir[2][0];
nc = rc[1] + dir[2][1];
if (nr>=0 && nr<100 && nc>=0 && nc<100 && map[nr][nc]==1) {
Search(new int[] {nr,nc},2);
break;
}
// 아니면 우로 감
nr = rc[0] + dir[1][0];
nc = rc[1] + dir[1][1];
if (nr>=0 && nr<100 && nc>=0 && nc<100 && map[nr][nc]==1) {
Search(new int[] {nr,nc},1);
break;
}
// 하
case 2:
// 좌우 check
nr = rc[0] + dir[0][0];
nc = rc[1] + dir[0][1];
if (nr>=0 && nr<100 && nc>=0 && nc<100 && map[nr][nc]==1) {
Search(new int[] {nr,nc},0);
break;
}
nr = rc[0] + dir[1][0];
nc = rc[1] + dir[1][1];
if (nr>=0 && nr<100 && nc>=0 && nc<100 && map[nr][nc]==1) {
Search(new int[] {nr,nc},1);
break;
}
// 아니면 하로 감
nr = rc[0] + dir[2][0];
nc = rc[1] + dir[2][1];
if (nr>=0 && nr<100 && nc>=0 && nc<100 && map[nr][nc]==1) {
Search(new int[] {nr,nc},2);
break;
}
break;
default:
break;
}
}
public static void main(String args[]) throws Exception
{
System.setIn(new FileInputStream("res/swea/1211.txt"));
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
int T = 10;
for(int test_case = 1; test_case <= T; test_case++)
{
br.readLine();
for (int i = 0; i < 100; i++) {
st = new StringTokenizer(br.readLine());
for (int j = 0; j < 100; j++) {
map[i][j]=Integer.parseInt(st.nextToken());
}
}
for (int i = 0; i < 100; i++) {
if(map[0][i]==1) {
Start=i;
len=Integer.MAX_VALUE;
Search(new int[] {0,i},2);
}
}
System.out.println("#"+test_case+" "+Ans);
// 초기화
Ans=-1;
Ans_len=0;
}
}
}
아쉬운점
- 시작방향 '아래'로 설정안했음
잘한점
- switch 문 사용해서 품
- len_count 잘함
'알고리즘 > Simulation' 카테고리의 다른 글
SWEA[5656] - 벽돌 깨기 (1) | 2020.02.19 |
---|---|
SWEA[1240] - 단순 2진 암호코드[D3] (0) | 2020.02.17 |
SWEA[1210] - Ladder1[D4] (0) | 2020.02.17 |
SWEA[2382] - 미생물 격리 (0) | 2020.02.14 |
SWEA[1258] - 행렬찾기[D4] (0) | 2020.02.13 |
Comments