본문 바로가기
프로그래밍/백준 문제 풀이(자바)

백준 1085번 자바 문제 답/해설(직사각형에서 탈출 문제)

by 리드민 2021. 12. 28.
반응형

[1] 백준 카테고리
단계별로 풀어보기

기본 수학 2
7단계 1085번 문제
직사각형에서 탈출

https://www.acmicpc.net/problem/1085

 

1085번: 직사각형에서 탈출

한수는 지금 (x, y)에 있다. 직사각형은 각 변이 좌표축에 평행하고, 왼쪽 아래 꼭짓점은 (0, 0), 오른쪽 위 꼭짓점은 (w, h)에 있다. 직사각형의 경계선까지 가는 거리의 최솟값을 구하는 프로그램

www.acmicpc.net


[2] 문제

한수는 지금 (x, y)에 있다. 직사각형은 각 변이 좌표축에 평행하고, 왼쪽 아래 꼭짓점은 (0, 0), 오른쪽 위 꼭짓점은 (w, h)에 있다. 직사각형의 경계선까지 가는 거리의 최솟값을 구하는 프로그램을 작성하시오.

1. 입력
첫째 줄에 x, y, w, h가 주어진다.

2. 출력
첫째 줄에 문제의 정답을 출력한다.

3. 제한

1 ≤ w, h ≤ 1,000
1 ≤ x ≤ w-1
1 ≤ y ≤ h-1
x, y, w, h는 정수


3. 예제 입력 1
6 2 10 3

4.예제 출력 1
1

 

3. 예제 입력 1
1 1 5 5


4.예제 출력 1
1


[3] 정답
1. 정답 해설 미포함

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


public class Main {
	static int M = 0;	
	static int N = 0;
	static boolean[] arr;
	public static void main(String[] args) throws NumberFormatException, IOException{
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine(), " ");
		
		int x = Integer.parseInt(st.nextToken());
		int y = Integer.parseInt(st.nextToken());
		
		int w = Integer.parseInt(st.nextToken());
		int h = Integer.parseInt(st.nextToken());
		
		int a = w-x;
		int b = h-y;
		
		int[] com = new int[4];
		com[0]=x;
		com[1]=y;
		com[2]=a;
		com[3]=b;
		
		for(int i=0; i<com.length; i++) {
			for(int j=0; j<com.length-i-1; j++) {
				if(com[j]>com[j+1]) {
					int temp = com[j+1];
					com[j+1] = com[j];
					com[j] = temp;
				}
			}
		}
		
		System.out.println(com[0]);
	}
}


2. 정답 해설 포함

import java.io.BufferedReader;
/* BufferedReader 사용을 위해서 java.io.BufferedReader 클래스를 import 한다..
Enter를 경계로 인식하고 받은 데이터는 String으로 고정된다.*/
import java.io.InputStreamReader;
/* byte 단위 데이터를 문자 단위 데이터로 처리할 수 있도록 변환해주기 위해서
InputStreamReader를 사용한다.
InputStreamReader 사용을 위해서 java.io.InputStreamReader 클래스를 import 한다.*/
import java.io.IOException;
/* 예외 처리를 위해서 IOException를 사용한다.
IOException 사용을 위해서 java.io.IOException 클래스를 import 한다.*/
import java.util.StringTokenizer;
/* 공백 단위로 호출하기 위해서 StringTokenizer를 사용한다
StringTokenizer를 사용하기 위해서
StringTokenizer java.util.String 클래스를 import 한다.*/

public class Main {
// 접근제어자 public으로 Main 클래스를 선언한다.
	public static void main(String[] args) throws NumberFormatException, IOException{
	// 접근제어자 public으로 메모리에 상주하고 리턴값이 없이 main 함수를 선언한다. 
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		// BufferedReader 객체 br를 선언한다
		StringTokenizer st = new StringTokenizer(br.readLine(), " ");
		// StringTokenizer 객체 st를 선언한다 이제 공백으로 값을 입력받을 수 있다
		
		int x = Integer.parseInt(st.nextToken());
		/* int형 변수 x를 선언하고 값을 공백 단위로 구분해서 입력받는다
		Inter.parseInt()로 String 변수를 int형으로 변환시킨다.*/
		int y = Integer.parseInt(st.nextToken());
		/* int형 변수 y를 선언하고 값을 공백 단위로 구분해서 입력받는다
		Inter.parseInt()로 String 변수를 int형으로 변환시킨다.*/
		
		int w = Integer.parseInt(st.nextToken());
		/* int형 변수 w를 선언하고 값을 공백 단위로 구분해서 입력받는다
		Inter.parseInt()로 String 변수를 int형으로 변환시킨다.*/
		int h = Integer.parseInt(st.nextToken());
		/* int형 변수 h를 선언하고 값을 공백 단위로 구분해서 입력받는다
		Inter.parseInt()로 String 변수를 int형으로 변환시킨다.*/
		
		int a = w-x;
		// int 형 변수 a를 선언하고 w-x 값을 저장한다
		int b = h-y;
		// int 형 변수 b를 선언하고 h-y 값을 저장한다
		
		int[] com = new int[4];
		// int형 배열 com를 선언하고 길이를 4로 한다
		com[0]=x;
		// 변수 com[0]에 변수 x에 저장된 값을 저장한다.
		com[1]=y;
		// 변수 com[1]에 변수 y에 저장된 값을 저장한다.
		com[2]=a;
		// 변수 com[2]에 변수 y에 저장된 값을 저장한다.
		com[3]=b;
		// 변수 com[3]에 변수 y에 저장된 값을 저장한다.
		
		for(int i=0; i<com.length; i++) {
		// 변수 i가 0~<com.length 일때 괄호안의 코드가 반복된다.
			for(int j=0; j<com.length-i-1; j++) {
			// 변수 j가 0~<(com.length-i-1) 일때 괄호안의 코드가 반복된다.
				if(com[j]>com[j+1]) {
				// com[j]>com[j+1]일때 괄호안의 코드가 반복된다
					int temp = com[j+1];
					// 변수 temp에 변수 com[j+1]에 저장된 값을 저장한다.
					com[j+1] = com[j];
					// 변수 com[j+1]에 변수 com[j]에 저장된 값을 저장한다.
					com[j] = temp;
					// 변수 com[j]에 변수 temp에 저장된 값을 저장한다.
				}
			}
		}
		// 버블정렬 부분이다. 값을 작은 순부터 큰순으로 정렬하게 된다.
		
		System.out.println(com[0]);
		// 변수 com[0]에 저장된 값을 출력한다. 가장 작은 값이 출력되게 된다.
	}
}

 

		for(int i=0; i<com.length; i++) {
			for(int j=0; j<com.length-i-1; j++) {
				if(com[j]>com[j+1]) {
					int temp = com[j+1];
					com[j+1] = com[j];
					com[j] = temp;
				}
			}
		}

버블 정렬 부분이다. 첫번째 순서에서는 첫번째 숫자와 두번째 숫자를 비교해 큰 수를 뒤로 보낸다. 그 후 두번째 숫자와 세번째 숫자를 비교해 큰수를 뒤로 보낸다. 이런식으로 n번째 숫자와 n+1번째 숫자를 계속 비교한다. 한차례 비교가 끝났으면 두번째 순서가 시작된다. 두번째 숫자와 세번째 숫자를 다시 비교해 큰 수를 뒤로 보낸다. 세번째 숫자와 네번째 숫자를 비교해 큰 수를 뒤로 보낸다. 이렇게 버블 정렬이 끝나면 앞에서부터 점점 큰수가 위치하도록 되게 된다.

반응형