광규니
광규니네
광규니
전체 방문자
오늘
어제
  • 분류 전체보기 (154)
    • 알고리즘 (100)
      • 알고리즘 개념 (2)
      • 문제 풀이 (96)
    • 주절주절 (19)
      • 자격증, 활동 후기 (4)
      • 전시회 후기 (3)
      • 이모저모 (2)
      • 회고 (3)
      • 뜨럼 (7)
    • 운영체제 (9)
    • 개발 지식 (9)
      • Apple Watch (4)
      • MySQL (2)
      • Eclipse (1)
      • XCode (1)
    • 네트워크 공부 (1)
    • 데이터베이스 공부 (5)
    • Java 공부 (7)
    • TMP (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 구현
  • BOJ
  • BFS
  • 컴퓨터 사이언스
  • 프로그래머스
  • 티스토리챌린지
  • 오블완
  • 운영체제
  • 다이나믹 프로그래밍
  • 자바
  • 파이썬
  • 개념
  • DP
  • 애플워치 앱
  • OS
  • 합주
  • 애플워치 앱 만들기
  • 드린이
  • 알고리즘
  • 백준

최근 댓글

최근 글

티스토리

250x250
hELLO · Designed By 정상우.
광규니

광규니네

알고리즘/문제 풀이

[Java/자바 백준 17143] 낚시왕

2021. 11. 11. 00:59
반응형

풀이

 

빡구현 문제 

 

처음에

상어들을 2차원 리스트에 넣어줬습니다.

1~M까지 넣어주고 상어들을 넣어주고

map에는 상어들의 인덱스 값을 띄웠습니다 !!

 

서있는 y위치를 증가시키면서

첫째 find를 구현해서 땅과 가장 가까운 상어를 잡아 total에 더해주고, 해당 위치는 0으로 바꿔주었고

해당 인덱스 상어의 x값을 -1로 초기화 했습니다. 이유는

상어들을 이동시킬때 잡아먹힌 앤지 아닌지 판별하려고 했습니다.

 

둘째 상어들 이동단계에서

map을 우선 0으로 초기화 시키구

잡히지 않은 상어들을 이동시켰습니다.

조건에 따라 벽에 부딪힌다면, 반대쪽으로 가게 구현했습니다. 

map이 0이라면 해당 상어 인덱스를 map에 넣어주고

0이 아니라면

해당 위치에 있는 상어 크기와 현재 상어 크기의 값을 비교해주었습니다.

 

import java.io.*;
import java.util.*;

public class Main {
	static int R,C,m,cur_y, total;
	static int[][] map;
	// 위 아래 오른 왼 
	static int[] dx = {-1,1,0,0};
	static int[] dy = {0,0,1,-1};
	static int[][] shark;
	public static void main(String[] args) throws Exception{
		// TODO Auto-generated method stub
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st= new StringTokenizer(br.readLine()," ");
		R= Integer.parseInt(st.nextToken());
		C= Integer.parseInt(st.nextToken());
		//상어 갯
		m= Integer.parseInt(st.nextToken());
		map = new int[R][C];
		total = 0;
		// r,c, 속력 , 방향,크기 
		shark = new int[m+1][5];
		for(int i=1; i<=m ; i++) {
			st= new StringTokenizer(br.readLine()," ");
			int r = Integer.parseInt(st.nextToken())-1;
			int c = Integer.parseInt(st.nextToken())-1;
			int s = Integer.parseInt(st.nextToken());
			int d = Integer.parseInt(st.nextToken())-1;
			int z = Integer.parseInt(st.nextToken());
			shark[i][0] = r;
			shark[i][1] = c;
			shark[i][2] = s;
			shark[i][3] = d;
			shark[i][4] = z;
			map[r][c] = i;
		}
		
		//낚시 시작
		cur_y=-1;
		while(true) {
			// 오른쪽으로 이동 
			if(cur_y == C-1) break;
			cur_y ++;
			// 가까운 상어 잡기 
			find();
			// 상어 이동
			move();
		}
		System.out.println(total);
		
	}
	private static void move() {
		// TODO Auto-generated method stub
		map = new int[R][C];
		for(int i = 1 ; i<=m ; i++) {
			// 상어가 존재 한다
			if(shark[i][0] != -1) {
				int x = shark[i][0];
				int y = shark[i][1];
				int s = shark[i][2];
				int d = shark[i][3];
				int z = shark[i][4];
				for(int j = 0 ; j < s ; j++) {
					int nx = x + dx[d];
					int ny = y + dy[d];
					if(0>nx) {
						nx = 1 ;
						d=1;
					}
					else if(0>ny) {
						ny = 1;
						d=2;
					}
					else if(nx>R-1) {
						nx = R-2;
						d=0;
					}
					else if(ny>C-1) {
						ny = C-2;
						d=3;
					}
					x = nx;
					y = ny;
				}
				shark[i][0]=x;
				shark[i][1]=y;
				shark[i][2]=s;
				shark[i][3]=d;
				shark[i][4]=z;
				
				// 해당 맵에 상어가 있다
				if(map[x][y] != 0) {
					// 누가 더 큰지 따져준다
					if(shark[map[x][y]][4] > z) {
						shark[i][0] = -1;
					}
					else {
						shark[map[x][y]][0] = -1;
						map[x][y] = i;
					}
				}
				//없다
				else {
					map[x][y] = i;
				}
					
				
			}
		}
	}
	
	private static void find() {
		// TODO Auto-generated method stub
		for(int i = 0 ; i<R ; i++) {
			if(map[i][cur_y] != 0) {
				int shark_idx = map[i][cur_y];
				map[i][cur_y] = 0;
				total += shark[shark_idx][4];
				shark[shark_idx][0] = -1;
				
				
				break;
			}
		}
	}

}

문제 자체는 어렵지 않지만,, 구현하다보면 헷갈릴 수도 있습니당

빡구현 문제는 변수랑 함수를 잘 나누어줘야 덜 헷갈리는거 같습니다. !

반응형
저작자표시 (새창열림)

'알고리즘 > 문제 풀이' 카테고리의 다른 글

[Java/자바 백준 14503] 로봇 청소기  (0) 2022.01.03
[Java/자바 백준 23288] 주사위굴리기2  (0) 2021.11.16
[Java/자바 백준 16235] 나무 재테크  (0) 2021.11.10
[Java/자바 백준 21610] 마법사 상어와 비바라기  (0) 2021.11.10
[Java/자바 백준 16234] 인구이동  (0) 2021.11.09
    '알고리즘/문제 풀이' 카테고리의 다른 글
    • [Java/자바 백준 14503] 로봇 청소기
    • [Java/자바 백준 23288] 주사위굴리기2
    • [Java/자바 백준 16235] 나무 재테크
    • [Java/자바 백준 21610] 마법사 상어와 비바라기
    광규니
    광규니
    공부 및 일상 올리기~

    티스토리툴바