1085번 (1)

 

 

 

 

코딩 독학할 때 백준 가입해놨다가

난이도가 있는 것 같아서 한두문제 풀고 손을 안댔었다.

그러다가 오늘 알고리즘시간에 너무 헤맸어서

알고리즘 연습의 중요성을 느꼈다ㅠㅠ

백준으로 알고리즘 연습해서 알고리즘 뇌를 발달시켜야 겠다..🧠

일단 오늘 풀었지만 틀린 문제를 기록으로 남겨놓는다.

 

 

<문제 링크>

 

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

 

1085번: 직사각형에서 탈출

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

www.acmicpc.net

 

 

 

<헤맨 과정>

더보기

문제만 보면 직사각형에 좌표 있고 복잡하게 풀어야할 것 같지만

쉽게 접근할 수 있다.

일단 각각 전체 가로세로 길이의 절반보다 (x, y)좌표가 같거나 클 경우를 변수에 담아두었다가 담은 가로, 세로 변수 2개중 더 작은 것을 출력하면 된다.

        if(x >= w / 2) {
            horizon = w - x;
        }
        else horizon = x;

        if(y >= h / 2) {
            length = h - y;
        }
        else length = y;

 

이렇게 조건문을 작성하면 예제의 코드는 잘 돌아가지만

틀렸다.

인텔리제이에서는 잘 돌아가는데 풀이를 제출할 때마다 자꾸 틀렸다고 해서 꽤나 고민했다..

그러다가 혹시 나누기 2 하는 과정에서 int 형이기 때문에 소수점은 버려져서 그런가?

싶어서 테스트 해보니까 그것 때문이었다.

2 3 5 9

이런식으로 입력하면

세로의 변수 length에는 3이 9의 절반인 4.5 보다 작기 때문에 3이 들어가지만

가로는 5의 절반인 2.5와 2를 비교해서 horizon에 2가 들어갈 줄 알았는데

int 형을 나누기 2 했기 때문에 2.5의 소수점을 버린 2와 2를 비교해서 horizon에 5 - 2인 3이 들어간다.

그래서 horizon과 length를 비교한 출력값이 3이 나오게 된다.

 

이럴 때 해결 방법이 2가지가 떠올랐다.

 

1. if문안의 조건문을 double로 형변환한 숫자끼리 비교

        if((double)x >= (double)w / 2) {
            horizon = w - x;
        }
        else horizon = x;

        if((double)y >= (double)h / 2) {
            length = h - y;
        }
        else length = y;

 

 

2. 등호를 없애준다

        if(x > w / 2) {
            horizon = w - x;
        }
        else horizon = x;

        if(y > h / 2) {
            length = h - y;
        }
        else length = y;

 

 

 

<내 최종 코드>

더보기
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int x = sc.nextInt();
        int y = sc.nextInt();
        int w = sc.nextInt();
        int h = sc.nextInt();

        int horizon, length;

        if((double)x < (double)w / 2) {
            horizon = x;
        }
        else horizon = w - x;

        if((double)y < (double)h / 2) {
            length = y;
        }
        else length = h - y;

        System.out.print(Math.min(horizon, length));
    }
}

 

 

 

 

 

🔎 백준의 유용한 기능

 

 

백준과 깃헙 연동하기(백준허브 확장자)

 

크롬 확장자 중에 백준허브를 추가(Add to Chrome)

깃헙 아이디와 Authenticate

Repository 추가 또는 기존 Repository 주소 입력해서 연동

백준에서 문제를 풀고 제출하면 자동으로 내 깃헙 repository에 commit이 됩니다!⭐️

 

 

 

백준 티어 보기

 

백준에는 티어가 존재하는줄 몰랐는데

브론즈, 실버, 골드,... 등 티어가 존재한다.

solved를 이용하면 백준에서 문제의 티어를 볼 수 있다.

 

 

이외에도 백준 티어를 깃헙 프로필에 보이게 할 수도 있다. ㅋㅋ

근데 아직 백준 티어가 브론즈 바닥이라서 나중에 당당하게 티어를 보여줄 만큼 올라갔을 때 깃허브 프로필에 올려야 겠다..

 

 

읽어주셔서 감사합니다.😍

 

 

1