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)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

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

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
developer-ellen

인간 디버거의 로그 찍기

알고리즘/알고리즘문풀

BOJ - 컨베이어 벨트 위의 로봇 20055번 (JAVA)

2022. 4. 30. 13:50

❓ 문제 - 백준 컨베이어 벨트 위의 로봇 20055번 - JAVA 풀이법

 

출처 

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

 

20055번: 컨베이어 벨트 위의 로봇

길이가 N인 컨베이어 벨트가 있고, 길이가 2N인 벨트가 이 컨베이어 벨트를 위아래로 감싸며 돌고 있다. 벨트는 길이 1 간격으로 2N개의 칸으로 나뉘어져 있으며, 각 칸에는 아래 그림과 같이 1부

www.acmicpc.net

 

 

📝 문제해결법

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

  • ArrayList를 활용해서 벨트의 각 칸에 남은 내구도를 관리하며, robot의 배열로 0~n-1칸에 있는 로봇이 있는지 없는지를 체크해준다.
  • while을 통해 내구도가 0인 칸의 개수가 k개 이상인지 매번 체크하면서 조건에 순서에 맞춰 컨베이어벨트를 돌린다.
  • 처음에 컨베이어벨트가 한 칸 이동 처리해주고, 해당 컨베이어벨트가 한 칸씩 움직이면 로봇도 동시에 움직이므로 한칸씩 이동 처리 해준다. 그리고 n-1에 위치에서는 항상 로봇이 내리므로 로봇이 내림처리 해준다.
  • 그 다음 로봇의 이동이 이뤄지는데 n-1 ~ 1까지 현재 칸에서 로봇이 없는 상태에서 옆에 로봇이 존재한다면 현재 칸의 내구도가 1이상인지 체크한 후 나의 칸으로 로봇을 이동시켜준다.
  • 그리고 로봇을 이동처리 했을 순간에 내구도가 0으로 된 각 칸의 수를 cnt로 카운트 해준다. 
  • 그 뒤에 올리는 위치(0)에 내구도가 1이상인지 체크해서 1이상이라면 로봇을 올릴 수 있다. 그리고 아까와 같이 로봇을 올린 순간에 내구도가 0이되면 cnt을 1증가시켜준다.
  • 로봇을 옮기는 과정까지 다 처리한 후 내구도 0인게 k개 이상이라면 break를 통해 컨베이어벨트의 이동을 중지한다.

 

💻 소스코드

// BOJ - 컨베이어 벨트 위의 로봇 (20055번)
// 구현

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

public class Main_20055 {
	
	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine(), " ");
		int n = Integer.parseInt(st.nextToken());
		int k = Integer.parseInt(st.nextToken());
		ArrayList<Integer> power = new ArrayList<>();
		boolean[] robot = new boolean[n];
	

		st = new StringTokenizer(br.readLine(), " ");
		for(int i=0;i<2*n;i++) {
			power.add(Integer.parseInt(st.nextToken()));
			
		}
	
		int time = 1;
		int cnt = 0;
		while(true) {
			// 컨베이어 벨트 한칸  이동
		
			int last = power.get(2*n-1);
			power.remove(2*n-1);
			power.add(0, last);
		
			// 로봇 같이 한칸 이동
			for(int i=n-1;i>=1;i--) {
				robot[i] = robot[i-1];
			}
			robot[n-1] = false;
			robot[0] = false;
		
			// 로봇의 이동
			for(int i=n-1;i>=1;i--) {
			
				int p = power.get(i);
				if(p > 0 && !robot[i] && robot[i-1]) {
					robot[i] = true;
					power.set(i, p-1);
					robot[i-1] = false;
					if(p-1 == 0) {
						cnt++;
					}
				}
			}

			
			int first_p = power.get(0);
			if(first_p > 0) {
				power.set(0, first_p-1);
				robot[0] = true;
				if(first_p == 1) {
					cnt++;
				}
			}
			
			if(cnt >= k) {
				break;
			}

			time++;
		}
		System.out.println(time);
		

	}
	
	public static void print(boolean[] arr) {
		for(int i=0;i<arr.length;i++) {
			System.out.print(arr[i]?'t':'f');
			System.out.print(" ");
		}
		System.out.println();
	}

}

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

BOJ - 마법사 상어와 토네이도 20057번 (JAVA)  (0) 2022.04.30
BOJ - 마법사 상어와 파이어볼 20056번 (JAVA)  (0) 2022.04.30
BOJ - 스타트택시 19238번 (JAVA)  (0) 2022.04.30
BOJ - 어른 상어 19237번 (JAVA)  (0) 2022.04.30
BOJ - 청소년 상어 19236번 (JAVA)  (0) 2022.04.30
    '알고리즘/알고리즘문풀' 카테고리의 다른 글
    • BOJ - 마법사 상어와 토네이도 20057번 (JAVA)
    • BOJ - 마법사 상어와 파이어볼 20056번 (JAVA)
    • BOJ - 스타트택시 19238번 (JAVA)
    • BOJ - 어른 상어 19237번 (JAVA)
    developer-ellen
    developer-ellen

    티스토리툴바