Notice
Recent Posts
Recent Comments
Link
250x250
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
31 |
Tags
- docker #도커 #도커 컨테이너 #docker container #도커 우분투
- jupyter notebook #anaconda #vscode #pytorch #딥러닝 #deep learning #vscode server #서버 vscode #ssh vscode #vscode cuda
- 구름자연어처리과정
- BERT #구글BERT #BERT의정석
- docker #아나콘다 #anaconda #ubuntu anaconda #docker anaconda
- GPU #jtorch GPU #파이토치 병렬 #파이토치 GPU #pytorch gpu #multi process torch #horovod
- 백준 #알고리즘 #골드
- 깃허브 #우분투 #ubuntu #Github #깃허브 우분투 #깃헙 우분투 #깃헙
- 파이썬 #Python
- docker #cuda #docker container #도커 #도커 컨테이너 #쿠다 #cuda 11.3
- cuda #centos #cuda삭제 #리눅스 #cenos cuda삭제
- 구름
- 트랜스포머 #transformer #attention #self-attention #어텐션 #인공지능 #AI #딥러닝 #NLP #자연어처리
- ssh #우분투 ssh #우분터 서버 #도커 #우분투 도커 #docker #cuda #우분투 개발환경 #딥러닝 #ubuntu docker #ubuntu cuda
- Machine Learning
- 트랜스포머 #자연어처리 #딥러닝 #구글 #attention #self-attention #BERT #transformer #deeplearing
- pytorch #cuda #우분투 torch #ubuntu pytorch #cuda torch #cuda pytorch
- docker #우분투 #ubuntu #도커 설치 #docker 설치 #docker installation #우분투 도커
- pandas #folium #groupby #네이버부스트코스 #코칭스터디
- 알고리즘 #levenshtein distance #편집거리 #edit distance
- 머신러닝
- 백준
- logistic regression
- GPU #cuda out of memory #gpu 메모리 #pytorch
Archives
- Today
- Total
바닥부터 시작하는 개발 공부
[알고리즘]백준 1193번: 분수찾기 본문
728x90
알고리즘: 수학
문제
무한히 큰 배열에 다음과 같이 분수들이 적혀있다.
1/1 | 1/2 | 1/3 | 1/4 | 1/5 | … |
2/1 | 2/2 | 2/3 | 2/4 | … | … |
3/1 | 3/2 | 3/3 | … | … | … |
4/1 | 4/2 | … | … | … | … |
5/1 | … | … | … | … | … |
… | … | … | … | … | … |
이와 같이 나열된 분수들을 1/1 → 1/2 → 2/1 → 3/1 → 2/2 → … 과 같은 지그재그 순서로 차례대로 1번, 2번, 3번, 4번, 5번, … 분수라고 하자.
X가 주어졌을 때, X번째 분수를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 X(1 ≤ X ≤ 10,000,000)가 주어진다.
출력
첫째 줄에 분수를 출력한다.
풀이
2차원 배열의 대각선 성분의 길이는 1씩 늘어납니다.
처음에는 1/1 1개 두번째에는 2/1 1/2 2개 세번째에는 3/1 2/2 1/3의 3개의 순입니다.
처음에는 구하고자 하는 분수가 몇번째 대각선에 위치하는지 구해주겠습니다
각 대각선의 분수의 분모와 분자는 왼쪽을 기준으로 각각 1씩 차이나는
내림차순과 오름차순입니다(오른쪽을 기준으로 하면 반대)
이 성질을 이용해 쉽게 계산할 수 있습니다
한가지 고려해야할 점은 대각선마다 기준점이 바뀐다는 것입니다.
짝수 대각선에서는 왼쪽에서 오른쪽으로 홀수 대각선에서는 오른쪽을 기준으로 합니다
import sys
N = int(sys.stdin.readline().strip())
idx= 0
#배열이 몇번째(idx) 대각선에 위치하는지 구해보겠습니다
while N>0:
idx+=1
N=N-idx
#반복문을 통해 1부터 값을 점차 증가시켜가며 빼주겠습니다.
N=N+idx
#반복문을 탈출하면 분수가 위치한 대각선의 배열의 길이만큼 빼줬기 때문에 음수가 나오게됩니다
#이를 다시 더해주겟습니다. 이때 N은 대각선 배열에서 분수의 순번과 동일합니다
if idx%2==0:
nums = list(range(1,idx+1))
print(f"{nums[N-1]}/{idx-N+1}")
else:
nums = list(range(idx,0,-1))
print(f"{nums[N-1]}/{N}")
#홀수일때와 짝수일때 배열의 방향이 바뀌므로 이를 고려해줍니다
728x90
'Algorithm > 백준' 카테고리의 다른 글
[알고리즘]백준 4948번: 베르트랑 공준 (0) | 2023.02.06 |
---|---|
[알고리즘]백준 2581번: 소수 (0) | 2023.02.06 |
[알고리즘]백준 11723번: 집합 (0) | 2023.02.06 |
[알고리즘]백준 11047번: 동전 0 (0) | 2023.02.05 |
[알고리즘]백준 11399번: ATM (0) | 2023.02.05 |
Comments