아래 설명과 그림이 첨부되어 있습니다. 내가 독해력이 딸려서 뭔 이야기여...하고 구글링해봤음. 괜히 SOLVED.AC 기준으로 브론즈2 문제였던게 아녔음.
문제
한수는 지금 (x, y)에 있다. 직사각형의 왼쪽 아래 꼭짓점은 (0, 0)에 있고, 오른쪽 위 꼭짓점은 (w, h)에 있다. 직사각형의 경계선까지 가는 거리의 최솟값을 구하는 프로그램을 작성하시오.
입력
첫째 줄에 x y w h가 주어진다. w와 h는 1,000보다 작거나 같은 자연수이고, x는 1보다 크거나 같고, w-1보다 작거나 같은 자연수이고, y는 1보다 크거나 같고, h-1보다 작거나 같은 자연수이다.
출력
첫째 줄에 문제의 정답을 출력한다.
예제 입력 1
6 2 10 3
예제 출력 1
1
#include <stdio.h>
int main(void) {
int square[5]={0,};;
int i,x,y,w,h;
scanf("%d %d %d %d",&x, &y, &w, &h);
square[0]=x;
square[1]=x;
square[2]=h-y;
square[3]=w-x;
square[4]=y;//그림참조
for(i=0;i<5;i++)
{//최소값을 0으로 두고 다 대입해봄.
if(square[0]>square[i])
{
square[0]=square[i];
}
}
printf("%d",square[0]);
return 0;
}
이 문제는 그림을 그려보면 쉬운데.
마우스로 그려서 이상한데. 한점을 X,Y라고 하고 사각형의 반대끝이 W,H점이니까
4개의 선 X, Y, H-Y, W-X 이렇게 네개 나오고.
난 그걸 배열을 이용해서 풀었다.
#include <stdio.h>
int main(void) {
int square[5]={0,};; //비어있는 다섯칸짜리 배열을 만들어뒀다.
배열은 항상 필요한크기 + 1개. 널문자 들어갈 자리 생각해 줘야한다.
int i,x,y,w,h;
scanf("%d %d %d %d",&x, &y, &w, &h);
square[0]=x; //일단 초기값으로 x 가져왔음. 여긴 값이 덮어씌워질 예정이라서
square[1]=x;
square[2]=h-y;
square[3]=w-x;
square[4]=y; //그림참조
for(i=0;i<5;i++)
{//최소값을 0으로 두고 다 대입해봄.
if(square[0]>square[i])
{
square[0]=square[i];
}
}
printf("%d",square[0]);
return 0;
}
'_BOJ > _C , C++' 카테고리의 다른 글
BOJ_18268 : COW GYMNASTICS, 소체조 (0) | 2020.03.27 |
---|---|
BOJ_2941 : 크로아티아 알파벳 C (0) | 2020.03.20 |
BOJ_2798 : 블랙잭 C (0) | 2020.03.17 |
[백준] BOJ_5622:다이얼 C (0) | 2020.02.23 |
BOJ_1157:단어공부/C (0) | 2020.02.21 |