❗ 풀이
const input = require('fs').readFileSync('dev/stdin').toString().trim().split('');
let countObject = {};
let fillArray = new Array(input.length).fill('');
input.forEach((element) => {
countObject[element] == null ? (countObject[element] = 1) : countObject[element]++;
});
let isPossible = true;
let centerStr = '';
Object.keys(countObject).forEach((key) => {
if (countObject[key] % 2 !== 0) {
if (centerStr === '') {
centerStr = key;
countObject[key]--;
} else {
isPossible = false;
return;
}
}
});
if (!isPossible) {
console.log("I'm Sorry Hansoo");
} else {
let i = 0;
Object.keys(countObject).sort().forEach((key) => {
const count = countObject[key];
for (let j = 0; j < count / 2; j++) {
fillArray[i] = key;
fillArray[fillArray.length - i - 1] = key;
i++;
}
});
if (centerStr !== '') {
const centerIdx = Math.floor(fillArray.length / 2);
fillArray[centerIdx] = centerStr;
}
console.log(fillArray.join(''));
}
- 먼저 입력받은 문자열에서 각 문자의 등장 횟수를 세어주는 객체 countObject를 생성
- forEach를 사용하여 문자열의 각 문자를 하나씩 순회하고, 해당 문자가 countObject 객체에 존재하는지 여부를 확인
- 만약 해당 문자가 처음 발견된 것이라면 countObject 객체에 해당 문자를 key로 가지는 새로운 속성을 추가하고, 값은 1로 초기화
- 이미 해당 문자가 countObject 객체에 존재하는 것이라면 해당 문자의 등장 횟수를 증가
- 이 후 에는 countObject 객체를 순회하며, 문자열을 팰린드롬으로 만들기 위해 반복해야 하는 문자를 fillArray 배열에 추가
- Object.keys(countObject)를 사용하여 countObject 객체의 속성을 배열 형태로 추출한 뒤, forEach를 사용하여 배열의 각 요소를 순회
- 순회할 때는 해당 문자의 등장 횟수를 구하고, 문자열의 반을 구한 뒤 반만큼 해당 문자를 fillArray 배열에 추가
- for 문을 사용하여 해당 문자의 등장 횟수를 반으로 나눈 값을 기준으로 반복하여, 배열의 왼쪽과 오른쪽 끝부터 해당 문자를 채워 넣음.
- 이 과정을 거치면 fillArray 배열은 왼쪽에서부터 회문의 앞부분, 오른쪽에서부터 팰린드롬의 뒷부분이 채워짐
- 만약 문자열의 길이가 홀수인 경우, 중앙에 위치할 문자를 centerStr 변수에 저장해두고 fillArray 배열의 중앙 인덱스를 구한 뒤, 해당 위치에 centerStr 문자를 삽입
- isPossible 변수가 false라면 "I'm Sorry Hansoo"를 출력하고, 그렇지 않은 경우 fillArray 배열을 문자열로 변환하여 출력
- 조건에 따라 사전순으로 앞서는 팰린드롬을 출력해야 한다면, 출력 전에 fillArray 배열을 정렬해 주면 됨
'알고리즘 풀이' 카테고리의 다른 글
[JAVASCRIPT] 백준 1254번 문제 풀이 (0) | 2023.05.28 |
---|---|
[JAVASCRIPT] 백준 4659번 문제 풀이 (0) | 2023.05.26 |
[JAVASCRIPT] 백준 17413번 문제 풀이 (0) | 2023.04.20 |
[JAVASCRIPT] 백준 11655번 문제 풀이 (1) | 2023.04.17 |
[JAVASCRIPT] 백준 10820번 문제 풀이 (0) | 2023.04.15 |