[백준 | Javascript] 9093

박기영·2022년 8월 30일
0

백준

목록 보기
90/127

기초 알고리즘 1/2. 200 - 자료구조 1
9093번. 단어 뒤집기

문제

9093번 문제 링크

solution

const fs = require("fs");
let input = fs.readFileSync("/dev/stdin").toString().trim().split("\n");

const iter = input.shift();

// 시간 초과를 방지하기 위해 ans 배열에 답을 담아 join으로 하나의 문자열 출력
let ans = [];

for(let i = 0; i < iter; i++){
    let sentence = [];
    
    // input으로 들어온 하나의 문장을 공백 기준으로 쪼개서 단어 단위로 만듦.
    let arr = input[i].split(" ");
    
    for(let j = 0; j < arr.length; j++){
        // 하나의 단어를 하나의 알파벳으로 쪼갬.
        // reverse가 배열에 적용되는 메서드이므로, 알파벳 배열로 만들어서 메서드 적용.
        // reverse 후 join을 사용해 단어 단위로 만들어줌.
        let word = arr[j].split("").reverse().join("");
        
        // sentence에는 뒤집혀진 단어가 push됨.
        // sentence에는 쪼개진 단어들이 원소로 들어가게 됨.
        sentence.push(word);
    }
    
    // 각 단어가 reverse가 되어서 sentence에 들어가 있으므로,
    // 그들을 다시 join(" ")해서 하나의 문자열로 만들어줌.
    let newSentence = sentence.join(" ");
    
    ans.push(newSentence);
}

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

주의할 점

reverse() 메서드는 많은 분들이 떠올리셨을거라 생각한다.
만약, 여기서 짧게 생각하고 진행하면 오답 처리가 됐을 것이다.
reverse() 메서드는 문자열에 적용해도 아무 의미가 없기 때문이다.
reverse는 배열에 적용되는 메서드이다. 또한, 원본이 수정되므로 주의하자!!

예시를 통해 살펴보자.

let test = "i hate test";

// 오답
let reverseTest = test.reverse();  // 에러 발생

// 정답
let reverseTest = test.split(" ");  // ["i","hate","test"]

let word = reverseTest[1].split("")  // ["h","a","t","e"]

word.reverse();  // ["e","t","a","h"]

let ans = reverseWord.join("")  // "etah"

참고 자료

참고 자료 1

profile
나를 믿는 사람들을, 실망시키지 않도록

0개의 댓글