c++ for 문 조건식에 함수의 리턴 값을 직접 넣으면 변수에 리턴 값을 넣는 것과 왜다른가요

조회수 453회
#include <iostream>
using namespace std;

#define MAXN (100000)
int N;
int sol[MAXN + 10];
int wp, rp = 0;
int que[MAXN + 10];

void push(int d) {
    if (wp < MAXN) {
        que[wp] = d;
        ++wp;
    }
}
int front() {
    if (rp != wp) {
        int t = que[rp];
        ++rp;
        return t;
    }
}
bool empty() {
    if (rp == wp)
        return true;
    else
        return false;
}
int end() {
    if (!empty()) 
        return que[wp-1];
}


int main() {
    cin >> N;
    for (int i = 0; i < N; i++) 
        push(i+1);
    for (int j = 0; j < end() /2; j++) {
        push(front());
        cout<<"j"  << j <<endl;
    }
    cout << front() << "\n";
    return 0;
}

queue를 간단히 구현하여 동작시킨 코드입니다. 위의 코드를 실행 하고 4를 입력하면 queue에 1,2,3,4 순으로 쌓이고 가장 끝에 있는 값에 /2를 해서 for문을 돌리려고 하는데요 end 함수를 동작시키면 4가 나오지만 end()/2를 하면 1이 나오는 것 같습니다. 대신 end()의 값을 변수 t에 담아 t/2를 하면 2가 나와 2번 for문을 도는데 왜이런가요?

위 코드의 결과는 아래와 같습니다. 4 -> 입력 j0 2

1 답변

  • 좋아요

    0

    싫어요
    채택 취소하기

    4를 입력하여 큐에 1, 2, 3, 4가 들어간 상태에선 end()가 4이지만, push(front());가 실행되면 front()함수에 의해 앞의 1이 빠져 나온 후, 그 값이 큐의 뒤로 들어가게 됩니다. 따라서 이제 큐의 상태는 2, 3, 4, 1이 됩니다. 이 상태에서 end()를 읽으면 반환값은 1이고, 1/2는 0이기 때문에 j가 1일 때의 for루프 조건은 1 < 0인 거짓이 되어서 for 루프를 빠져나온 것입니다.

    • (•́ ✖ •̀)
      알 수 없는 사용자
    • 멋쟁이,,,,,이십니다... 큐의 상태가 바뀌는 것을 고려하지 않아서 발생한 문제군용! 바로 이해했습니다. 정말 감사합니다! NyangUk 2022.5.11 14:04

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

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

(ಠ_ಠ)
(ಠ‿ಠ)