티스토리 뷰
Solved.ac Class 완전정복 프로젝트
Class : 2 ~ 2 ++
끝나지 않던 lv1 문제를 다 풀고.. 드디어 lv2에 입성했습니다~ (짝짝짝)
아직 못올린 lv1문제들은 추후에 정리해서 올라갈 예정입니다. 그럼 오늘도 코테 준비하시는 모든 분들 파이팅입니다!
링크
https://www.acmicpc.net/problem/1085
문제
한수는 지금 (x, y)에 있다. 직사각형은 각 변이 좌표축에 평행하고, 왼쪽 아래 꼭짓점은 (0, 0), 오른쪽 위 꼭짓점은 (w, h)에 있다. 직사각형의 경계선까지 가는 거리의 최솟값을 구하는 프로그램을 작성하시오.
입력
첫째 줄에 x, y, w, h가 주어진다.
출력
첫째 줄에 문제의 정답을 출력한다.
접근방법
(0,0) , (0, h) , (w,0) , (w, h) 이렇게 4 꼭짓점이 있는 직사각형과 좌표 (x, y)가 존재하는 것이다.
좌표와 직사각형 변(꼭짓점 포함)과 만나는 최솟값을 구하는 것이 이 문제이다.
문제에서는 변이 좌표축과 평행하다는 단서를 붙여주었다.
그 말은 즉슨, 최솟값이 대각선이 아니란 의미이다! (풀이 그림 참조)
그러므로, 거리라는 말을 듣고 피타고라스 정리가 생각났다면, 다시 흘려보내 주면 된다.
축과 평행한 직선이기 때문에, 가로나 세로에 최솟값을 알아내야 한다는 것까지는 생각하고 코드에 임해야 한다.
풀이
예제를 한번 상상해보자.
좌표 하나(6,3)와 양 꼭짓점이 (0,0), (10,3)인 사각형이다.
파란색 줄은 y를 기준으로 가장자리에 갈 수 있는 값이다. 아랫변으로 가면 2, 윗변으로 가면 1
빨간색 줄은 x를 기준으로 가장자리에 갈 수 있는 값이다. 왼쪽 변으로 가면 6, 오른쪽 변으로 가면 4
이를 통해 알 수 있는 것은 x든, y든 주변과의 차이가 작은 값이 답이라는 것이다.
x에서 좌우 비교, y에서 상하 비교 후 가장 작은 값을 출력하면 답이 된다.
코드
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Main test = new Main();
}
public Main(){
Scanner sc = new Scanner(System.in);
//입력
int x = sc.nextInt();
int y = sc.nextInt();
int w = sc.nextInt();
int h = sc.nextInt();
int answer = solution(x,y,w,h);
//출력
System.out.println(answer);
}
private int solution(int x, int y, int w, int h) {
int min = 9999999;
//x를 기준으로 좌우 비교
if( Math.abs(x-w) <x){
min=Math.abs(x-w);
}else{
min =x;
}
//y를 기준으로 상하 비교, 또한 x에서 구한 최솟값과 비교
if( (Math.abs(y-h) < y) && Math.abs(y-h) < min ){
min = Math.abs(y-h);
}else if( y < min){
min= y;
}
return min;
}
}
결과
포스팅에 문제가 있거나, 설명이 잘못된 부분 지적 환영합니다.
읽어주셔서 감사합니다.
'공부 > 코딩 테스트 준비' 카테고리의 다른 글
[백준] 1259 -펠린드롬수 JAVA (0) | 2021.08.20 |
---|---|
[백준] 1181 - 단어 정리 (0) | 2021.08.18 |
[백준] 1018 - 체스판 다시 칠하기 JAVA (0) | 2021.08.18 |
[백준] 10869 - 사칙연산 성공 JAVA (0) | 2021.08.16 |
[백준] 2739 - 구구단 JAVA (0) | 2021.08.16 |
- Total
- Today
- Yesterday
- java
- 카카오
- DFS
- 아기상어미워
- 파이썬
- 아기상어나쁜상어
- 백준
- Database
- 코딩테스트
- Spring
- 프로그래머스 문제정복
- looker core
- 9019
- BFS
- looker instance 접속
- 브루트포스
- db
- 자바
- DP
- dml
- 플루이드 와샬
- JNDI연동
- 재귀
- 유클리드-호제법
- 하루 회고
- value annotation
- Python
- 실패일기
- 프로그래머스
- 그래프 탐색
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |