일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- greedy
- C 언어
- Baekjoon
- Implemention
- 구현
- 문제풀이
- Beakjoon
- 그리디
- 코드엔진
- 백준
- 10807
- CSS
- c언어
- VS
- 파이썬
- C Programming
- C
- implement
- 심화1
- 친절한 설명
- HTML
- 초보
- 꾸준히
- 입문
- 문자열
- Python
- 10926
- 알고리즘
- 정리
- 설명
- Today
- Total
안경잡이 구루루
백준 1193 (분수찾기) [Python/파이썬] [Implement/구현] 본문
백준 1193 (분수찾기) [Python/파이썬] [Implement/구현]
구루루(gururu) 2023. 10. 14. 16:17https://www.acmicpc.net/problem/1193
나:
cnt = 1
parents =0
ex_parents = parents
fraction = []
x = int(input())
while True:
parents += cnt
if parents >= x:
break
else:
cnt +=1
ex_parents =parents
if cnt % 2 == 0:
for i in range(1,cnt+1):
fraction.append(str(i)+'/'+str(cnt-i+1))
else:
for i in range(cnt,0,-1):
fraction.append(str(i)+'/'+str(cnt-i+1))
print(fraction[x-ex_parents-1])
완성된 코드는 위와 같다.
(1)
cnt = 1
parents =0
ex_parents = parents
fraction = []
x = int(input())
필요한 변수들을 우선 선언했다.
cnt 는 X번쨰 분수를 보함하는 배열의 끝 분수의 분모 혹은 분수의 큰 값을 의미(ex. X=4 --> 3/1,2/2,1/3 의 배열의 끝 분수 3/1, 1/3 의 분모,분수의 큰값 3을 의미)
parents는 나중에 입력값 x와 비교해 최종 cnt 값을 정해주는 역할 수행
ex_parents는 이전의 parents 변수 값을 담았다.
fraction은 X번째 분수를 포함하는 같은 배열의 분수들을 넣을 리스트다.
첫째 줄에는 몇번 째에 해당하는 x 값을 입력받았다.
(2)
while True:
parents += cnt
if parents >= x:
break
else:
cnt +=1
ex_parents =parents
두번째로 x 번쨰 분수를 포함하는 배열들에 해당하는 분수들을 모두 찾기 위해 코드를 작성했다.
그러기 위해 x 번쨰 분수를 포함하는 배열의 가장 분수, 죽 가장 끝 분수인 기준분수를 찾아야 하고 이를 반복문을 whlle 을 이용해 구현했다.
반복문 과정 중에 parents는 1+2+3+4+,,,,n 을 더해가며 커진다. 즉, cnt 값을 더해가며 커진다.이때 입력값이었던 x 와 비교한다.
cnt 를 더해가다 parents >= cnt 이면 x 번쨰 분수를 포함하는 배열들에 해당하는 기준 분수의 분모 혹은 분자는 cnt 가 된다.이때 parents는 x 보다 크기 때문에 이후 fraction에 담긴 분수를 출력해 0부터 사작하는 index의 역할을 못한다고 판단해 이전의 parents 값을 ex_parents에 담았다.
(3)
if cnt % 2 == 0:
for i in range(1,cnt+1):
fraction.append(str(i)+'/'+str(cnt-i+1))
else:
for i in range(cnt,0,-1):
fraction.append(str(i)+'/'+str(cnt-i+1))
print(fraction[x-ex_parents-1])
지그재그 순서대로 분수가 출력되기에 짝수, 홀수 번째 배열인지에 따라 출력양식이 달라진다.
그래서 %2 ==0 :짝수 에 해당하는 경우와 이외인 홀수의 경우에 따라 알맞은 분수 형태들을 만들고 이를 fraction 리스트에 저장했다.
최종적로 x 번째 배열이 모인 fraction 리스트에 ex_parents 값을 뺴주고 이떄 index가 0부터 시작하기 때문에 -1 을 추가로 뺀 값을 출력시킨다.
다른사람:
num = int(input())
ex = 1
while num > ex:
num -= ex
ex += 1
if ex % 2 == 0:
a = num
b = ex - num + 1
else:
b = num
a = ex - num + 1
print('{}/{}'.format(a,b))
완성된 코드는 위와 같다.
1 더해가는 방식이 아닌 빼는 방식으로 구현해 최소한의 변수를 사용
2. x번째 분수가 해당하는 배열들의 분수들을 모두 찾지 않고 바로 x번째 분수를 구할 수 있게 구현
에 집중하여 코드를 살펴 볼 필요가 있다.
'파이썬(Python) > 문제풀이(백준,BaekJoon)' 카테고리의 다른 글
백준 2443 (별 찍기 - 6) [Python/파이썬] [Implement/구현] (0) | 2023.10.30 |
---|---|
백준 10773 (제로) [Python/파이썬] [Implement/구현] (0) | 2023.10.15 |
백준 10808 (알파벳 개수) [Python/파이썬] [Implemnet/구현] (1) | 2023.10.14 |
백준 11050 (이항 계수1) [Python/파이썬] [Implement/구현] (0) | 2023.10.13 |
백준 11721 (열 개씩 끊어 출력하기) [Python/파이썬] [Implement/구현] (0) | 2023.10.13 |