c언어 질문 : 양의 정수 x를 입력 받아 1-2+3-4+5-6+...+n>x가 되는 최소의 n값 구하기

조회수 372회

//양의 정수 x를 입력 받아 1-2+3-4+5-6+...+n>x가 되는 최소의 n값 구하기

#include <stdio.h>
int main(){
    int x,a,b=0;
    scanf("%d",&x);
    for(a=1;;a++){
        if(a%2==0){
            b=b-a;
        }
        else if(a%2==1){
            b=b+a;
        }
        else if(b>x){
            printf("%d",b);
            break;
        }
    }
    return 0;
}

시작한지 1주일 된 초보라... 답변 부탁드립니다.

1 답변

  • 질문글에 의문문이 없고 물음표가 1개도 없어서 무엇을 "답변"드려야 할지 모르겠군요. 아마 질문(랄까 고민과 당혹감)은 "왜 이 코드는 안 끝나고 계속 실행되는 거에요? break가 안 걸리고 답이 출력이 안 돼요! 어떡하면 되나요?"겠지만… 뭐 시작한지 1주일 됐다 하시니 이해합니다.

    결론을 바로 말하자면, 순서를 바꾸시면 됩니다. if(b>x)for 안의 첫번째 if로 세팅해 보세요.

    잘 생각해 보시면, a % 2는 항상 1이거나 0이거나 합니다. 예외는 없습니다. (왜 예외가 없는지는 중등수학 차원의 설명이 필요한 관계로 생략) 그래서 현재의 if-elseif-elseif 제어는 항상 첫번째 또는 두번째 분기로만 떨어지고 절대 셋째 분기로 떨어지지 않습니다. 그래서 break를 타지 않고 그래서 무한 루프를 도는 거에요. 순서를 바꾸면, b>x는 참일 수도 거짓일 수도 있으므로, 만약 거짓일 경우 그제야 비로소 a % 2를 검사하는 단계로 넘어가겠지요.

    (제가 짐작한) 질문에 답이 되었는지요?

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

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

(ಠ_ಠ)
(ಠ‿ಠ)