명품 자바 프로그래밍 문제
조회수 759회
a = 1
b = int(input())
t = int(input("1 부터 입력값(500이하) 의 중앙넘버: "))
if b <= 500:
c = (a + b) / 2
d = (a + b) % 2
if d == 0:
print(c)
else:
print(c)
print(c+1)
계속 고민하며 풀어봤는데 도저히 저 의미가 무엇인지 모르겠습니다. 파이썬 고수님들 부탁드립니다.
-
(•́ ✖ •̀)
알 수 없는 사용자
2 답변
-
검색을 좀 해봤습니다. https://codereview.stackexchange.com/a/75452
이제 알고리즘 자체만 보자면, 정답이 이미 알려져 있다고 할 때(대충
x
라고 부르겠음) 이런 등식이 성립함.이 식은
n
에 대한 2차방정식이 됨.아무래도 질문자님에겐 이런 Q&A 사이트보다는 수학 선생님이 더 절실히 필요하실 거 같네요.
-
엽토군님이 올려주신 링크를 보면, 문제는 아마 다음과 같이 정리할 수 있을 것 같습니다.
x
를 numeric center 라고 하면, numeric center 는 다음을 만족한다.(1 + 2 + ... + (x-1)) == ( (x+1) + (x+2) + ... + (n-1) + n )
여기서 좌변은
x(x-1)/2
가 되고, 우변은n(n+1)/2 - x(x+1)/2
이 됩니다. (고등학교 때 배운 1~n 까지 합의 공식)여기서 n, x 가 정수라는 조건으로 정수방정식을 풀어야 하는 거고요. 문제에서는 n 이 500 이하여야 한다는 조건 같은 게 붙는 거 같아요. 프로그래밍 문제로 나온 이유는, 합의 공식 대신에 for 루프로 합 구하는 방법을 연습하기 좋아서 그런 것 같습니다.
명품자바라는 책에서 어떻게 잘 정의되어 있는지 모르겠는데, 웹에서 찾을 수 있는 문제 기술내용은 좀 불명확한 부분이 있는 것 같아요. 질문자가 이 부분을 질문할 수도 있는 것 같아서 답변 달아보았습니다.
댓글 입력