https://www.acmicpc.net/problem/29701
const filePath = process.platform === 'linux' ? 0 : './input.txt';
const [N, input] = require('fs').readFileSync(filePath).toString().split('\n');
function translate(m){
const table = {
'.-': 'A',
'-...': 'B',
'-.-.': 'C',
'-..': 'D',
'.': 'E',
'..-.': 'F',
'--.': 'G',
'....': 'H',
'..': 'I',
'.---': 'J',
'-.-': 'K',
'.-..': 'L',
'--': 'M',
'-.': 'N',
'---': 'O',
'.--.': 'P',
'--.-': 'Q',
'.-.': 'R',
'...': 'S',
'-': 'T',
'..-': 'U',
'...-': 'V',
'.--': 'W',
'-..-': 'X',
'-.--': 'Y',
'--..': 'Z',
'-----': '0',
'.----': '1',
'..---': '2',
'...--': '3',
'....-': '4',
'.....': '5',
'-....': '6',
'--...': '7',
'---..': '8',
'----.': '9',
'--..--': ',',
'.-.-.-': '.',
'..--..': '?',
'---...': ':',
'-....-': '-',
'.--.-.': '@',
}
return table[m]
}
function solution(N, input){
let mosArr = input.split(' ');
let result = ''
mosArr.forEach( m => {
result += translate(m)
})
return result
}
console.log(solution(N, input))
이 코드는 주어진 모스 부호 메시지를 해독하여 원래 문자열을 출력하는 문제를 해결하기 위해 작성되었습니다.
translate
함수와 solution
함수를 분리하여, 모스 부호를 변환하는 기능과 전체 메시지를 해독하는 기능을 명확하게 분리했습니다.table
)로 작성하여, 변환 시 O(1) 시간 복잡도로 변환이 가능합니다.변환 테이블 외부로 분리:
table
)이 translate
함수 내에 선언되어 있어, 함수가 호출될 때마다 테이블을 새로 정의합니다. 이는 불필요한 반복이므로, table
객체를 translate
함수 바깥에 선언하여 함수 호출 시 테이블을 재정의하지 않도록 하는 것이 좋습니다.forEach
대신 map
사용:
mosArr.forEach(m => { result += translate(m); })
대신 map
과 join
을 사용하면 좀 더 간결하게 문자열을 생성할 수 있습니다.result = mosArr.map(translate).join('');
형태로 수정하면 result
를 반복해서 업데이트할 필요가 없어 코드가 간결해집니다.입력 변수 검증:
N
값이 주어진 모스 부호 메시지의 길이와 일치하는지 검증하는 조건을 추가하여, 예상치 못한 입력을 미리 확인할 수 있습니다.전체 코드 개선:
const filePath = process.platform === 'linux' ? 0 : './input.txt';
const [N, input] = require('fs').readFileSync(filePath).toString().split('\n');
// 모스 부호 변환 테이블을 함수 외부로 분리
const table = {
'.-': 'A', '-...': 'B', '-.-.': 'C', '-..': 'D', '.': 'E',
'..-.': 'F', '--.': 'G', '....': 'H', '..': 'I', '.---': 'J',
'-.-': 'K', '.-..': 'L', '--': 'M', '-.': 'N', '---': 'O',
'.--.': 'P', '--.-': 'Q', '.-.': 'R', '...': 'S', '-': 'T',
'..-': 'U', '...-': 'V', '.--': 'W', '-..-': 'X', '-.--': 'Y',
'--..': 'Z', '-----': '0', '.----': '1', '..---': '2', '...--': '3',
'....-': '4', '.....': '5', '-....': '6', '--...': '7', '---..': '8',
'----.': '9', '--..--': ',', '.-.-.-': '.', '..--..': '?', '---...': ':',
'-....-': '-', '.--.-.': '@'
};
function translate(morseCode) {
return table[morseCode];
}
function solution(N, input) {
// 모스 부호 메시지를 해독하여 원래 문자열을 반환
return input.split(' ').map(translate).join('');
}
console.log(solution(N, input));
table
객체를 함수 외부로 옮겨, translate
함수가 호출될 때마다 객체가 생성되지 않도록 했습니다.map
과 join
사용: 모스 부호를 각각 해독하여 map
을 통해 배열을 생성하고 join
을 사용해 문자열로 결합했습니다. 코드가 더 간결해졌고 result
변수를 추가할 필요가 없어졌습니다.이렇게 수정하면 코드의 성능이 약간은 향상되고, 코드 가독성도 더 좋아집니다.