❓문제 설명
- 2줄로 구성된 input을 CL을 통해서 받는다 첫번째는 막대의 개수고 두번째는 높이인데 " "로구분된 문자열임
- 막대를 다 붙여서 하나의 도형이 생기는데 이 도형의 둘레를 구하는 것임
✅ 문제 해결
- 막대를 통합적으로 보지말고 하나씩 나눠서 합쳤을 때 몇을 빼는지에 초점을 맞춤
- 한 변의 길이는 무조건 1로 고정이기에 막대 하나의 둘레를 구하는 공식은 (한변 * 2) + 2이다
- 그리고 막대가 서로 맞닿는 부분에 대해서만 각 막대의 둘레에서 빼주면 되니깐 Math.min()를 통해서 작은 수를 구하고 *2해줘서 빼줄 것임
- 이걸 다 반복문으로 돌려서 총합 만들어서 뺄 것임
const readline = require('readline');
(async () => {
let rl = readline.createInterface({ input: process.stdin });
let lines = []; // 입력을 저장할 배열
let numberOfLinesToRead = 2; // 읽을 줄 수 설정
for await (const line of rl) {
lines.push(line); // 입력된 줄을 lines 배열에 저장
if (lines.length === numberOfLinesToRead) {
// 지정된 줄 수를 모두 읽었다면 처리 시작
const heights = lines[1].split(" ").map(a=>+a)
let totalMinus = 0
for (let i=1; i < heights.length; i++) {
const minus = Math.min(heights[i], heights[i-1]) * 2
totalMinus += minus
}
const round = heights.reduce((acc, curr) => acc + (curr * 2 + 2), 0)
console.log(round - totalMinus)
rl.close(); // readline 인터페이스 닫기
}
}
process.exit();
})();
🔥 인상 깊은 남의 풀이
❕느낀점
- 문제를 분석할 때 좀 더 기초적인 부분부터 생각하는 느낌이다 메모장을 켜서 어떠한 특이점, 반복되는 구조를 가지고 있는지 파악하는 것을 먼저 해야한다는 것을 알게 되었다.
- 간단한 문제여서 풀이가 쉬운 것이지 좀 더 복잡한 구조로 들어가면 수학에 대한 개념이 많이 필요할 것이라 생각이 들었다.
- CL에 대해서 사용할 줄을 몰라서 GPT 썼는데 혹시나 모르니 구조는 이해하고 넘어가자
- reduce를 사용할 때 이전의 값을 불러올 수 있는 방법을 좀 더 생각했으면 reduce 하나에 담을 수 있었을텐데라는 아쉬움이 남는다.