명품 자바 프로그래밍 문제

조회수 762회
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 루프로 합 구하는 방법을 연습하기 좋아서 그런 것 같습니다.

    명품자바라는 책에서 어떻게 잘 정의되어 있는지 모르겠는데, 웹에서 찾을 수 있는 문제 기술내용은 좀 불명확한 부분이 있는 것 같아요. 질문자가 이 부분을 질문할 수도 있는 것 같아서 답변 달아보았습니다.

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)