반응형
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 |
Tags
- 백준
- 차이
- ReferenceType
- Exception
- primitivetype
- sql태그
- 데이터탑입
- 변수
- string
- 자바오류
- 차이점
- char
- 코딩테스트
- java
- 내맘대로정리
- 프로그래머스
- ClassPathResource
- 시뮬레이션
- include태그
- json파싱
- 자바
- 원시타입
- SQL
- 알고리즘
- 주사위굴리기
- JSON
- Spring
- 참조타입
- mybatis
- Char[]
Archives
- Today
- Total
재채기는 H
백준 3190 - 뱀 JAVA 본문
반응형
https://www.acmicpc.net/problem/3190
단순 시뮬레이션문제 였던거같다.
내가 필요로 하는
x,y 쌍의 Pair 클래스와,
초마다의 방향을 알려주는 Dic 클래스,
그리고 뱀을 이동과 시간, 방향을 알려주는 Snake 클래스를 생성하였다.
사과는 이차원 배열인 map에 있을 때 1, 없을 때 0을 주어 표현하였고
뱀이 이동하는 것은 snake객체에 list와 map에서는 2로 표현해주었다.
딱히 문제없이 풀 수 있는 난이도였다.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
import java.util.StringTokenizer;
class Pair{
int x;
int y;
Pair(int x, int y){
this.x=x;
this.y=y;
}
}
class Dic{
int sec;
String dic;
Dic(int sec, String dic){
this.sec=sec;
this.dic=dic;
}
}
class Snake{
List<Pair> list;
int dic;
int cnt;
Snake(List<Pair> list, int dic, int cnt){
this.list= list;
this.dic= dic;
this.cnt = cnt;
}
}
public class 백준_뱀_3190 {
static int N,K,L;
static int[][] map;
static Queue<Dic> changeDic;
static Snake snake;
//북 동 남 서
static int[] dx = {-1,0,1,0};
static int[] dy = {0,1,0,-1};
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
N = Integer.parseInt(br.readLine());
map = new int[N][N];
K = Integer.parseInt(br.readLine());
for(int i=0;i<K;i++) {
st = new StringTokenizer(br.readLine());
map[Integer.parseInt(st.nextToken())-1][Integer.parseInt(st.nextToken())-1]=1;
}
map[0][0]=2;
L = Integer.parseInt(br.readLine());
changeDic = new LinkedList<>();
for(int i=0;i<L;i++) {
st = new StringTokenizer(br.readLine());
changeDic.add(new Dic(Integer.parseInt(st.nextToken()), st.nextToken()));
}
List<Pair> list = new ArrayList<>();
list.add(new Pair(0,0));
snake = new Snake(list, 1, 0);
move();
System.out.println(snake.cnt);
}
static void move() {
while(true) {
// System.out.println(snake.cnt);
// for(int i=0;i<N;i++) {
// for(int j=0;j<N;j++) {
// System.out.print(map[i][j]+" ");
// }
// System.out.println();
// }
int x = snake.list.get(snake.list.size()-1).x + dx[snake.dic];
int y = snake.list.get(snake.list.size()-1).y + dy[snake.dic];
snake.cnt++;
if(0<=x&&x<N&&0<=y&&y<N) {
if(map[x][y]==1) {
snake.list.add(new Pair(x,y));
map[x][y]=2;
}else if(map[x][y]==0){
Pair p =snake.list.remove(0);
map[p.x][p.y]=0;
snake.list.add(new Pair(x,y));
map[x][y]=2;
}else if(map[x][y]==2) {
break;
}
if(!changeDic.isEmpty()&&snake.cnt==changeDic.peek().sec) {
// System.out.println("changeDic.peek().sec : "+changeDic.peek().sec);
String dic =changeDic.poll().dic;
// System.out.println("dic : "+dic);
if(dic.equals("L")) {
snake.dic-=1;
if(snake.dic==-1) {
snake.dic=3;
}
}else if(dic.equals("D")){
snake.dic+=1;
if(snake.dic==4) {
snake.dic=0;
}
}
}
}else {
break;
}
}
}
}
반응형
'알고리즘' 카테고리의 다른 글
백준 14499 - 주사위 굴리기 JAVA (0) | 2020.07.21 |
---|---|
백준 12100 - 2048 (Easy) JAVA (0) | 2020.07.20 |
백준 13458 - 시험 감독 JAVA (0) | 2020.07.20 |
백준 13460 - 구슬 탈출 2 JAVA (0) | 2020.07.16 |
백준 1790 - 수 이어 쓰기 2 JAVA (0) | 2020.07.14 |
Comments