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 변수를 추가할 필요가 없어졌습니다.이렇게 수정하면 코드의 성능이 약간은 향상되고, 코드 가독성도 더 좋아집니다.