[백준/BOJ/ICPC] 16360번 Go Latin (Node js / Javascript)

2023. 10. 22. 00:05코딩 테스트 (BOJ)

https://www.acmicpc.net/problem/16360

 

16360번: Go Latin

Your program is to read from standard input. The input starts with a line containing an integer, n (1 ≤ n ≤ 20), where n is the number of English words. In the following n lines, each line contains an English word. Words use only lowercase alphabet let

www.acmicpc.net

 

문제 해석

문제는 입력받은 문자열을 표를 참고해서 마지막이 English열에 해당하는 문자들 (-a, .. , -w) 로 끝나는 문자들은 매칭 되는 pseudo-Latin열의 문자들로 치환해주면 되는 간단한 문제이다.

 

만약 (-a, .. , -w) 로 끝나지 않는다면 뒤에 us를 붙여준다.

 

 

ICPC는 Javascript로는 풀 수 없기 때문에 아마 if문을 사용해 분기를 아주 많이 나누던가, case문을 사용하는 것이 아마  출제자의 의도였겠지만, 나는 Javascript로 푸니 객체를 이용해 English와 대응하는 라틴어를 한쌍으로 Object에 저장하는 방식으로 구현했다.

 

전체 코드
 
const fs = require("fs");

const input = fs.readFileSync("../input.txt").toString().trim().split("\n").map(item => item.replace("\r", ""));
input.shift();

var answer = [];

const obj = {
    "a": "as",
    "i" : "ios",
    "y" : "ios",
    "l" : "les",
    "n" : "anes",
    "ne" : "anes",
    "o" : "os",
    "r" : "res",
    "t" : "tas",
    "u" : "us",
    "v" : "ves",
    "w" : "was"
}

for(let i=0; i<input.length; i++){
    let changed = false;
    for(let [key, value] of Object.entries(obj)){
        if(input[i].endsWith(key)){
            let index = input[i].lastIndexOf(key);
           
            answer.push(input[i].substring(0, index) + value);
            changed = true;
        }
    }

    if(!changed){
        answer.push(input[i] + "us");
    }
}

console.log(answer.join("\n"));