250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 |
Tags
- 밑바닥부터 시작하는 딥러닝
- 15649
- N-Queen
- 실버
- 재귀
- 기계학습
- 파이싼
- end to end
- 1002
- 백준
- 가상환경
- 경사하강법
- 설정
- streamlit
- 손실함수
- Python
- 9020
- pyenv
- BOJ
- 그리디 알고리즘
- 개발환경
- 1101
- 파이썬
- 4948
- 백트래킹
- n과 m
- Mac
- 신경망 학습
Archives
- Today
- Total
파이톨치
[백준][python][1011] Fly me to the Alpha Centauri 본문
728x90
<문제>
https://www.acmicpc.net/problem/1011
<어떻게 풀까?>
규칙을 찾기 위해서 일단 거리에 따른 최단 거리를 적어보자.
거리 | 최단 거리로 가는 방법 |
1 | 1 |
2 | 1, 1 |
3 | 1, 1, 1 |
4 | 1, 2, 1 |
5 | 1, 2, 1, 1 |
6 | 1, 2, 2, 1 |
7 | 1, 2, 2, 1, 1 |
8 | 1, 2, 2, 2, 1 |
9 | 1, 2, 3, 2, 1 |
이런식으로 구성이 된다. 이것만 봐도 간단한 규칙을 찾을 수 있다. 아직 못 찾으신 분들은 한 번 생각해보시길 바란다.
이 방법들을 규칙을 보기 쉽게 재구성 해 보게 된다면
거리 | 최단 거리로 가는 방법 |
1 | 1 |
2 | 1, 1 |
4 | 1, 2, 1 |
6 | 1, 2, 2, 1 |
9 | 1, 2, 3, 2, 1 |
12 | 1, 2, 3, 3, 2, 1 |
16 | 1, 2, 3, 4, 3, 2, 1 |
20 | 1, 2, 3, 4, 4, 3, 2, 1 |
이런 식으로 경계가 되는 값들은 대칭을 이루고 있다.
또한 증가하는 값이 2줄씩 일정하다.
즉 이 경계들을 이용해서 코드를 작성해 주면 된다.
<코드>
n = int(input())
for k in range(n):
A, B = map(int, input().split())
distance = B-A
start = 1
way = 1
for i in range(distance):
if start <= distance <= start+ i:
print(way)
break
elif start+i +1 <= distance <= start+ 2*i+1 :
print(way+1)
break
start += 2*(i+1)
way += 2
<코드 설명>
증가하는 범위가 2줄씩 같아서 if 문과 elif문을 사용해서 코드를 작성해 주었다.
start에서 경계가 시작된다. 그 경계를 기준으로 같은 값을 더해준다.
처음에 i를 이용해서 way를 대신하려고 했지만, 거리가 1일 때 값을 처리하기 힘들어서
그냥 way라는 변수를 만들어서 값을 출력해 주었다.
매번 말하지만 이것이 효율적인 코드라고 생각하지 않는다.
더 좋은 코드나 조언이 있다면 답들을 달아주면 좋겠다.
또한 이것을 개량해서 더 좋은 코드를 만들어 봐도 좋을 것이다.
728x90
'알고리즘' 카테고리의 다른 글
[백준][python][4948] 에라토스테네스의 체 (0) | 2021.07.15 |
---|---|
[백준][python][9020] 골드바흐의 추측(시간초과) (0) | 2021.07.14 |
[백준][python][10828] 스택 (0) | 2021.07.09 |
[백준][python][1193] 분수찾기 (0) | 2021.07.07 |
[백준][python][11729] 하노이 탑 이동 순서 (2) | 2021.07.06 |