처음 작성한 코드는 다음과 같다.
하지만 틀렸다는 결과가 나왔다.
출력할 때 문자열이 아닌 그냥 000 이런 int 형태로 출력하다보니,
c++에선 2진수가 아니라 10진수로 한 번 더 계산되어서 출력하기 때문에 생기는 문제였다.
000을 문자열 형태로 "000" 이런 식으로 출력해야했다.
#include <iostream>
#include <string>
using namespace std;
int main(){
int n;
cin >> n;
string str;
int D, A, B;
for(int i=0; i<n; i++){
cin >> str >> D >> A >> B;
if(str=="ADD")
cout << 00000;
else if(str=="ADDC")
cout << 00001;
else if(str=="SUB")
cout << 00010;
else if(str=="SUBC")
cout << 00011;
else if(str=="MOV")
cout << 00100;
else if(str=="MOVC")
cout << 00101;
else if(str=="AND")
cout << 00110;
else if(str=="ANDC")
cout << 00111;
else if(str=="OR")
cout << 01000;
else if(str=="ORC")
cout << 01001;
else if(str=="NOT")
cout << 01010;
else if(str=="MULT")
cout << 01100;
else if(str=="MULTC")
cout << 01101;
else if(str=="LSFTL")
cout << 01110;
else if(str=="LSFTLC")
cout << 01111;
else if(str=="LSFTR")
cout << 10000;
else if(str=="LSFTRC")
cout << 10001;
else if(str=="ASFTR")
cout << 10010;
else if(str=="ASFTRC")
cout << 10011;
else if(str=="RL")
cout << 10100;
else if(str=="RLC")
cout << 10101;
else if(str=="RR")
cout << 10110;
else if(str=="RRC")
cout << 10111;
cout << 0;
if(D==0)
cout << 000;
else if(D==1)
cout << 001;
else if(D==2)
cout << 010;
else if(D==3)
cout << 011;
else if(D==4)
cout << 100;
else if(D==5)
cout << 101;
else if(D==6)
cout << 110;
else if(D==7)
cout << 111;
if(str=="MOV" || str=="MOVC" || str=="NOT")
cout << 000;
else if(A==0)
cout << 000;
else if(A==1)
cout << 001;
else if(A==2)
cout << 010;
else if(A==3)
cout << 011;
else if(A==4)
cout << 100;
else if(A==5)
cout << 101;
else if(A==6)
cout << 110;
else if(A==7)
cout << 111;
if(str[str.length()-1] == 'C'){
if(B==0)
cout << 0000;
else if(B==1)
cout << 0001;
else if(B==2)
cout << 0010;
else if(B==3)
cout << 0011;
else if(B==4)
cout << 0100;
else if(B==5)
cout << 0101;
else if(B==6)
cout << 0110;
else if(B==7)
cout << 0111;
else if(B==8)
cout << 1000;
else if(B==9)
cout << 1001;
else if(B==10)
cout << 1010;
else if(B==11)
cout << 1011;
else if(B==12)
cout << 1100;
else if(B==13)
cout << 1101;
else if(B==14)
cout << 1110;
else if(B==15)
cout << 1111;
}
else{
if(B==0)
cout << 000;
else if(B==1)
cout << 001;
else if(B==2)
cout << 010;
else if(B==3)
cout << 011;
else if(B==4)
cout << 100;
else if(B==5)
cout << 101;
else if(B==6)
cout << 110;
else if(B==7)
cout << 111;
cout << 0;
}
cout << "\n";
}
return 0;
}
문자열 형태로 출력하니 성공했다.
#include <iostream>
#include <string>
using namespace std;
int main(){
int n;
cin >> n;
string str;
int D, A, B;
for(int i=0; i<n; i++){
cin >> str >> D >> A >> B;
if(str=="ADD")
cout << "00000";
else if(str=="ADDC")
cout << "00001";
else if(str=="SUB")
cout << "00010";
else if(str=="SUBC")
cout << "00011";
else if(str=="MOV")
cout << "00100";
else if(str=="MOVC")
cout << "00101";
else if(str=="AND")
cout << "00110";
else if(str=="ANDC")
cout << "00111";
else if(str=="OR")
cout << "01000";
else if(str=="ORC")
cout << "01001";
else if(str=="NOT")
cout << "01010";
else if(str=="MULT")
cout << "01100";
else if(str=="MULTC")
cout << "01101";
else if(str=="LSFTL")
cout << "01110";
else if(str=="LSFTLC")
cout << "01111";
else if(str=="LSFTR")
cout << "10000";
else if(str=="LSFTRC")
cout << "10001";
else if(str=="ASFTR")
cout << "10010";
else if(str=="ASFTRC")
cout << "10011";
else if(str=="RL")
cout << "10100";
else if(str=="RLC")
cout << "10101";
else if(str=="RR")
cout << "10110";
else if(str=="RRC")
cout << "10111";
cout << "0";
if(D==0)
cout << "000";
else if(D==1)
cout << "001";
else if(D==2)
cout << "010";
else if(D==3)
cout << "011";
else if(D==4)
cout << "100";
else if(D==5)
cout << "101";
else if(D==6)
cout << "110";
else if(D==7)
cout << "111";
if(str=="MOV" || str=="MOVC" || str=="NOT")
cout << "000";
else if(A==0)
cout << "000";
else if(A==1)
cout << "001";
else if(A==2)
cout << "010";
else if(A==3)
cout << "011";
else if(A==4)
cout << "100";
else if(A==5)
cout << "101";
else if(A==6)
cout << "110";
else if(A==7)
cout << "111";
if(str[str.length()-1] == 'C'){
if(B==0)
cout << "0000";
else if(B==1)
cout << "0001";
else if(B==2)
cout << "0010";
else if(B==3)
cout << "0011";
else if(B==4)
cout << "0100";
else if(B==5)
cout << "0101";
else if(B==6)
cout << "0110";
else if(B==7)
cout << "0111";
else if(B==8)
cout << "1000";
else if(B==9)
cout << "1001";
else if(B==10)
cout << "1010";
else if(B==11)
cout << "1011";
else if(B==12)
cout << "1100";
else if(B==13)
cout << "1101";
else if(B==14)
cout << "1110";
else if(B==15)
cout << "1111";
}
else{
if(B==0)
cout << "000";
else if(B==1)
cout << "001";
else if(B==2)
cout << "010";
else if(B==3)
cout << "011";
else if(B==4)
cout << "100";
else if(B==5)
cout << "101";
else if(B==6)
cout << "110";
else if(B==7)
cout << "111";
cout << "0";
}
cout << "\n";
}
return 0;
}
'백준' 카테고리의 다른 글
백준 1965 상자넣기, c++ (0) | 2024.03.09 |
---|---|
백준 2290 LCD Test, c++ (0) | 2024.03.08 |
백준 3568 iSharp, c++ (0) | 2024.03.07 |
백준 1141 접두사, c++ (0) | 2024.03.06 |
백준 12026 BOJ 거리, c++ (0) | 2024.03.06 |