백준 1193번:분수찾기:파이썬

태훈입니다·2022년 12월 15일
0

코테 풀이

목록 보기
32/34
post-thumbnail

정답 코드:

코드 풀이:

우선 수학을 잘 못하는 내겐 너무 어려운 문제였다.
여러 블로그들을 들어가서 이해해보려 노력하고,
요즘 한창 뜨고 있는 chatGPT의 힘을 빌려서 문제를 이해하려고 몇 시간을 노력했다.

우선 내가 이해한 부분에 대해서 설명을 풀어서 해보려 한다.
이런 문제는 먼저 규칙을 찾는 게 중요한데,
문제를 45도 돌려서 피라미드로 만들어보면

1
2 3
4 5 6
7 8 9 10

이런 배열에 만들어지게 되는데, 이 배열은 1+2+3+4+5 이런식으로 라인마다 숫자가 증가하고,
만약 내가 찾고자 하는 숫자가 5 라면, 5는 1+2+2 이기 때문에 3번째 배열 2번 숫자라는 걸
알 수 있다. 이걸 이해하는데 오래 걸렸다.. 이걸 코드로 풀어보면
while N > line: (입력한 5가 line보다 작거나 같으면 종료)
	N -= line  ==> 5에서 초기값 1을 뺀다.
    line += 1  ==> line을 다음 배열인 2로 증가시킨다.
   	여기서 N은 4, line은 2 기 때문에 아직 까지 while Ture:가 성립해서
    한 번 더 반복문을 통과하고
    
  그 다음은 N = 2, line = 3이 되는데, 피라미드 그림을 보면 3번째 열 2번째 행에
  5가 있는 걸 알 수 있다.
  
  근데 문제에선 저렇게 피라미드 형식이지만, 
  
  1
  3 2
  4 5 6
  10 9 8 7 
  이런 식으로 짝수 열마다 역순으로 정리가 되기에 좀 헷갈렸는데.
  조건문을 통해 해결하였다.
  
  먼저 문제를 피라미드처럼 순차적으로 정렬 해보면
  
            1/1
          2/1 1/2
         3/1 2/2 1/3
       4/1 3/2 2/3 1/4
이런 식으로 x/y로 이루어져있고 , 규칙적이다
규칙을 찾아보면
x = line - N + 1
y = N  이라는 규칙을 찾을 수 있다.
단, 짝수 열 일 경우엔 x,y만 반대로 돌려주면 되는데,
예를 들어 10은 4번째라인 4번째 숫자여서 위 공식을 대입해서 x,y
를 찾을 경우 x = 1 y = 4 여서 1/4 지만,
문제에선 4/1이기에 반대로만 바꿔주면 된다는 걸 알 수 있다.

즉 if line % 2 == 0: (짝수 라인 일 땐,)
	x = N
    y = line - N + 1,
   else:
    y = N
    x = line - N + 1 
   이런 조건문을 통해 답을 구하면 된다.
   더 완벽하게 이해해서 다음 번에 다시 풀어보고 싶다!ㅠㅠ
profile
개발 공부를 하고 있는 비전공자입니다!

0개의 댓글