상세 컨텐츠

본문 제목

백준 2309 : 일곱 난쟁이

밀라 알고리즘 스터디

by qkrtnals 2025. 1. 7. 14:55

본문

💡기본 정보

유형
: 브루트포스
풀이 날짜
: 2025년 01월 07일 
풀이방법 한줄 요약
:이중 for문으로 제외되는 난쟁이를 찾아내기

 

💡문제에서 구해야 할 것
일곱난쟁이의 키의 합이 100이 됨.

  - 입력 : 아홉 개의 줄에 걸쳐 난쟁이들의 키가 주어짐. 100을 넘지 않는 자연수 . 아홉 난쟁이의 키는 모두 다름
    출력 : 일곱난쟁이의 키를 오름차순으로 출력 (일곱난쟁이를 찾을 수 없는 경우 X)

 

💡알고리즘 설계
- 난쟁이 2명을 제외하곤 100이 되어야함

- 즉, 전체합 -난쟁이-난쟁이=100 이어야함 

-선택될 두 난쟁이를 제외해줌(이중 for 문으로)

 

💡CODE

const fs = require("fs");
const heights = fs
  .readFileSync(0, "utf8")
  .toString()
  .trim()
  .split("\n")
  .map(Number);

function snowwhite() {
  const totalSum = heights.reduce((total, now) => total + now, 0);

  for (let i = 0; i < heights.length; i++) {
    for (let j = i + 1; j < heights.length; j++) {
      if (totalSum - heights[i] - heights[j] === 100) {
        return heights.filter((_, index) => index !== i && index !== j);
      }
    }
  }
  return null;
}

const result = snowwhite();
if (result) {
  console.log(result.sort((a, b) => a - b).join("\n"));
}

 

💡시간복잡도

💡 틀린 이유 & 틀린 부분 수정

- 오름차순 정리를 까먹음

- 찾지 못했을 때 null 을 return 하는 로직을 까먹음

 

💡 다른 풀이 or 기억할정보

 const heights = fs.readFileSync(0,"utf8").toString().trim().split("\n").map(number); 

입력할 때 여러 개의 문단 나눔으로 구분해서 입력할 때 

console.log(result.sort((a,b)=>a-b).join("\n")); 

출력할 때 여러 개의 문단 나눔과 오름차순 정리해서 출력할 때

관련글 더보기