미니 셀 저장소
문제
N개의 셀이 있다. 셀 번호는 0번부터 N-1번까지다. 각 셀은 정수, 실수, 문자열 중 하나를 저장한다.
초기 셀 정보는 다음 형식으로 주어진다.
I value (정수)
F value (실수)
S string (문자열)
명령은 다음과 같다.
PRINT i
: i번 셀의 타입과 값을 출력한다.
정수면 I 값, 실수면 F 값(소수점 둘째 자리까지), 문자열이면 S 문자열 형식.
COPY a b
: a번 셀 전체를 b번 셀에 복사한다.
SETI i value / SETF i value / SETS i string
: i번 셀을 해당 타입과 값으로 바꾼다.
ADD a b
: 두 셀이 모두 숫자(정수 또는 실수)이면 합을 출력한다.
둘 다 정수면 정수로, 하나라도 실수면 소수점 둘째 자리까지 출력한다.
둘 중 하나라도 문자열이면 ERROR를 출력한다.
LEN i
: i번 셀이 문자열이면 길이를 출력하고, 문자열이 아니면 ERROR를 출력한다.
입력
N
cell0
cell1
...
cellN-1
Q
command
...
출력
PRINT, ADD, LEN 명령마다 결과를 출력한다.
제한
1 <= N <= 30
1 <= Q <= 100
0 <= i, a, b < N
문자열 길이 <= 29
정수와 실수 값의 절댓값은 1,000,000 이하이다.
ADD 결과의 절댓값은 2,000,000 이하이다.
문자열은 공백을 포함하지 않는다.
예제 입력
3
I 10
S ab
F 1.50
7
PRINT 1
ADD 0 2
ADD 0 1
COPY 0 1
ADD 0 1
SETS 2 hello
LEN 2
예제 출력
S ab
11.50
ERROR
20
5
힌트 보기
typedef enum { CELL_INT, CELL_FLOAT, CELL_STRING } CellType;
typedef struct {
CellType type;
union {
int i;
float f;
char s[30];
} data;
} Cell;
코멘트