| 시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
|---|---|---|---|---|---|
| 1 초 (추가 시간 없음) | 512 MB | 2115 | 467 | 416 | 23.137% |
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번