[백준 1213번] 그리디 알고리즘 - 팰린드롬 만들기

김민지·2023년 6월 24일
0

냅다 시작 백준

목록 보기
47/118

✨ 문제 ✨

✨ 정답 ✨

const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "./예제.txt";
let input = fs.readFileSync(filePath).toString().trim();
// const fs = require('fs'); 
// let input = fs.readFileSync('/dev/stdin').toString().trim();

let Alphabets = [];

input = input.split('')
for (let i = 0; i < input.length; i++) {
    if (Alphabets.find(el => el.name === input[i])) {
        let indexIs = Alphabets.findIndex(el => el.name === `${input[i]}`)

        let nextCountIs = Alphabets[indexIs].count + 1
        Alphabets[indexIs].count = nextCountIs

    } else {
        let newSource = {
            name: `${input[i]}`,
            count: 1
        }
        Alphabets.push(newSource)
    }
}


let answer=""
if (input.length % 2 === 0) {
    let isPossible = Alphabets.map((el) => el.count % 2 !== 0)
    if (isPossible.indexOf(true)!==-1) {
        console.log("I'm Sorry Hansoo")
    }else{
        let AlphabetArray=[];
        Alphabets.map((el)=>AlphabetArray.push(el.name))
        AlphabetArray.sort()
        for (let i=0;i<AlphabetArray.length;i++){
        let indexIs = Alphabets.findIndex(el => el.name === `${AlphabetArray[i]}`)
        for (let j=0;j<Math.floor(Alphabets[indexIs].count/2);j++){
            answer+=AlphabetArray[i]
            }
        }
        answer+=answer.split('').reverse().join('')


    }
} else {
    let oddNum=0;
    Alphabets.map((el)=>{(el.count%2!==0)?oddNum++:0})    
    if (oddNum>1){
        console.log("I'm Sorry Hansoo")
    }else{
        let AlphabetArray=[];
        Alphabets.map((el)=>AlphabetArray.push(el.name))
        AlphabetArray.sort()
        for (let i=0;i<AlphabetArray.length;i++){
            let indexIs = Alphabets.findIndex(el => el.name === `${AlphabetArray[i]}`)
            for (let j=0;j<Math.floor(Alphabets[indexIs].count/2);j++){
                    answer+=AlphabetArray[i]
                }
            }
            answer+=answer.split('').reverse().join('')
            let middle;
           Alphabets.map((el)=>(el.count%2!==0)?middle=el.name:0)
           answer=answer.slice(0,Math.floor(input.length/2))+middle+answer.slice(Math.floor(input.length/2),)
        
        }


}
console.log(answer)

🧵 참고한 정답지 🧵

💡💡 기억해야 할 점 💡💡

  1. 문자열 거꾸로 뒤집는 법: answer.split('').reverse().join('')
  2. 배열 내 객체에서 특정 원소의 인덱스를 찾는 법: Alphabets.findIndex(el => el.name === ${AlphabetArray[i]})

이번 건 너무 더럽게 푼 것 같다.

profile
이건 대체 어떻게 만든 거지?

0개의 댓글