Young

CPU 본문

코딩 테스트 대비 추천 문제

CPU

yyjjang9 2019. 3. 9. 01:13
728x90
반응형

문제를 풀어본 후 해설을 보시면 좋습니다 !! ^ㅡ^


예상 난이도 : 2 / 10

이번 문제는 'CPU' (https://www.acmicpc.net/problem/16506) 입니다.


전형적인 구현 문제 입니다.


이 문제가 좋다고 생각한 이유는 '문자열 처리와 비트 연산에 대해서 연습할 수 있는 문제'이기 때문입니다.


문제는 명령어 끝에 'C'가 붙어 있으면 opcode 마지막 값이 1 이라는 것을 확인하고, ADD부터 RRC까지 1씩 증가하고 

있다는 것을 확인한 후 코드를 짜면 더 쉽게 짤 수 있을 것 입니다.


명령어가 16bit 이므로 int 변수에서 처리해도 충분합니다.

그리고 '<<' shift 연산자를 잘 이용하면 편리하겠죠.


1
string op[] = { "ADD","SUB","MOV","AND","OR","NOT","MULT","LSFTL","LSFTR","ASFTR","RL","RR" };
cs


저 같은 경우는 이런 식으로 명령어를 저장해 놓고 풀었습니다.

하지만 명령어가 몇 번째에 있는지 일일이 루프를 돌면서 찾는 것은 너무 비효율적입니다.

효율을 높이기 위해서는 c++ 에서 map 이라는 자료구조를 사용하는 것이 좋겠죠.


1
2
3
map<stringint> mp;
    for (int i = 0; i < 12; i++)
        mp[op[i]] = i;
cs


그래서 이런 식으로 맵에 집어넣고 


1
int opcode = mp[k] << 1;
cs


이런식으로 한 번에 찾았습니다.


문제의 그림에 설명되어 있는대로 opcode ->레지스터 번호를 구현하면 됩니다.

한 단계씩 진행하면서 '<<' shift 연산자를 알맞게 이동해주면서 값을 더해주면 되겠습니다.



728x90
반응형

'코딩 테스트 대비 추천 문제' 카테고리의 다른 글

Round Robin  (0) 2019.03.11
LRU Caching  (0) 2019.03.10
개미  (0) 2019.03.09
경매  (0) 2019.03.09
BOJ를 체계적으로 풀어보자!  (0) 2019.02.20