시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
---|---|---|---|---|---|
1 초 (추가 시간 없음) | 512 MB | 1646 | 354 | 321 | 23.194% |
NOTE: 이 문제의 내용은 C++11 이후의 표준을 따릅니다.
새내기들을 위해 C++ 스터디를 준비하던 키파는 인터넷에서 신기한 연산자를 발견했다. 바로 화살표 연산자(<--
)이다.
프로그램 | 출력 |
#include <iostream> |
9 |
위와 같이 화살표 연산자를 사용하면 연산자 오른쪽에 있는 변수가 연산자 왼쪽의 값을 향해 다가간다! 심지어 이 연산자는 화살표의 길이(-
의 개수)를 늘려서 값이 바뀌는 속도를 더 빠르게 할 수도 있다.
프로그램 | 출력 |
#include <iostream> |
8 |
화살표의 길이가 2인 첫 번째 코드에서는 수가 9개 출력되었으나, 길이를 4로 늘린 두 번째 코드에서는 수가 4개밖에 출력되지 않았다. 변수가 2배 빠르게 값으로 다가간 것이다!
사실 이 화살표 연산자는 전위 감소 연산자(prefix decrement operator, --x
)를 이용한 농담으로, 0 <-- x
은 --x > 0
을 화살표처럼 보이도록 눈속임한 것이다. 따라서 첫 번째 코드의 반복문은 아래와 같이 동작한다.
x
의 값을 1 감소시킨다.x
의 값이 0보다 크지 않다면 프로그램을 종료한다.x
의 값을 출력하고 처음으로 돌아간다.감소 연산자는 아래와 같은 특징이 있다.
-
가 여러 개 연속되어 있을 때는 반드시 앞에서부터 두 개씩 끊어서 해석된다. 예를 들어 ------x
는 -- - -- -x
또는 - -- - --x
등이 아니라 반드시 -- -- --x
로 해석된다.-x
)가 적용된 식에는 적용할 수 없다. 예를 들어 -----x
는 -- -- -x
로 해석되고, 감소 연산자가 -x
에 적용되었으므로 컴파일에 실패한다.두 번째 코드의 0 <---- x
는 -- --x > 0
과 같고, 감소 연산자가 두 번 적용되었으므로 x
의 값이 한번에 2씩 줄어든다.
위의 코드에서 x
의 초기값과 화살표의 길이를 바꿨을 때, 몇 개의 수가 출력될지 예상해 보자.
첫 줄에 변수 x
의 초기값을 뜻하는 정수 X와 화살표의 길이를 뜻하는 정수 N(-100 ≤ X ≤ 100, 0 ≤ N ≤ 10)이 주어진다.
첫째 줄에 프로그램의 실행 결과를 출력한다.
INFINITE
를 출력한다.ERROR
를 출력한다. 10 4
4
-5 5
ERROR
3 0
INFINITE
세 번째 예시는 x
의 값이 항상 3이므로 프로그램이 3을 무한히 출력한다.
University > 서울대학교 > 2018 서울대학교 프로그래밍 경시대회 > Division 2 C번