이번 방학동안 매일 매일 최소 하나씩은 백준 클래스 문제를 풀이하는 글을 올려보려고 한다. 현재 안 푼 문제들은 대부분 클래스 4에 있어서 원래라면 클래스 4부터 풀어야하지만 이번학기 데이터구조 수업과 C++ 수업에 나태하게 수업에 임하면서 시플플로 백준 푸는 능력이 없다시피 되었다. 그렇다보니 파이썬으로는 골드 문제도 나름 시간만 주어진다면 금방 금방 풀 수 있는데 시플플로는 할 수 있는 게 너무 제약이 되어서 쉬운 문제부터 정리하면서 부족한 시플플 공부를 매워보려고 한다. 얼마나 할지는 사실 잘 모르겠지만 그래도 매일 매일 하나씩 적어보도록 노력하겠다.
이 문제는 간단한 기하학적 지식만 있다면 간단하게 해결할 수 있다. 직사각형 안의 점은 어느 방향으로 접근하던지 직사각형의 경계선에서 수직인 직선이 지나는 거리로 지나가면 가장 빠르게 도달할 수 있다. 그리고 이 직사각형의 꼭지점이 모두 주어져 있다. 그렇다면 가능한 4가지 케이스를 확인한 후에 가장 작은 값을 출력해주면 될 것이다. 파이썬이라면 그냥 대강 map써서 받은 다음에 min()쓰면 바로 나와서 정말 편할거 같은데 시플플은 전부 변수명도 지정해줘야해서 벌써 귀찮다. 그래도 이왕 하기로 한거 기쁜 마음으로 코드를 적어 보겠다.
#include <iostream>
using namespace std;
int main() {
int x, y, w, h;
int arr[4];
cin>>x>>y>>w>>h;
if (x > w / 2)
x = w - x;
if (y > h / 2)
y = h - y;
//위의 두 줄은 내가 어떻게든 비교하는 경우를 줄이고자 처리한 과정이다.
if (x > y)
cout<<y;
else
cout<<x;
return 0;
}
위의 코드가 사실 베스트 코드일지는 잘 모르겠지만 당장에 4개의 값을 비교하기에는 두 개씩 먼저 비교한 후 나머지를 처리하는 것이 가장 깔끔해보여서 다음과 같이 짜 보았다. 더 좋은 의견이 있다면 알려주면 도움이 많이 될 것 같다! 암튼 오늘의 백준은 여기서 끗!