일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 실행 예외
- 99클럽
- throws 키워드
- 코딩테스트준비
- til
- 개발자취업
- 로켓펀치 #취준컴퍼니 #취업 #일상 #취준생
- 일반 예외
- 항해99
- try-catch-finally 블록
- 예외클래스
- 예외 처리
- 다중 catch 블록
- 예외
- Today
- Total
innn
백준 1085번 : 직사각형에서 탈출 본문
https://www.acmicpc.net/problem/1085
1085번: 직사각형에서 탈출
한수는 지금 (x, y)에 있다. 직사각형은 각 변이 좌표축에 평행하고, 왼쪽 아래 꼭짓점은 (0, 0), 오른쪽 위 꼭짓점은 (w, h)에 있다. 직사각형의 경계선까지 가는 거리의 최솟값을 구하는 프로그램
www.acmicpc.net
문제는 직사각형에서의 탈출이다.
직사각형 내부의 좌표에서 경계선(x축이나 y축 혹은 그 평행선)에 가닿는 가장 짧은 거리를 구하는 것이다.
먼저 이해가 안간다면 그림으로 예제에 나온 숫자를 넣어서 직접 그려보는 것이 좋다.
쉬운 문제이지만 틀리면 0점. 이해가 빠른 편이 아닌 나는 바로 그림을 그려서 예제에 숫자를 넣고 문제를 바로 파악했다.
내가 예제 답변 1개를 가지고 빨리 풀려다보니까 단순히 y-h와 x-w 의 절대값만 비교해서 더 작은 값을 구하면 되나보다!
하고 파이썬 절대값 쳐서 함수 abs()를 알게 되어 아래와 같은 코드를 작성했었다.
x가 x-w의 값보다 작으면 차라리 x 축으로 가는 것이 경계선에 더 가까운 길인데 이 사실을 빼먹고 코드부터 냅다 작성한것.
예제로 준 두번째 실수값 1 1 5 5를 보지 않았더라면 계속 틀렸을 것이다.
즉 x, y, h-y, w-x값을 다 비교해서 최소값을 찾아야 하는 것이 답이다 (그리고 좌표값은 언제나 w, h보다 작다는 것을 다시 조건을 읽어보면서 파악했다. 고로 절대값 함수도 필요없던 것)
최종 코드 1
먼저 a 리스트 안에 비교해야할 값을 리스트로 넣어준다.
min()(최소값 함수)를 이용해서 최소값을 간단히 구한다.
코드 2
min() 함수 없이 for문을 이용해서 최소값을 구할 수도 있다. 코드는 아래와 같다.
a 배열 안에 비교해야할 값을 몽땅 넣어주고
min 이라는 변수를 하나 지정한다. 이때 변수에는 a[0] 값을 넣어준다.
for문에 a 리스트를 한 번씩 비교하기 위해서 for i in a : 을 넣고
그 안에 if 문을 추가한다. 만약 i가 min보다 작다면~~~? min 값에 그 i 값을 넣어주기
그러면 가장 작은 값이 나올때까지 i가 비교되어 결국 min에 가장 작은 값이 들어갈 수 있는 것이다.
'코딩 테스트 > 파이썬 코딩테스트' 카테고리의 다른 글
10872번 : 팩토리얼 (0) | 2022.10.04 |
---|---|
백준 3009번 : 네 번째 점 (0) | 2022.10.02 |
백준 2439번 : 별 찍기 - 2 (0) | 2022.09.30 |
백준 2438번 : 별 찍기 - 1 (1) | 2022.09.30 |
백준 2884번 : 알람 시계 (0) | 2022.09.29 |