반응형
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 |
Tags
- 데이터탑입
- Char[]
- 코딩테스트
- Spring
- char
- java
- 차이점
- 내맘대로정리
- Exception
- include태그
- SQL
- primitivetype
- 알고리즘
- 주사위굴리기
- 프로그래머스
- 백준
- 자바오류
- 시뮬레이션
- string
- ReferenceType
- sql태그
- 차이
- json파싱
- 변수
- ClassPathResource
- 참조타입
- 자바
- mybatis
- 원시타입
- JSON
Archives
- Today
- Total
재채기는 H
백준 3190 - 뱀 JAVA 본문
반응형
https://www.acmicpc.net/problem/3190
3190번: 뱀
문제 'Dummy' 라는 도스게임이 있다. 이 게임에는 뱀이 나와서 기어다니는데, 사과를 먹으면 뱀 길이가 늘어난다. 뱀이 이리저리 기어다니다가 벽 또는 자기자신의 몸과 부딪히면 게임이 끝난다.
www.acmicpc.net
단순 시뮬레이션문제 였던거같다.
내가 필요로 하는
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