developer-ellen
인간 디버거의 로그 찍기
developer-ellen
전체 방문자
오늘
어제
  • 분류 전체보기 (217)
    • 회고록 (0)
    • 취뽀 및 커리어 여정의 Stack (2)
      • SSAFY 7기 (2)
    • 프로그래밍공부 (24)
      • c++ (0)
      • JAVA (3)
      • Spring (5)
      • design pattern (3)
      • BackDB (1)
      • Servlet&JSP (3)
      • Vue (4)
      • JPA (4)
      • Infra (1)
      • Linux (0)
    • AI (3)
      • papers (3)
      • trend (0)
    • 프로젝트진행 (0)
      • 데이터베이스 (0)
      • 서버개발 (0)
      • 인공지능 (0)
      • 하루정리 (0)
    • 포트폴리오 (0)
    • 알고리즘 (158)
      • 알고리즘문풀 (155)
      • 알고리즘공부 (3)
    • 통계공부 (15)
      • 시계열분석 (15)
      • 회귀분석 (0)
    • CS (14)
      • 컴퓨터네트워크 (4)
      • 운영체제 (8)
      • 데이터베이스 (2)
    • 주저리주저리 (0)
      • 필사 (0)
    • 취업관련정보 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 시계열분석
  • 백준파이썬풀이
  • 삼성코테파이썬
  • 데이터분석
  • MA모형
  • 운영체제인터럽트
  • c++ 빌더 패턴
  • SW역량테스트파이썬풀이
  • 카카오코테java풀이
  • 코테파이썬
  • 삼성코테자바풀이
  • 삼성코테구현풀이
  • 통계분석
  • 삼성코테기출자바풀이
  • 삼성코테파이썬풀이
  • 삼성코테준비
  • 카카오코테
  • ARIMA모형
  • 삼성코테자바준비
  • Arima
  • 삼성코테구현문제추천
  • 삼성코테파이썬준비
  • SW역량테스트파이썬
  • 시계열
  • 삼성코테기출
  • c++디자인패턴
  • AR모형
  • 통계학
  • 삼성코테자바꿀팁
  • BOJ파이썬풀이

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
developer-ellen

인간 디버거의 로그 찍기

BOJ - 드래곤 커브 15685번 (JAVA)
알고리즘/알고리즘문풀

BOJ - 드래곤 커브 15685번 (JAVA)

2022. 4. 21. 02:54

❓ 문제 - 백준 드래곤 커브 15685번 - JAVA 풀이법

출처 

(https://www.acmicpc.net/problem/15685)

 

15685번: 드래곤 커브

첫째 줄에 드래곤 커브의 개수 N(1 ≤ N ≤ 20)이 주어진다. 둘째 줄부터 N개의 줄에는 드래곤 커브의 정보가 주어진다. 드래곤 커브의 정보는 네 정수 x, y, d, g로 이루어져 있다. x와 y는 드래곤 커

www.acmicpc.net

 

 

📝 문제해결법

1. 이 문제는 구현으로 풀었다.

 

- 구현 핵심 아이디어는 다음과 같다.

  • 방향 동(0), 북(1), 서(2), 남(3) 으로 잡았을 때 (현재 방향 인덱스 + 1) % 4 한 값은 문제에서 주어진 방향을 90도로 회전한 값이다.
  • 리스트에서 그 전 세대들의 모든 방향을 마지막부터 꺼내와서 90도 회전시켜 이동한 후 다시 90도 회전한 방향들을 리스트에 넣어주면서 반복한다. 
  • 0세대의 경우 동(0) 으로 움직였을 때 동(0) 방향을 리스트에 넣어준다.
  • 1세대의 경우 리스트의 마지막 넣은 것부터 꺼내오면 동(0)이므로 이것을 90도 회전하면 북(1)이므로 해당 방향에 맞춰 이동한 후 list에 북(1) 방향을 넣어준다.
  • 2세대의 경우 리스트의 마지막 넣은 것부터 꺼내오면 북(1)이고 이것을 90도 회전하면 서(2)이므로 서로 이동한 후, 또 리스트에서 동(0)을 꺼내와서 90도 회전시키면 북(1)이다. 해당 방향의 맞춰 이동 처리해주면 된다. 그리고 이동한 방향들을 리스트에 넣어준다.
  •  3세대의 경우 리스트의 마지막 넣은 것부터 꺼내오면 북(1)이고 이것을 90도 회전하면 서(2), 그 다음 꺼내온 방향은 서(2)이고 이것의 90도 회전 은 남(3), 그 다음은 북(1)을 꺼내와서 이것을 90도 회전하면 서(2) 이다. 그 다음 동(0)을 꺼내와서 이것을 90도 회전하면 북(1) 이다. 90도 이동시켜 이동한 방향들을 다시 list에 넣어준다. 

 

 

2. 느낀점

  • 처음 스택으로 할까 list로 할까 고민하다가 stack보다는 인덱스 접근이 편한 arrayList를 활용하였다.
  • 처음에 이정도로 간결한 코드는 아니였지만 다른 사람들의 코드를 참고하며 줄일 것은 줄이고 좀 더 간결한 코드를 작성해보았다. 
  • 이 문제는 아이디어 싸움인 것 같다.. 다음에도 이런 비슷한 문제를 만나면 빠르고 정확하게 풀어내야지 !

 

💻 소스코드

// BOJ - 드래곤 커브(15685번)
// 구현

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.StringTokenizer;

public class Main_15685 {
	public static int[] dx = {0, -1, 0, 1};
	public static int[] dy = {1, 0, -1, 0};
	public static boolean[][] visited;
	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = null;
		int n = Integer.parseInt(br.readLine());
		visited = new boolean[101][101];
		
		for(int i=0;i<n;i++) {
			st = new StringTokenizer(br.readLine(), " ");
			int y = Integer.parseInt(st.nextToken());
			int x = Integer.parseInt(st.nextToken());
			int d = Integer.parseInt(st.nextToken());
			int g = Integer.parseInt(st.nextToken());
			visited[x][y] = true;
			ArrayList<Integer> dir_list = new ArrayList<>();
			dir_list.add(d);
			
			
			for(int p=1;p<=g;p++) {
				for(int q=dir_list.size()-1;q>=0;q--) {
					dir_list.add((dir_list.get(q)+1) % 4);
				}
				
			}
			for(int dir:dir_list) {
				x += dx[dir];
				y += dy[dir];
				visited[x][y] = true;
			}
			
		}
		
	
		
		int cnt = 0;
		for(int i=0;i<100;i++) {
			for(int j=0;j<100;j++) {
				if(visited[i][j] && visited[i+1][j] && visited[i][j+1] && visited[i+1][j+1]) {
					cnt++;
				
				}
					
			}
		}
		
		System.out.println(cnt);
	}

}

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

BOJ - 나무 재테크 16235번 (JAVA)  (0) 2022.04.22
BOJ - 큐빙 5373번 (JAVA)  (0) 2022.04.22
BOJ - 사다리 조작 15684번 (JAVA)  (0) 2022.04.21
BOJ - 감시 15683번 (Java)  (0) 2022.04.21
BOJ - 로봇 청소기 14503번 (JAVA)  (0) 2022.04.17
    '알고리즘/알고리즘문풀' 카테고리의 다른 글
    • BOJ - 나무 재테크 16235번 (JAVA)
    • BOJ - 큐빙 5373번 (JAVA)
    • BOJ - 사다리 조작 15684번 (JAVA)
    • BOJ - 감시 15683번 (Java)
    developer-ellen
    developer-ellen

    티스토리툴바