• 문제 링크
16506번: CPU
디지털하드웨어설계 과목의 최종 프로젝트는 16-bit CPU를 설계하고 Verilog 언어로 구현하는 것이다. 본인이 구현한 CPU가 제대로 동작하는지 테스트하기 위해서는 기계어 코드를 입력으로 주어야
www.acmicpc.net
• 풀이 과정
뒷자리에 C가 붙는 경우를 제외한 각각의 opcode는 0 ~ 11까지의 이진수의 값을 갖는다.
각 코드를 배열에 저장하고 각각의 인덱스에 대응하는 십진수를 이진수로 변환할 함수를 생성한다.
변환하고자 하는 값을 2로 연속해서 나눈 나머지 값을 순차적으로 나열 후 해당 문자열을 뒤집어 변환하며
이 함수를 활용해 나머지 각각의 값과 자릿수를 매개변수로 넣어 3~4 자리 이진수 값이 반환되고,
이를 주어진 조건에 맞게 결합한 전체 이진수 값을 출력한다.
• 풀이 코드
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st;
int n = Integer.parseInt(br.readLine());
String[] codes = { "ADD", "SUB", "MOV", "AND", "OR", "NOT", "MULT", "LSFTL", "LSFTR", "ASFTR", "RL", "RR" };
for (int i = 0; i < n; i++) {
st = new StringTokenizer(br.readLine());
String code = st.nextToken();
int rD = Integer.parseInt(st.nextToken());
int rA = Integer.parseInt(st.nextToken());
int bc = Integer.parseInt(st.nextToken());
for (int j = 0; j < codes.length; j++) {
if (code.equals(codes[j])) {
bw.write(binary(j, 4) + "00" + binary(rD, 3) + binary(rA, 3) + binary(bc, 3) + '0' + "\n");
break;
}
if (code.equals(codes[j] + 'C')) {
bw.write(binary(j, 4) + "10" + binary(rD, 3) + binary(rA, 3) + binary(bc, 4) + "\n");
break;
}
}
}
bw.flush();
}
private static String binary(int n, int digit) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < digit; i++) {
sb.append(n % 2);
n = n / 2;
}
return sb.reverse().toString();
}
}
'Problem Solving > Baekjoon' 카테고리의 다른 글
[백준] 16113 시그널 - Implementation / Java (0) | 2022.06.24 |
---|---|
[백준] 14499 주사위 굴리기 - Implementation / Java (0) | 2022.06.23 |
[백준] 14500 테트로미노 - Implementation / Java (0) | 2022.06.21 |
[백준] 1966 프린터 큐 - Data Structure / Java (0) | 2022.06.20 |
[백준] 17413 단어 뒤집기 2 - Data Structure / Java (0) | 2022.06.19 |
댓글