백준/ Silver 5 문제 , 백준 Node.js 자바스크립트 9037 , The candy war
Check Point ! ( 해당사항 ✓체크 )
1. 막힘 없이 수월하게 풀린 문제인가?
2. 1시간이내로 풀렸던 문제인가?
3. 1시간 이상 or 며칠을 두고 풀어봤더니 풀린 문제인가?
4. 시간을 써도 도무지 풀 수 없는 문제인가?
5. 솔루션을 찾아봤는가?
-------------------------------------------------------------------------------------------
난이도 체감
1. 최상
2. 상
3. 중
4. 하
<이해도>
1. 완벽히 이해
2. 다소 헷갈리는 부분들이 있음
3. 이해 못함
<덧붙일 말>
로직 자체는 간단한데 언어가 아직 익숙하지 않아서 그런지 오래걸렸다
문제 출처
https://www.acmicpc.net/problem/9037
정답
const { exit } = require("process");
const input = require("fs")
.readFileSync("/dev/stdin")
.toString()
.trim()
.split("\n");
const T = input.shift();
// 홀수는 짝수로 맞춰주기
const flatF = (array) => {
let i = 0;
array.map((v) => {
if (Number(v) % 2 != 0) {
array[i] = Number(v) + 1;
} else {
array[i] = Number(v);
}
i += 1;
});
return array;
};
for (let i = 0; i < T * 2; i += 2) {
let arr = input[i + 1].split(" ");
let K = Number(input[i]);
let cnt = 0;
// 초기 평탄화 작업
arr = flatF(arr);
let check = arr.every((value) => value === arr[0]);
// 만약 순환 안 시켜도 되는 경우
if (arr.length === 1 || check === true) {
console.log(0);
continue;
}
while (true) {
let newArr = [];
for (let j = 0; j < K; j++) {
if (j === 0) {
newArr.push(Number(arr[0] / 2) + Number(arr[K - 1] / 2));
} else {
newArr.push(Number(arr[j] / 2) + Number(arr[j - 1] / 2));
}
}
// 루프 한번 돌고 꼭 평탄환해주기
let flatArr = flatF(newArr);
cnt += 1;
// 만약 모두 동일할 시 true 리턴
let check = flatArr.every((value) => value === flatArr[0]);
if (check === true) {
break;
}
// 배열 초기화
arr = flatArr;
}
console.log(cnt);
}
반응형
'알고리즘 공부 > 백준 - 자바스크립트' 카테고리의 다른 글
백준/ Silver 2 문제 , 백준 Node.js 자바스크립트 24479 , 알고리즘 수업 - 깊이 우선 탐색 1 (0) | 2022.09.05 |
---|---|
백준/ Silver 2 문제 , 백준 Node.js 자바스크립트 5567 , 결혼식 (0) | 2022.09.05 |
백준/ Silver 5 문제 , 백준 Node.js 자바스크립트 2303 , 숫자 게임 (0) | 2022.09.03 |
백준/ Bronze 2 문제 , 백준 Node.js 자바스크립트 5586 , JOI와 IOI (0) | 2022.09.03 |
백준/ Bronze 2 문제 , 백준 Node.js 자바스크립트 14697 , 방 배정하기 (0) | 2022.09.03 |