ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [구름 트레이닝] 막대 도형
    알고리즘 2024. 3. 20. 12:48

    ❓문제 설명

    • 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 하나에 담을 수 있었을텐데라는 아쉬움이 남는다.

    댓글

Designed by Tistory.