코딩 독학할 때 백준 가입해놨다가
난이도가 있는 것 같아서 한두문제 풀고 손을 안댔었다.
그러다가 오늘 알고리즘시간에 너무 헤맸어서
알고리즘 연습의 중요성을 느꼈다ㅠㅠ
백준으로 알고리즘 연습해서 알고리즘 뇌를 발달시켜야 겠다..🧠
일단 오늘 풀었지만 틀린 문제를 기록으로 남겨놓는다.
<문제 링크>
https://www.acmicpc.net/problem/1085
<헤맨 과정>
문제만 보면 직사각형에 좌표 있고 복잡하게 풀어야할 것 같지만
쉽게 접근할 수 있다.
일단 각각 전체 가로세로 길이의 절반보다 (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를 이용하면 백준에서 문제의 티어를 볼 수 있다.
이외에도 백준 티어를 깃헙 프로필에 보이게 할 수도 있다. ㅋㅋ
근데 아직 백준 티어가 브론즈 바닥이라서 나중에 당당하게 티어를 보여줄 만큼 올라갔을 때 깃허브 프로필에 올려야 겠다..
읽어주셔서 감사합니다.😍
'JAVA > 해결한 문제' 카테고리의 다른 글
소수(prime number)인지 구하는 함수 구현하기 (3) | 2022.06.13 |
---|---|
CC(Coin Change, 동전교환) 알고리즘 구현하기 (0) | 2022.06.06 |
탐욕 알고리즘(Greed Algorithm) - 짐을 박스에 담는 최선의 방법 (0) | 2022.06.02 |
baekjoon-1018번 "체스판 다시 칠하기" (0) | 2022.05.29 |
문자열을 hashMap 타입으로 변환하기 (2) | 2022.05.18 |