728x90
https://www.acmicpc.net/problem/16506
구현
아래와 같이 어셈블리어를 아래 표의 규칙에 따라 기계어로 변환하는 문제
완전 구현 문제다
MOVC 1 0 5 --> 0010100010000101
접근방법
어셈블리어를 띄어쓰기 기준으로 구분해서 모두 조건별로 기계어 코드를 구해서 합쳐서 출력하면 끝~
오답노트
중간에 print()를 잘못넣어둬서 출력형식이 다르다고 계속 뜨더라구요.
조심하십쇼
소스코드
import Foundation
func solution() -> [String] {
let map:[String:String] = [
"ADD":"00000",
"ADDC":"00001",
"SUB":"00010",
"SUBC":"00011",
"MOV":"00100",
"MOVC":"00101",
"AND":"00110",
"ANDC":"00111",
"OR":"01000",
"ORC":"01001",
"NOT":"01010",
"MULT":"01100",
"MULTC":"01101",
"LSFTL":"01110",
"LSFTLC":"01111",
"LSFTR":"10000",
"LSFTRC":"10001",
"ASFTR":"10010",
"ASFTRC":"10011",
"RL":"10100",
"RLC":"10101",
"RR":"10110",
"RRC":"10111",
]
let n:Int = Int(readLine()!)!
var results:[String] = []
var inputs:[[String]] = []
for _ in 0..<n {
let input:[String] = (readLine()?.split(separator: " ").map{String($0)})!
inputs.append(input)
}
for input in inputs {
var result = ""
var isC = false
let opcode = map[input[0]]!
if Array(input[0]).last == "C" {
isC = true
}
result += opcode+"0"
let rD:Int = Int(input[1])!
let srD = String(rD, radix: 2)
result += String(repeating: "0", count: 3-srD.count) + srD
let rA = Int(input[2])!
if input[0] == "MOV" || input[0] == "NOT" || input[0] == "MOVC" {
result += "000"
} else {
let srA = String(rA, radix: 2)
result += String(repeating: "0", count: 3-srA.count) + srA
}
let rBC = Int(input[3])!
if isC {
let srBC = String(rBC, radix: 2)
result += String(repeating: "0", count: 4-srBC.count) + srBC
} else {
let srBC = String(rBC, radix: 2)
result += String(repeating: "0", count: 3-srBC.count) + srBC + "0"
}
results.append(result)
}
return results
}
solution().forEach { print($0) }
728x90
'알고리즘 문제풀이' 카테고리의 다른 글
[백준 2178] 미로 탐색 (Swift) (0) | 2025.03.03 |
---|---|
[백준 16197] 두 동전 (Swift) (0) | 2025.02.26 |
[백준 1890] 점프 (Swift) (0) | 2025.02.26 |
[백준 1303] 전쟁 - 전투 (Swift) (0) | 2025.02.24 |
[프로그래머스] 파일 정렬 (Swift) (0) | 2025.02.21 |