반응형
[1] 백준 카테고리
단계별로 풀어보기
기본 수학 2
7단계 1085번 문제
직사각형에서 탈출
https://www.acmicpc.net/problem/1085
[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번째 숫자를 계속 비교한다. 한차례 비교가 끝났으면 두번째 순서가 시작된다. 두번째 숫자와 세번째 숫자를 다시 비교해 큰 수를 뒤로 보낸다. 세번째 숫자와 네번째 숫자를 비교해 큰 수를 뒤로 보낸다. 이렇게 버블 정렬이 끝나면 앞에서부터 점점 큰수가 위치하도록 되게 된다.
반응형
'프로그래밍 > 백준 문제 풀이(자바)' 카테고리의 다른 글
백준 4153번 자바 문제 답/해설(직각삼각형 문제) (0) | 2021.12.30 |
---|---|
백준 3009번 자바 문제 답/해설(네 번째 점 문제) (0) | 2021.12.29 |
백준 9020번 자바 문제 답/해설(골드바흐의 추측 문제) (0) | 2021.12.27 |
백준 4948번 자바 문제 답/해설(베르트랑 공준 문제) (0) | 2021.12.26 |
백준 1929번 자바 문제 답/해설(소수 구하기 문제) (0) | 2021.12.25 |