For Programmer
백준 1193번 파이썬 문제풀이(기본수학 - 분수찾기) 본문
728x90
나의 코드
input_num = int(input())
line = 0 # 사선 라인
max_num = 0 # 입력된 숫자(input_num 변수)의 라인에서 가장 큰 숫자(1 -> 1, 2-> 2 , 3 -> 4 , 4-> 7 ...)
min_num = 1 # 입력된 숫자(input_num 변수)의 라인에서 가장 작은 숫자(1 -> 1 , 2 -> 3 , 3 -> 6 , 4 -> 10 ...)
i = 0
while input_num > max_num: # 조건: 입력한 x번째 수가 해당 라인의 최대값보다 작거나 같다면 빠져 나온다.
line += 1 # 해당 input_num이 존재하는 라인 위치
min_num += i # 각 라인에서의 최솟값
i += 1 # 라인에서의 최소값,최대값을 찾기 위한 증가 조건
max_num += i # 각 라인에서의 최대값
if line % 2 == 0: # 사선 라인이 짝수번째 일 때
top = input_num - min_num + 1 # 분자일때는 해당 라인에서 입력합 값에서 최소값을 뺀 수에서 + 1
under = max_num - input_num + 1 # 분모일때는 해당 라인에서 최대값에서 입력한 값을 뺀 수에서 + 1
else: # 사선 라인이 홀수번째 일 때
top = max_num - input_num + 1 # 분자일때는 해당 라인에서 최대값에서 입력한 값을 뺀 수에서 + 1
under = input_num - min_num + 1 # 분모일때는 해당 라인에서 입력합 값에서 최소값을 뺀 수에서 + 1
# print(f'{top}/{under}') #f스트링을 이용한 출력방법
print(top, under, sep="/") #sep 인자를 이용한 출력방법
-> 개인적으로 굉장히 어려운 문제였다. 반복문과 배열로 풀려고 노력을 해서 그런가 더 어려웠다. 시간제한이 0.5초 밖에 안되기 때문에 1천만 까지 입력이 가능한 상태에서 반복문으로 풀려고 하면 시간초과가 날 가능성이 많다. 그래서 규칙을 찾는데 시간이 오래 걸렸다. 물론 max_num이나 min_num 하나만 구해서도 충분히 풀이가 가능하나 공간복잡도도 넉넉하고 코드를 보기에 max_num,min_num 둘다 구해서 푸는것이 훨씬 코드 보기에 쉽다. 또한 위 코드에서 max_num,min_num 값을 구하기 위한 i 변수를 굳이 따로 정의하지 않고 line 변수로도 똑같이 증가가 되기 때문에 line 변수를 이용하여 구할 수 있다. 개선된 코드는 다음과 같다.
...이전 생략
line = 0 # 사선 라인
max_num = 0 # 입력된 숫자(input_num 변수)의 라인에서 가장 큰 숫자(1 -> 1, 2-> 2 , 3 -> 4 , 4-> 7 ...)
min_num = 1 # 입력된 숫자(input_num 변수)의 라인에서 가장 작은 숫자(1 -> 1 , 2 -> 3 , 3 -> 6 , 4 -> 10 ...)
while input_num > max_num: # 조건: 입력한 x번째 수가 해당 라인의 최대값보다 작거나 같다면 빠져 나온다.
min_num += line # 각 라인에서의 최솟값
line += 1 # 해당 input_num이 존재하는 라인 위치
max_num += line # 각 라인에서의 최대값
...이후 생략
-> 코드가 훨씬 간결해졌다. 코드를 작성하다 보면 처음부터 바로 위처럼 간결한 코드를 쓰기는 힘들다. 우선적으로 코드를 작성해놓고 다시한번 살펴보면서 최대한 간결하게 작성할 수 있는지 확인한 다음 코드를 간결하게 하는것이 좋다.(만약 협업하는 일이 생긴다면 무조건적인 코드간결은 오히려 독이 될 수 있다.)
728x90
'코팅테스트 > 백준 문제 모음' 카테고리의 다른 글
백준 10250번 파이썬 문제풀이(기본수학 - ACM호텔) (0) | 2021.09.10 |
---|---|
백준 2869번 파이썬 문제풀이(기본수학 - 달팽이는 올라가고 싶다) -상세풀이 (0) | 2021.09.10 |
백준 2292번 파이썬 문제풀이(기본수학 - 벌집) (0) | 2021.09.09 |
백준 1712번 파이썬 문제풀이(기본수학 - 손익분기점) (0) | 2021.09.09 |
백준 1316번 파이썬 문제풀이(문자열:그룹 단어 체커) (0) | 2021.09.08 |
Comments